summaryrefslogtreecommitdiff
path: root/gtk/gtkoptionmenu.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2001-01-04 17:48:43 +0000
committerHavoc Pennington <hp@src.gnome.org>2001-01-04 17:48:43 +0000
commitc7826b5f63930c960cdb53aa4935ee1f8f7f3b18 (patch)
treee62c661b717b8350d09f12113bdaead0a2f46483 /gtk/gtkoptionmenu.c
parent7b8ec35897a3221780c73d47c08b82d7aa7f73dd (diff)
downloadgtk+-c7826b5f63930c960cdb53aa4935ee1f8f7f3b18.tar.gz
Adapt to uscore-ification of gtktextiterprivate
2001-01-03 Havoc Pennington <hp@redhat.com> * gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate * gtk/gtktextdisplay.c (gtk_text_layout_draw): remove use of private functions; remove inclusion of private headers. * gtk/gtktextlayout.c (gtk_text_layout_get_iter_at_line): Add this function, so we don't need private functions in gtktextdisplay.c * gtk/gtktextiterprivate.h: underscore-ification * gtk/gtkwidget.c: Clean up a bunch of docs that said "INTERNAL" to instead say "only useful to implement widgets" * gtk/gtkenums.h (GtkMovementStep): Rename GTK_MOVEMENT_CHARS, GTK_MOVEMENT_POSITIONS to GTK_MOVEMENT_LOGICAL_POSITIONS, GTK_MOVEMENT_VISUAL_POSITIONS. Resolves bug 40249. * gdk/x11/gdkwindow-x11.c (gdk_window_impl_x11_set_colormap): This function was completely broken * gtk/testtext.c (line_numbers_expose): use gtk_paint_layout * gtk/gtkvscale.c (gtk_vscale_draw_value): use gtk_paint_layout * gtk/gtkvruler.c (gtk_vruler_draw_ticks): use gtk_paint_layout * gtk/gtklabel.c (gtk_label_expose): use gtk_paint_layout * gtk/gtkhscale.c (gtk_hscale_draw_value): use gtk_paint_layout * gtk/gtkhruler.c (gtk_hruler_draw_ticks): use gtk_paint_layout * gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_render): use gtk_paint_layout * gtk/gtkaccellabel.c (gtk_accel_label_expose_event): use gtk_paint_layout * gtk/gtkstyle.h: Add draw/paint expander to draw tree expanders. Progress on bug 40103. Add draw_layout to draw a PangoLayout. (struct _GtkStyleClass): Remove draw_cross, draw_oval, draw_ramp, which were not implemented. * gtk/gtktextbuffer.h (struct _GtkTextBufferClass): Add insert_pixbuf signal. Rename delete_text to delete_range since it also deletes pixbufs and child anchors. This almost closes bug 40245 (still need to deal with child anchors) * gtk/gtktextbuffer.c (gtk_text_buffer_class_init): Add insert_pixbuf, change signal names as appropriate, change types of signals taking marks/tags to have the specific type, not just G_TYPE_OBJECT * gtk/gtkmain.c (gtk_get_current_event_state): Add this function; closes bug 40051 * gtk/gtkoptionmenu.c (gtk_option_menu_set_history): clean up unnecessary remove_contents() call (gtk_option_menu_class_init): add a "changed" signal, closes bug 40039 (gtk_option_menu_update_contents): emit "changed" if the active menu item changes * gtk/gdk-pixbuf-loader.c (gdk_pixbuf_loader_frame_done): fix bad cast to GtkObject, reported by Jonas Borgstrom (gdk_pixbuf_loader_finalize): don't close the loader on finalize; we can't do stuff with side effects in finalize. Instead, spew a warning if the loader isn't closed. * gdk/x11/gdkdrawable-x11.c (gdk_drawable_impl_x11_finalize): free colormap in here, non-X ports probably need to sync to this change * gdk/x11/gdkdrawable-x11.c (gdk_x11_set_colormap): remove assertion that colormap != NULL, you can set the colormap to NULL if you like. * Makefile.am: remove gtk-config-2.0 * configure.in: Use pkg-config to locate GLib. Remove separated-out GMODULE_LIBS, GMODULE_CFLAGS; these were not used, and the gmodule libs/cflags were in GLIB_LIBS GLIB_CFLAGS anyhow. Use pkg-config to locate Pango. Output correct Pango libs to gdk-2.0.pc.in. Fix test for FREETYPE_CONFIG (typo fix). * Makefile.am (pkgconfig_DATA): install only target-specific pc files (install-data-local): symlink gtk+-2.0.pc and gdk-2.0.pc to the X11 pc files * gtk+-2.0.pc.in (Requires): require the GDK for the current target unref from here
Diffstat (limited to 'gtk/gtkoptionmenu.c')
-rw-r--r--gtk/gtkoptionmenu.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/gtk/gtkoptionmenu.c b/gtk/gtkoptionmenu.c
index 30e857dfa2..c329a28965 100644
--- a/gtk/gtkoptionmenu.c
+++ b/gtk/gtkoptionmenu.c
@@ -69,9 +69,14 @@ static void gtk_option_menu_show_all (GtkWidget *widget);
static void gtk_option_menu_hide_all (GtkWidget *widget);
static GtkType gtk_option_menu_child_type (GtkContainer *container);
-
+enum
+{
+ CHANGED,
+ LAST_SIGNAL
+};
static GtkButtonClass *parent_class = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
GtkType
@@ -114,6 +119,15 @@ gtk_option_menu_class_init (GtkOptionMenuClass *class)
parent_class = gtk_type_class (gtk_button_get_type ());
+ signals[CHANGED] =
+ g_signal_newc ("changed",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkOptionMenuClass, changed),
+ NULL,
+ gtk_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
object_class->destroy = gtk_option_menu_destroy;
widget_class->size_request = gtk_option_menu_size_request;
@@ -238,10 +252,7 @@ gtk_option_menu_set_history (GtkOptionMenu *option_menu,
menu_item = gtk_menu_get_active (GTK_MENU (option_menu->menu));
if (menu_item != option_menu->menu_item)
- {
- gtk_option_menu_remove_contents (option_menu);
- gtk_option_menu_update_contents (option_menu);
- }
+ gtk_option_menu_update_contents (option_menu);
}
}
@@ -258,7 +269,7 @@ gtk_option_menu_get_history (GtkOptionMenu *option_menu)
if (active_widget)
return g_list_index (GTK_MENU_SHELL (option_menu->menu)->children,
- active_widget);
+ active_widget);
else
return -1;
}
@@ -540,6 +551,14 @@ gtk_option_menu_deactivate (GtkMenuShell *menu_shell,
}
static void
+gtk_option_menu_changed (GtkOptionMenu *option_menu)
+{
+ g_return_if_fail (GTK_IS_OPTION_MENU (option_menu));
+
+ g_signal_emit (G_OBJECT (option_menu), signals[CHANGED], 0);
+}
+
+static void
gtk_option_menu_update_contents (GtkOptionMenu *option_menu)
{
GtkWidget *child;
@@ -550,6 +569,8 @@ gtk_option_menu_update_contents (GtkOptionMenu *option_menu)
if (option_menu->menu)
{
+ GtkWidget *old_item = option_menu->menu_item;
+
gtk_option_menu_remove_contents (option_menu);
option_menu->menu_item = gtk_menu_get_active (GTK_MENU (option_menu->menu));
@@ -574,6 +595,9 @@ gtk_option_menu_update_contents (GtkOptionMenu *option_menu)
if (GTK_WIDGET_DRAWABLE (option_menu))
gtk_widget_queue_draw (GTK_WIDGET (option_menu));
}
+
+ if (old_item != option_menu->menu_item)
+ gtk_option_menu_changed (option_menu);
}
}