First go at support of focusable widgets inside the palette.
Not enabled yet because focus confuses our deactivation logic but it seem to work otherwise.
This commit is contained in:
+5
-38
@@ -28,54 +28,21 @@ static void sugar_menu_init (SugarMenu *menu);
|
||||
G_DEFINE_TYPE(SugarMenu, sugar_menu, GTK_TYPE_MENU)
|
||||
|
||||
void
|
||||
sugar_menu_popup(SugarMenu *menu,
|
||||
int x,
|
||||
int y)
|
||||
sugar_menu_set_active(SugarMenu *menu, gboolean active)
|
||||
{
|
||||
GtkWidget *window;
|
||||
|
||||
window = GTK_MENU(menu)->toplevel;
|
||||
g_return_if_fail(window != NULL);
|
||||
|
||||
GTK_MENU_SHELL(menu)->active = TRUE;
|
||||
|
||||
gtk_widget_show(GTK_WIDGET(menu));
|
||||
|
||||
gtk_window_move(GTK_WINDOW(window), x, y);
|
||||
gtk_widget_show(window);
|
||||
GTK_MENU_SHELL(menu)->active = active;
|
||||
}
|
||||
|
||||
void
|
||||
sugar_menu_popdown(SugarMenu *menu)
|
||||
sugar_menu_embed(SugarMenu *menu, GtkContainer *parent)
|
||||
{
|
||||
GtkWidget *window;
|
||||
|
||||
window = GTK_MENU(menu)->toplevel;
|
||||
g_return_if_fail(window != NULL);
|
||||
|
||||
GTK_MENU_SHELL(menu)->active = FALSE;
|
||||
|
||||
gtk_widget_hide(GTK_WIDGET(menu));
|
||||
gtk_widget_hide(window);
|
||||
}
|
||||
|
||||
static void
|
||||
sugar_menu_size_request (GtkWidget *widget,
|
||||
GtkRequisition *requisition)
|
||||
{
|
||||
SugarMenu *menu = SUGAR_MENU(widget);
|
||||
|
||||
(* GTK_WIDGET_CLASS (sugar_menu_parent_class)->size_request) (widget, requisition);
|
||||
|
||||
requisition->width = MAX(requisition->width, menu->min_width);
|
||||
GTK_MENU(menu)->toplevel = gtk_widget_get_toplevel(GTK_WIDGET(parent));
|
||||
gtk_widget_reparent(GTK_WIDGET(menu), GTK_WIDGET(parent));
|
||||
}
|
||||
|
||||
static void
|
||||
sugar_menu_class_init(SugarMenuClass *menu_class)
|
||||
{
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(menu_class);
|
||||
|
||||
widget_class->size_request = sugar_menu_size_request;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
+5
-7
@@ -44,13 +44,11 @@ struct _SugarMenuClass {
|
||||
GtkMenuClass base_class;
|
||||
};
|
||||
|
||||
GType sugar_menu_get_type (void);
|
||||
void sugar_menu_popup (SugarMenu *menu,
|
||||
int x,
|
||||
int y);
|
||||
void sugar_menu_set_min_width (SugarMenu *menu,
|
||||
int min_width);
|
||||
void sugar_menu_popdown (SugarMenu *menu);
|
||||
GType sugar_menu_get_type (void);
|
||||
void sugar_menu_set_active (SugarMenu *menu,
|
||||
gboolean active);
|
||||
void sugar_menu_embed (SugarMenu *menu,
|
||||
GtkContainer *parent);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user