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:
Marco Pesenti Gritti
2007-08-08 03:07:00 +02:00
parent 2485e15030
commit 0b355dcbb9
5 changed files with 82 additions and 153 deletions
+5 -38
View File
@@ -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
View File
@@ -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