diff options
Diffstat (limited to 'gtk/gtkmenu.c')
-rw-r--r-- | gtk/gtkmenu.c | 141 |
1 files changed, 72 insertions, 69 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index c643669d2..b535bb149 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -24,6 +24,8 @@ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ +#define GTK_MENU_INTERNALS + #include <string.h> /* memset */ #include "gdk/gdkkeysyms.h" #include "gtkaccelmap.h" @@ -32,7 +34,6 @@ #include "gtkmain.h" #include "gtkmenu.h" #include "gtkmenuitem.h" -#include "gtksignal.h" #include "gtkwindow.h" #include "gtkhbox.h" #include "gtkvscrollbar.h" @@ -180,26 +181,28 @@ gtk_menu_get_private (GtkMenu *menu) return private; } -GtkType +GType gtk_menu_get_type (void) { - static GtkType menu_type = 0; + static GType menu_type = 0; if (!menu_type) { - static const GtkTypeInfo menu_info = + static const GTypeInfo menu_info = { - "GtkMenu", - sizeof (GtkMenu), sizeof (GtkMenuClass), - (GtkClassInitFunc) gtk_menu_class_init, - (GtkObjectInitFunc) gtk_menu_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) gtk_menu_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GtkMenu), + 0, /* n_preallocs */ + (GInstanceInitFunc) gtk_menu_init, }; - menu_type = gtk_type_unique (gtk_menu_shell_get_type (), &menu_info); + menu_type = g_type_register_static (GTK_TYPE_MENU_SHELL, "GtkMenu", + &menu_info, 0); } return menu_type; @@ -228,6 +231,7 @@ gtk_menu_class_init (GtkMenuClass *class) _("A title that may be displayed by the window manager when this menu is torn-off"), "", G_PARAM_READABLE | G_PARAM_WRITABLE)); + object_class->destroy = gtk_menu_destroy; widget_class->realize = gtk_menu_realize; @@ -351,8 +355,8 @@ gtk_menu_window_event (GtkWidget *window, { gboolean handled = FALSE; - gtk_widget_ref (window); - gtk_widget_ref (menu); + g_object_ref (window); + g_object_ref (menu); switch (event->type) { @@ -364,8 +368,8 @@ gtk_menu_window_event (GtkWidget *window, break; } - gtk_widget_unref (window); - gtk_widget_unref (menu); + g_object_unref (window); + g_object_unref (menu); return handled; } @@ -396,16 +400,15 @@ gtk_menu_init (GtkMenu *menu) menu->position_func_data = NULL; menu->toggle_size = 0; - menu->toplevel = g_object_connect (gtk_widget_new (GTK_TYPE_WINDOW, - "type", GTK_WINDOW_POPUP, - "child", menu, - NULL), + menu->toplevel = g_object_connect (g_object_new (GTK_TYPE_WINDOW, + "type", GTK_WINDOW_POPUP, + "child", menu, + NULL), "signal::event", gtk_menu_window_event, menu, "signal::size_request", gtk_menu_window_size_request, menu, "signal::destroy", gtk_widget_destroyed, &menu->toplevel, NULL); - gtk_window_set_policy (GTK_WINDOW (menu->toplevel), - FALSE, FALSE, TRUE); + gtk_window_set_resizable (GTK_WINDOW (menu->toplevel), FALSE); gtk_window_set_mnemonic_modifier (GTK_WINDOW (menu->toplevel), 0); /* Refloat the menu, so that reference counting for the menu isn't @@ -449,7 +452,7 @@ gtk_menu_destroy (GtkObject *object) gtk_menu_stop_scrolling (menu); - data = gtk_object_get_data (object, attach_data_key); + data = g_object_get_data (G_OBJECT (object), attach_data_key); if (data) gtk_menu_detach (menu); @@ -457,7 +460,7 @@ gtk_menu_destroy (GtkObject *object) if (menu->old_active_menu_item) { - gtk_widget_unref (menu->old_active_menu_item); + g_object_unref (menu->old_active_menu_item); menu->old_active_menu_item = NULL; } @@ -465,7 +468,7 @@ gtk_menu_destroy (GtkObject *object) if (menu->needs_destruction_ref_count) { menu->needs_destruction_ref_count = FALSE; - gtk_object_ref (object); + g_object_ref (object); } if (menu->accel_group) @@ -506,21 +509,21 @@ gtk_menu_attach_to_widget (GtkMenu *menu, /* keep this function in sync with gtk_widget_set_parent() */ - data = gtk_object_get_data (GTK_OBJECT (menu), attach_data_key); + data = g_object_get_data (G_OBJECT (menu), attach_data_key); if (data) { g_warning ("gtk_menu_attach_to_widget(): menu already attached to %s", - gtk_type_name (GTK_OBJECT_TYPE (data->attach_widget))); + g_type_name (G_TYPE_FROM_INSTANCE (data->attach_widget))); return; } - gtk_object_ref (GTK_OBJECT (menu)); + g_object_ref (menu); gtk_object_sink (GTK_OBJECT (menu)); data = g_new (GtkMenuAttachData, 1); data->attach_widget = attach_widget; data->detacher = detacher; - gtk_object_set_data (GTK_OBJECT (menu), attach_data_key, data); + g_object_set_data (G_OBJECT (menu), attach_data_key, data); if (GTK_WIDGET_STATE (menu) != GTK_STATE_NORMAL) gtk_widget_set_state (GTK_WIDGET (menu), GTK_STATE_NORMAL); @@ -540,7 +543,7 @@ gtk_menu_get_attach_widget (GtkMenu *menu) g_return_val_if_fail (GTK_IS_MENU (menu), NULL); - data = gtk_object_get_data (GTK_OBJECT (menu), attach_data_key); + data = g_object_get_data (G_OBJECT (menu), attach_data_key); if (data) return data->attach_widget; return NULL; @@ -555,13 +558,13 @@ gtk_menu_detach (GtkMenu *menu) /* keep this function in sync with gtk_widget_unparent() */ - data = gtk_object_get_data (GTK_OBJECT (menu), attach_data_key); + data = g_object_get_data (G_OBJECT (menu), attach_data_key); if (!data) { g_warning ("gtk_menu_detach(): menu is not attached"); return; } - gtk_object_remove_data (GTK_OBJECT (menu), attach_data_key); + g_object_set_data (G_OBJECT (menu), attach_data_key, NULL); data->detacher (data->attach_widget, menu); @@ -573,7 +576,7 @@ gtk_menu_detach (GtkMenu *menu) /* Fallback title for menu comes from attach widget */ gtk_menu_update_title (menu); - gtk_widget_unref (GTK_WIDGET (menu)); + g_object_unref (menu); } static void @@ -590,7 +593,7 @@ gtk_menu_remove (GtkContainer *container, */ if (menu->old_active_menu_item == widget) { - gtk_widget_unref (menu->old_active_menu_item); + g_object_unref (menu->old_active_menu_item); menu->old_active_menu_item = NULL; } @@ -601,7 +604,7 @@ gtk_menu_remove (GtkContainer *container, GtkWidget* gtk_menu_new (void) { - return GTK_WIDGET (gtk_type_new (gtk_menu_get_type ())); + return g_object_new (GTK_TYPE_MENU, NULL); } static void @@ -636,24 +639,24 @@ gtk_menu_tearoff_bg_copy (GtkMenu *menu) gc = gdk_gc_new_with_values (widget->window, &gc_values, GDK_GC_SUBWINDOW); - gdk_window_get_size (menu->tearoff_window->window, &width, &height); + gdk_drawable_get_size (menu->tearoff_window->window, &width, &height); pixmap = gdk_pixmap_new (menu->tearoff_window->window, width, height, -1); - gdk_draw_pixmap (pixmap, gc, - menu->tearoff_window->window, - 0, 0, 0, 0, -1, -1); - gdk_gc_unref (gc); + gdk_draw_drawable (pixmap, gc, + menu->tearoff_window->window, + 0, 0, 0, 0, -1, -1); + g_object_unref (gc); - gtk_widget_set_usize (menu->tearoff_window, - width, - height); + gtk_widget_set_size_request (menu->tearoff_window, + width, + height); gdk_window_set_back_pixmap (menu->tearoff_window->window, pixmap, FALSE); - gdk_pixmap_unref (pixmap); + g_object_unref (pixmap); } } @@ -710,7 +713,7 @@ gtk_menu_popup (GtkMenu *menu, * attached to a widget, try to get screen from its * toplevel window else go with the default */ - attach_data = gtk_object_get_data (GTK_OBJECT (menu), attach_data_key); + attach_data = g_object_get_data (G_OBJECT (menu), attach_data_key); if (attach_data) { if (!GTK_WIDGET_REALIZED (menu)) @@ -879,9 +882,9 @@ gtk_menu_popdown (GtkMenu *menu) if (menu_shell->active_menu_item) { if (menu->old_active_menu_item) - gtk_widget_unref (menu->old_active_menu_item); + g_object_unref (menu->old_active_menu_item); menu->old_active_menu_item = menu_shell->active_menu_item; - gtk_widget_ref (menu->old_active_menu_item); + g_object_ref (menu->old_active_menu_item); } gtk_menu_shell_deselect (menu_shell); @@ -892,7 +895,7 @@ gtk_menu_popdown (GtkMenu *menu) if (menu->torn_off) { - gtk_widget_set_usize (menu->tearoff_window, -1, -1); + gtk_widget_set_size_request (menu->tearoff_window, -1, -1); if (GTK_BIN (menu->toplevel)->child) { @@ -954,7 +957,7 @@ gtk_menu_get_active (GtkMenu *menu) menu->old_active_menu_item = child; if (menu->old_active_menu_item) - gtk_widget_ref (menu->old_active_menu_item); + g_object_ref (menu->old_active_menu_item); } return menu->old_active_menu_item; @@ -976,9 +979,9 @@ gtk_menu_set_active (GtkMenu *menu, if (GTK_BIN (child)->child) { if (menu->old_active_menu_item) - gtk_widget_unref (menu->old_active_menu_item); + g_object_unref (menu->old_active_menu_item); menu->old_active_menu_item = child; - gtk_widget_ref (menu->old_active_menu_item); + g_object_ref (menu->old_active_menu_item); } } } @@ -992,10 +995,10 @@ gtk_menu_set_accel_group (GtkMenu *menu, if (menu->accel_group != accel_group) { if (menu->accel_group) - gtk_accel_group_unref (menu->accel_group); + g_object_unref (menu->accel_group); menu->accel_group = accel_group; if (menu->accel_group) - gtk_accel_group_ref (menu->accel_group); + g_object_ref (menu->accel_group); _gtk_menu_refresh_accel_paths (menu, TRUE); } } @@ -1191,7 +1194,7 @@ gtk_menu_set_tearoff_state (GtkMenu *menu, menu->tearoff_hbox = gtk_hbox_new (FALSE, FALSE); gtk_container_add (GTK_CONTAINER (menu->tearoff_window), menu->tearoff_hbox); - gdk_window_get_size (GTK_WIDGET (menu)->window, &width, &height); + gdk_drawable_get_size (GTK_WIDGET (menu)->window, &width, &height); menu->tearoff_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, @@ -1199,7 +1202,7 @@ gtk_menu_set_tearoff_state (GtkMenu *menu, MENU_SCROLL_STEP, height/2, height)); - g_object_connect (GTK_OBJECT (menu->tearoff_adjustment), + g_object_connect (menu->tearoff_adjustment, "signal::value_changed", gtk_menu_scrollbar_changed, menu, NULL); menu->tearoff_scrollbar = gtk_vscrollbar_new (menu->tearoff_adjustment); @@ -1216,7 +1219,7 @@ gtk_menu_set_tearoff_state (GtkMenu *menu, gtk_menu_reparent (menu, menu->tearoff_hbox, FALSE); - gdk_window_get_size (GTK_WIDGET (menu)->window, &width, NULL); + gdk_drawable_get_size (GTK_WIDGET (menu)->window, &width, NULL); /* Update menu->requisition */ @@ -1297,7 +1300,7 @@ gtk_menu_get_title (GtkMenu *menu) { g_return_val_if_fail (GTK_IS_MENU (menu), NULL); - return gtk_object_get_data (GTK_OBJECT (menu), "gtk-menu-title"); + return g_object_get_data (G_OBJECT (menu), "gtk-menu-title"); } void @@ -1697,7 +1700,7 @@ gtk_menu_paint (GtkWidget *widget, border_x = GTK_CONTAINER (widget)->border_width + widget->style->xthickness; border_y = GTK_CONTAINER (widget)->border_width + widget->style->ythickness; - gdk_window_get_size (widget->window, &width, &height); + gdk_drawable_get_size (widget->window, &width, &height); if (event->window == widget->window) { @@ -1839,7 +1842,7 @@ gtk_menu_key_press (GtkWidget *widget, if (event->keyval == keyval && (mods & event->state) == mods) { - gtk_signal_emit_by_name (GTK_OBJECT (menu), "cancel"); + g_signal_emit_by_name (menu, "cancel", 0); } g_free (accel); @@ -1975,7 +1978,7 @@ gtk_menu_motion_notify (GtkWidget *widget, menu_shell->ignore_enter = FALSE; - gdk_window_get_size (event->window, &width, &height); + gdk_drawable_get_size (event->window, &width, &height); if (event->x >= 0 && event->x < width && event->y >= 0 && event->y < height) { @@ -2033,7 +2036,7 @@ gtk_menu_scroll_timeout (gpointer data) if ((menu->scroll_offset >= 0) && (offset < 0)) offset = 0; - gdk_window_get_size (widget->window, &view_width, &view_height); + gdk_drawable_get_size (widget->window, &view_width, &view_height); /* Don't scroll past the bottom if we weren't before: */ if (menu->scroll_offset > 0) @@ -2064,7 +2067,7 @@ gtk_menu_handle_scrolling (GtkMenu *menu, gboolean enter) menu_shell = GTK_MENU_SHELL (menu); gdk_window_get_pointer (GTK_WIDGET (menu)->window, &x, &y, NULL); - gdk_window_get_size (GTK_WIDGET (menu)->window, &width, &height); + gdk_drawable_get_size (GTK_WIDGET (menu)->window, &width, &height); border = GTK_CONTAINER (menu)->border_width + GTK_WIDGET (menu)->style->ythickness; @@ -2301,11 +2304,11 @@ gtk_menu_set_submenu_navigation_region (GtkMenu *menu, event_widget = gtk_get_event_widget ((GdkEvent*) event); gdk_window_get_origin (menu_item->submenu->window, &submenu_left, &submenu_top); - gdk_window_get_size (menu_item->submenu->window, &width, &height); + gdk_drawable_get_size (menu_item->submenu->window, &width, &height); submenu_right = submenu_left + width; submenu_bottom = submenu_top + height; - gdk_window_get_size (event_widget->window, &width, &height); + gdk_drawable_get_size (event_widget->window, &width, &height); if (event->x >= 0 && event->x < width) { @@ -2613,7 +2616,7 @@ gtk_menu_scroll_item_visible (GtkMenuShell *menu_shell, if (child == menu_item) { y = menu->scroll_offset; - gdk_window_get_size (GTK_WIDGET (menu)->window, &width, &height); + gdk_drawable_get_size (GTK_WIDGET (menu)->window, &width, &height); height -= 2*GTK_CONTAINER (menu)->border_width + 2*GTK_WIDGET (menu)->style->ythickness; @@ -2707,15 +2710,15 @@ gtk_menu_reparent (GtkMenu *menu, GtkWidget *widget = GTK_WIDGET (menu); gboolean was_floating = GTK_OBJECT_FLOATING (object); - gtk_object_ref (object); + g_object_ref (object); gtk_object_sink (object); if (unrealize) { - gtk_object_ref (object); + g_object_ref (object); gtk_container_remove (GTK_CONTAINER (widget->parent), widget); gtk_container_add (GTK_CONTAINER (new_parent), widget); - gtk_object_unref (object); + g_object_unref (object); } else gtk_widget_reparent (GTK_WIDGET (menu), new_parent); @@ -2723,7 +2726,7 @@ gtk_menu_reparent (GtkMenu *menu, if (was_floating) GTK_OBJECT_SET_FLAGS (object, GTK_FLOATING); else - gtk_object_unref (object); + g_object_unref (object); } static void |