Bug 324282 - add selected signal to cell renderer combo.

2006-05-28  Kristian Rietveld  <kris@imendio.com>

	Bug 324282 - add selected signal to cell renderer combo.

	* gtk/gtkcellrenderercombo.c (gtk_cell_renderer_combo_class_init),
	(gtk_cell_renderer_combo_changed),
	(gtk_cell_renderer_combo_start_editing): add a new "changed" signal
	that will be emitted as soon as the combo box emitted changed and has
	an active iterator.  (Modified patch based on work by James
	Pelletier).

	* gtk/gtkmarshalers.list: add marshaler.


svn path=/trunk/; revision=20206
This commit is contained in:
Kristian Rietveld 2008-05-28 11:49:20 +00:00 committed by Kristian Rietveld
parent 1fa5cda0a9
commit 3ed120ebf8
3 changed files with 77 additions and 0 deletions

View File

@ -1,3 +1,16 @@
2006-05-28 Kristian Rietveld <kris@imendio.com>
Bug 324282 - add selected signal to cell renderer combo.
* gtk/gtkcellrenderercombo.c (gtk_cell_renderer_combo_class_init),
(gtk_cell_renderer_combo_changed),
(gtk_cell_renderer_combo_start_editing): add a new "changed" signal
that will be emitted as soon as the combo box emitted changed and has
an active iterator. (Modified patch based on work by James
Pelletier).
* gtk/gtkmarshalers.list: add marshaler.
2008-05-28 Kristian Rietveld <kris@imendio.com> 2008-05-28 Kristian Rietveld <kris@imendio.com>
Refactor expand/collapse timeout handling (amendment to bug 511217). Refactor expand/collapse timeout handling (amendment to bug 511217).

View File

@ -28,6 +28,7 @@
#include "gtkcellrenderertext.h" #include "gtkcellrenderertext.h"
#include "gtkcombobox.h" #include "gtkcombobox.h"
#include "gtkcomboboxentry.h" #include "gtkcomboboxentry.h"
#include "gtkmarshalers.h"
#include "gtkprivate.h" #include "gtkprivate.h"
#include "gtkalias.h" #include "gtkalias.h"
@ -59,6 +60,13 @@ enum {
PROP_HAS_ENTRY PROP_HAS_ENTRY
}; };
enum {
CHANGED,
LAST_SIGNAL
};
static guint cell_renderer_combo_signals[LAST_SIGNAL] = { 0, };
#define GTK_CELL_RENDERER_COMBO_PATH "gtk-cell-renderer-combo-path" #define GTK_CELL_RENDERER_COMBO_PATH "gtk-cell-renderer-combo-path"
G_DEFINE_TYPE (GtkCellRendererCombo, gtk_cell_renderer_combo, GTK_TYPE_CELL_RENDERER_TEXT) G_DEFINE_TYPE (GtkCellRendererCombo, gtk_cell_renderer_combo, GTK_TYPE_CELL_RENDERER_TEXT)
@ -132,6 +140,39 @@ gtk_cell_renderer_combo_class_init (GtkCellRendererComboClass *klass)
TRUE, TRUE,
GTK_PARAM_READWRITE)); GTK_PARAM_READWRITE));
/**
* GtkCellRendererCombo::changed:
* @combo: the object on which the signal is emitted
* @path_string: a string of the path identifying the edited cell
* (relative to the tree view model)
* @new_iter: the new iter selected in the combo box
* (relative to the combo box model)
*
* This signal is emitted each time after the user selected an item in
* the combo box, either by using the mouse or the arrow keys. Contrary
* to GtkComboBox, GtkCellRendererCombo::changed is not emitted for
* changes made to a selected item in the entry. The argument @new_iter
* corresponds to the newly selected item in the combo box and it is relative
* to the GtkTreeModel set via the model property on GtkCellRendererCombo.
*
* Note that as soon as you change the model displayed in the tree view,
* the tree view will immediately cease the editing operating. This
* means that you most probably want to refrain from changing the model
* until the combo cell renderer emits the edited or editing_canceled signal.
*
* Since: 2.14
*/
cell_renderer_combo_signals[CHANGED] =
g_signal_new (I_("changed"),
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
_gtk_marshal_VOID__STRING_BOXED,
G_TYPE_NONE, 2,
G_TYPE_STRING,
GTK_TYPE_TREE_ITER);
} }
static void static void
@ -241,6 +282,25 @@ gtk_cell_renderer_combo_set_property (GObject *object,
} }
} }
static void
gtk_cell_renderer_combo_changed (GtkComboBox *combo,
gpointer data)
{
GtkTreeIter iter;
GtkCellRendererCombo *cell;
cell = GTK_CELL_RENDERER_COMBO (data);
if (gtk_combo_box_get_active_iter (combo, &iter))
{
const char *path;
path = g_object_get_data (G_OBJECT (combo), GTK_CELL_RENDERER_COMBO_PATH);
g_signal_emit (cell, cell_renderer_combo_signals[CHANGED], 0,
path, &iter);
}
}
static void static void
gtk_cell_renderer_combo_editing_done (GtkCellEditable *combo, gtk_cell_renderer_combo_editing_done (GtkCellEditable *combo,
gpointer data) gpointer data)
@ -382,6 +442,9 @@ gtk_cell_renderer_combo_start_editing (GtkCellRenderer *cell,
g_signal_connect (GTK_CELL_EDITABLE (combo), "editing_done", g_signal_connect (GTK_CELL_EDITABLE (combo), "editing_done",
G_CALLBACK (gtk_cell_renderer_combo_editing_done), G_CALLBACK (gtk_cell_renderer_combo_editing_done),
cell_combo); cell_combo);
g_signal_connect (GTK_CELL_EDITABLE (combo), "changed",
G_CALLBACK (gtk_cell_renderer_combo_changed),
cell_combo);
cell_combo->focus_out_id = cell_combo->focus_out_id =
g_signal_connect (combo, "focus_out_event", g_signal_connect (combo, "focus_out_event",
G_CALLBACK (gtk_cell_renderer_combo_focus_out_event), G_CALLBACK (gtk_cell_renderer_combo_focus_out_event),

View File

@ -101,6 +101,7 @@ VOID:POINTER,POINTER,BOOLEAN
VOID:POINTER,POINTER,POINTER VOID:POINTER,POINTER,POINTER
VOID:POINTER,UINT VOID:POINTER,UINT
VOID:STRING VOID:STRING
VOID:STRING,BOXED
VOID:STRING,STRING VOID:STRING,STRING
VOID:STRING,INT,POINTER VOID:STRING,INT,POINTER
VOID:STRING,UINT,FLAGS VOID:STRING,UINT,FLAGS