#undef GTK_DISABLE_DEPRECATED
+#include <config.h>
#include <string.h>
#include "gtkarrow.h"
#include "gdk/gdkkeysyms.h"
#include "gtkcombo.h"
#include "gtkframe.h"
+#include "gtkprivate.h"
#include "gtkintl.h"
+#include "gtkalias.h"
-const gchar *gtk_combo_string_key = "gtk-combo-string-value";
+static const gchar gtk_combo_string_key[] = "gtk-combo-string-value";
#define COMBO_LIST_MAX_HEIGHT (400)
#define EMPTY_LIST_HEIGHT (15)
PROP_VALUE_IN_LIST
};
-static void gtk_combo_class_init (GtkComboClass *klass);
-static void gtk_combo_init (GtkCombo *combo);
static void gtk_combo_realize (GtkWidget *widget);
static void gtk_combo_unrealize (GtkWidget *widget);
static void gtk_combo_destroy (GtkObject *combo);
static GtkListItem *gtk_combo_find (GtkCombo *combo);
static gchar * gtk_combo_func (GtkListItem *li);
-static gint gtk_combo_focus_idle (GtkCombo *combo);
+static gboolean gtk_combo_focus_idle (GtkCombo *combo);
static gint gtk_combo_entry_focus_out (GtkEntry *entry,
GdkEventFocus *event,
GtkCombo *combo);
guint prop_id,
GValue *value,
GParamSpec *pspec);
-static GtkHBoxClass *parent_class = NULL;
+
+G_DEFINE_TYPE (GtkCombo, gtk_combo, GTK_TYPE_HBOX)
static void
gtk_combo_class_init (GtkComboClass * klass)
oclass = (GtkObjectClass *) klass;
widget_class = (GtkWidgetClass *) klass;
- parent_class = g_type_class_peek_parent (klass);
-
gobject_class->set_property = gtk_combo_set_property;
gobject_class->get_property = gtk_combo_get_property;
g_object_class_install_property (gobject_class,
PROP_ENABLE_ARROW_KEYS,
- g_param_spec_boolean ("enable_arrow_keys",
+ g_param_spec_boolean ("enable-arrow-keys",
P_("Enable arrow keys"),
P_("Whether the arrow keys move through the list of items"),
TRUE,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
+ GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_ENABLE_ARROWS_ALWAYS,
- g_param_spec_boolean ("enable_arrows_always",
+ g_param_spec_boolean ("enable-arrows-always",
P_("Always enable arrows"),
P_("Obsolete property, ignored"),
TRUE,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
+ GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_CASE_SENSITIVE,
- g_param_spec_boolean ("case_sensitive",
+ g_param_spec_boolean ("case-sensitive",
P_("Case sensitive"),
P_("Whether list item matching is case sensitive"),
FALSE,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
+ GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_ALLOW_EMPTY,
- g_param_spec_boolean ("allow_empty",
+ g_param_spec_boolean ("allow-empty",
P_("Allow empty"),
P_("Whether an empty value may be entered in this field"),
TRUE,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
+ GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_VALUE_IN_LIST,
- g_param_spec_boolean ("value_in_list",
+ g_param_spec_boolean ("value-in-list",
P_("Value in list"),
P_("Whether entered values must already be present in the list"),
FALSE,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
+ GTK_PARAM_READWRITE));
oclass->destroy = gtk_combo_destroy;
combo->popwin = NULL;
}
- GTK_OBJECT_CLASS (parent_class)->destroy (object);
+ GTK_OBJECT_CLASS (gtk_combo_parent_class)->destroy (object);
}
static int
GtkWidget *label;
gchar *ltext = NULL;
- ltext = g_object_get_data (G_OBJECT (li), gtk_combo_string_key);
+ ltext = g_object_get_data (G_OBJECT (li), I_(gtk_combo_string_key));
if (!ltext)
{
label = GTK_BIN (li)->child;
g_cclosure_new_object (G_CALLBACK (gtk_combo_focus_idle),
G_OBJECT (combo)));
g_source_attach (focus_idle, NULL);
+ g_source_unref (focus_idle);
/*g_signal_stop_emission_by_name (entry, "focus_out_event"); */
return TRUE;
}
static void
-gtk_combo_popup_list (GtkCombo * combo)
+gtk_combo_popup_list (GtkCombo *combo)
{
+ GtkWidget *toplevel;
GtkList *list;
gint height, width, x, y;
gint old_width, old_height;
}
gtk_window_move (GTK_WINDOW (combo->popwin), x, y);
+
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (combo));
+
+ if (GTK_IS_WINDOW (toplevel))
+ {
+ gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)),
+ GTK_WINDOW (combo->popwin));
+ gtk_window_set_transient_for (GTK_WINDOW (combo->popwin), GTK_WINDOW (toplevel));
+ }
+
gtk_widget_set_size_request (combo->popwin, width, height);
gtk_widget_show (combo->popwin);
}
gtk_widget_hide (combo->popwin);
+
+ gtk_window_group_add_window (gtk_window_get_group (NULL), GTK_WINDOW (combo->popwin));
}
static gboolean
G_CALLBACK (gtk_combo_popup_button_leave), combo);
combo->popwin = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_window_set_type_hint (GTK_WINDOW (combo->popwin), GDK_WINDOW_TYPE_HINT_COMBO);
g_object_ref (combo->popwin);
gtk_window_set_resizable (GTK_WINDOW (combo->popwin), FALSE);
gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (combo->popup)));
gtk_widget_show (combo->list);
- combo->list_change_id = g_signal_connect (combo->list, "selection_changed",
+ combo->list_change_id = g_signal_connect (combo->list, "selection-changed",
G_CALLBACK (gtk_combo_selection_changed), combo);
g_signal_connect (combo->popwin, "key_press_event",
gtk_window_set_screen (GTK_WINDOW (combo->popwin),
gtk_widget_get_screen (widget));
- GTK_WIDGET_CLASS( parent_class )->realize (widget);
+ GTK_WIDGET_CLASS (gtk_combo_parent_class)->realize (widget);
}
static void
gtk_combo_popdown_list (combo);
gtk_widget_unrealize (combo->popwin);
- GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
-}
-
-GType
-gtk_combo_get_type (void)
-{
- static GType combo_type = 0;
-
- if (!combo_type)
- {
- static const GTypeInfo combo_info =
- {
- sizeof (GtkComboClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_combo_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkCombo),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_combo_init,
- };
-
- combo_type = g_type_register_static (GTK_TYPE_HBOX, "GtkCombo",
- &combo_info, 0);
- }
-
- return combo_type;
+ GTK_WIDGET_CLASS (gtk_combo_parent_class)->unrealize (widget);
}
GtkWidget*
if (combo->value_in_list != val)
{
combo->value_in_list = val;
- g_object_notify (G_OBJECT (combo), "value_in_list");
+ g_object_notify (G_OBJECT (combo), "value-in-list");
}
if (combo->ok_if_empty != ok_if_empty)
{
combo->ok_if_empty = ok_if_empty;
- g_object_notify (G_OBJECT (combo), "allow_empty");
+ g_object_notify (G_OBJECT (combo), "allow-empty");
}
g_object_thaw_notify (G_OBJECT (combo));
}
if (combo->case_sensitive != val)
{
combo->case_sensitive = val;
- g_object_notify (G_OBJECT (combo), "case_sensitive");
+ g_object_notify (G_OBJECT (combo), "case-sensitive");
}
}
if (combo->use_arrows != val)
{
combo->use_arrows = val;
- g_object_notify (G_OBJECT (combo), "enable_arrow_keys");
+ g_object_notify (G_OBJECT (combo), "enable-arrow-keys");
}
}
{
g_object_freeze_notify (G_OBJECT (combo));
combo->use_arrows_always = val;
- g_object_notify (G_OBJECT (combo), "enable_arrows_always");
+ g_object_notify (G_OBJECT (combo), "enable-arrows-always");
if (combo->use_arrows != TRUE)
{
combo->use_arrows = TRUE;
- g_object_notify (G_OBJECT (combo), "enable_arrow_keys");
+ g_object_notify (G_OBJECT (combo), "enable-arrow-keys");
}
g_object_thaw_notify (G_OBJECT (combo));
}
g_return_if_fail (GTK_IS_COMBO (combo));
g_return_if_fail (item != NULL);
- g_object_set_data_full (G_OBJECT (item), gtk_combo_string_key,
+ g_object_set_data_full (G_OBJECT (item), I_(gtk_combo_string_key),
g_strdup (item_value), g_free);
}
g_return_if_fail (GTK_IS_COMBO (widget));
g_return_if_fail (allocation != NULL);
- GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);
+ GTK_WIDGET_CLASS (gtk_combo_parent_class)->size_allocate (widget, allocation);
combo = GTK_COMBO (widget);
}
}
+
+#define __GTK_SMART_COMBO_C__
+#include "gtkaliasdef.c"