* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#include <config.h>
-#include "gtkintl.h"
-#include "gtkmenu.h"
-#include "gtkmenuitem.h"
-#include "gtkmarshalers.h"
+#include "config.h"
+
#include "gdk/gdkkeysyms.h"
#undef GTK_DISABLE_DEPRECATED
-#include "gtkoptionmenu.h"
-#define GTK_DISABLE_DEPRECATED
+#include "gtkmenu.h"
+#include "gtkmenuitem.h"
+#include "gtkmarshalers.h"
+#include "gtkoptionmenu.h"
#include "gtkprivate.h"
+#include "gtkintl.h"
#include "gtkalias.h"
#define CHILD_LEFT_SPACING 4
0
};
-static void gtk_option_menu_class_init (GtkOptionMenuClass *klass);
-static void gtk_option_menu_init (GtkOptionMenu *option_menu);
static void gtk_option_menu_destroy (GtkObject *object);
static void gtk_option_menu_set_property (GObject *object,
guint prop_id,
enum
{
PROP_0,
- PROP_MENU,
- LAST_PROP
+ PROP_MENU
};
-static GtkButtonClass *parent_class = NULL;
-static guint signals[LAST_SIGNAL] = { 0 };
-
+static guint signals[LAST_SIGNAL] = { 0 };
-GType
-gtk_option_menu_get_type (void)
-{
- static GType option_menu_type = 0;
-
- if (!option_menu_type)
- {
- static const GTypeInfo option_menu_info =
- {
- sizeof (GtkOptionMenuClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_option_menu_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkOptionMenu),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_option_menu_init,
- };
-
- option_menu_type =
- g_type_register_static (GTK_TYPE_BUTTON, I_("GtkOptionMenu"),
- &option_menu_info, 0);
- }
-
- return option_menu_type;
-}
+G_DEFINE_TYPE (GtkOptionMenu, gtk_option_menu, GTK_TYPE_BUTTON)
static void
gtk_option_menu_class_init (GtkOptionMenuClass *class)
widget_class = (GtkWidgetClass*) class;
container_class = (GtkContainerClass*) class;
- parent_class = g_type_class_peek_parent (class);
-
signals[CHANGED] =
g_signal_new (I_("changed"),
G_OBJECT_CLASS_TYPE (class),
gtk_option_menu_calc_size (option_menu);
- g_signal_connect_after (option_menu->menu, "selection_done",
+ g_signal_connect_after (option_menu->menu, "selection-done",
G_CALLBACK (gtk_option_menu_selection_done),
option_menu);
- g_signal_connect_swapped (option_menu->menu, "size_request",
+ g_signal_connect_swapped (option_menu->menu, "size-request",
G_CALLBACK (gtk_option_menu_calc_size),
option_menu);
* items are numbered from top to bottom, starting with 0.
*
* Return value: index of the selected menu item, or -1 if there are no menu items
- * Deprecated: Use #GtkComboBox instead.
+ * Deprecated: 2.4: Use #GtkComboBox instead.
**/
gint
gtk_option_menu_get_history (GtkOptionMenu *option_menu)
static void
gtk_option_menu_destroy (GtkObject *object)
{
- GtkOptionMenu *option_menu;
-
- g_return_if_fail (GTK_IS_OPTION_MENU (object));
-
- option_menu = GTK_OPTION_MENU (object);
+ GtkOptionMenu *option_menu = GTK_OPTION_MENU (object);
if (option_menu->menu)
gtk_widget_destroy (option_menu->menu);
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+ GTK_OBJECT_CLASS (gtk_option_menu_parent_class)->destroy (object);
}
static void
GtkBorder *indicator_spacing;
gtk_widget_style_get (GTK_WIDGET (option_menu),
- "indicator_size", &indicator_size,
- "indicator_spacing", &indicator_spacing,
- "interior_focus", &props->interior_focus,
- "focus_line_width", &props->focus_width,
- "focus_padding", &props->focus_pad,
+ "indicator-size", &indicator_size,
+ "indicator-spacing", &indicator_spacing,
+ "interior-focus", &props->interior_focus,
+ "focus-line-width", &props->focus_width,
+ "focus-padding", &props->focus_pad,
NULL);
if (indicator_size)
else
props->indicator_spacing = default_props.indicator_spacing;
- g_free (indicator_size);
- g_free (indicator_spacing);
+ gtk_requisition_free (indicator_size);
+ gtk_border_free (indicator_spacing);
}
static void
child_event = *event;
- if (GTK_WIDGET_NO_WINDOW (child) &&
+ if (!gtk_widget_get_has_window (child) &&
gtk_widget_intersect (child, &event->area, &child_event.area))
gtk_widget_event (child, (GdkEvent*) &child_event);
gtk_widget_reparent (child, GTK_WIDGET (option_menu));
}
- g_signal_connect (option_menu->menu_item, "state_changed",
+ g_signal_connect (option_menu->menu_item, "state-changed",
G_CALLBACK (gtk_option_menu_item_state_changed_cb), option_menu);
g_signal_connect (option_menu->menu_item, "destroy",
G_CALLBACK (gtk_option_menu_item_destroy_cb), option_menu);
active = gtk_menu_get_active (GTK_MENU (option_menu->menu));
gdk_window_get_origin (widget->window, &menu_xpos, &menu_ypos);
+ /* set combo box type hint for menu popup */
+ gtk_window_set_type_hint (GTK_WINDOW (GTK_MENU (option_menu->menu)->toplevel),
+ GDK_WINDOW_TYPE_HINT_COMBO);
+
menu_xpos += widget->allocation.x;
menu_ypos += widget->allocation.y + widget->allocation.height / 2 - 2;