summaryrefslogtreecommitdiff
path: root/plugins/gtkui/ddbcellrenderertextmultiline.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gtkui/ddbcellrenderertextmultiline.c')
-rw-r--r--plugins/gtkui/ddbcellrenderertextmultiline.c156
1 files changed, 88 insertions, 68 deletions
diff --git a/plugins/gtkui/ddbcellrenderertextmultiline.c b/plugins/gtkui/ddbcellrenderertextmultiline.c
index 5bd97a9a..81f77fce 100644
--- a/plugins/gtkui/ddbcellrenderertextmultiline.c
+++ b/plugins/gtkui/ddbcellrenderertextmultiline.c
@@ -24,58 +24,22 @@
#include <string.h>
#include <gdk/gdk.h>
#include "support.h"
+#include "ddbcellrenderertextmultiline.h"
-#define DDB_TYPE_CELL_EDITABLE_TEXT_VIEW (ddb_cell_editable_text_view_get_type ())
-#define DDB_CELL_EDITABLE_TEXT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DDB_TYPE_CELL_EDITABLE_TEXT_VIEW, DdbCellEditableTextView))
-#define DDB_CELL_EDITABLE_TEXT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DDB_TYPE_CELL_EDITABLE_TEXT_VIEW, DdbCellEditableTextViewClass))
-#define DDB_IS_CELL_EDITABLE_TEXT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DDB_TYPE_CELL_EDITABLE_TEXT_VIEW))
-#define DDB_IS_CELL_EDITABLE_TEXT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DDB_TYPE_CELL_EDITABLE_TEXT_VIEW))
-#define DDB_CELL_EDITABLE_TEXT_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DDB_TYPE_CELL_EDITABLE_TEXT_VIEW, DdbCellEditableTextViewClass))
-
-typedef struct _DdbCellEditableTextView DdbCellEditableTextView;
-typedef struct _DdbCellEditableTextViewClass DdbCellEditableTextViewClass;
-typedef struct _DdbCellEditableTextViewPrivate DdbCellEditableTextViewPrivate;
#define _g_free0(var) (var = (g_free (var), NULL))
-#define DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE (ddb_cell_renderer_text_multiline_get_type ())
-#define DDB_CELL_RENDERER_TEXT_MULTILINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE, DdbCellRendererTextMultiline))
-#define DDB_CELL_RENDERER_TEXT_MULTILINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE, DdbCellRendererTextMultilineClass))
-#define DDB_IS_CELL_RENDERER_TEXT_MULTILINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE))
-#define DDB_IS_CELL_RENDERER_TEXT_MULTILINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE))
-#define DDB_CELL_RENDERER_TEXT_MULTILINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE, DdbCellRendererTextMultilineClass))
-
-typedef struct _DdbCellRendererTextMultiline DdbCellRendererTextMultiline;
-typedef struct _DdbCellRendererTextMultilineClass DdbCellRendererTextMultilineClass;
-typedef struct _DdbCellRendererTextMultilinePrivate DdbCellRendererTextMultilinePrivate;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (gtk_tree_path_free (var), NULL)))
-struct _DdbCellEditableTextView {
- GtkTextView parent_instance;
- DdbCellEditableTextViewPrivate * priv;
- gboolean editing_canceled;
- gchar* tree_path;
-};
-
-struct _DdbCellEditableTextViewClass {
- GtkTextViewClass parent_class;
-};
-
-struct _DdbCellRendererTextMultiline {
- GtkCellRendererText parent_instance;
- DdbCellRendererTextMultilinePrivate * priv;
-};
-
-struct _DdbCellRendererTextMultilineClass {
- GtkCellRendererTextClass parent_class;
-};
-
struct _DdbCellRendererTextMultilinePrivate {
DdbCellEditableTextView* entry;
gulong focus_out_id;
};
+struct _DdbCellEditableTextViewPrivate {
+ gboolean editing_canceled;
+};
static gpointer ddb_cell_editable_text_view_parent_class = NULL;
static GtkCellEditableIface* ddb_cell_editable_text_view_gtk_cell_editable_parent_iface = NULL;
@@ -87,14 +51,12 @@ enum {
};
static gboolean ddb_cell_editable_text_view_real_key_press_event (GtkWidget* base, GdkEventKey* event);
static void ddb_cell_editable_text_view_real_start_editing (GtkCellEditable* base, GdkEvent* event);
-#if GTK_CHECK_VERSION(2,20,0)
-static void ddb_cell_editable_text_view_real_editing_canceled (GtkCellRenderer*);
-#endif
DdbCellEditableTextView* ddb_cell_editable_text_view_new (void);
DdbCellEditableTextView* ddb_cell_editable_text_view_construct (GType object_type);
static void ddb_cell_editable_text_view_finalize (GObject* obj);
GType ddb_cell_renderer_text_multiline_get_type (void);
#define DDB_CELL_RENDERER_TEXT_MULTILINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DDB_TYPE_CELL_RENDERER_TEXT_MULTILINE, DdbCellRendererTextMultilinePrivate))
+#define DDB_CELL_EDITABLE_TEXT_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), DDB_TYPE_CELL_EDITABLE_TEXT_VIEW, DdbCellEditableTextViewPrivate))
enum {
DDB_CELL_RENDERER_TEXT_MULTILINE_DUMMY_PROPERTY
};
@@ -140,7 +102,7 @@ static gboolean ddb_cell_editable_text_view_real_key_press_event (GtkWidget* bas
_tmp6_ = *event;
_tmp7_ = _tmp6_.keyval;
if (_tmp7_ == ((guint) GDK_Escape)) {
- self->editing_canceled = TRUE;
+ self->priv->editing_canceled = TRUE;
gtk_cell_editable_editing_done ((GtkCellEditable*) self);
gtk_cell_editable_remove_widget ((GtkCellEditable*) self);
result = TRUE;
@@ -158,9 +120,8 @@ static gboolean ddb_cell_editable_text_view_real_key_press_event (GtkWidget* bas
}
static void ddb_cell_editable_text_view_real_start_editing (GtkCellEditable* base, GdkEvent* event) {
- DdbCellEditableTextView * self;
- self = (DdbCellEditableTextView*) base;
- g_return_if_fail (event != NULL);
+ DdbCellEditableTextView * self;
+ self = (DdbCellEditableTextView*) base;
}
@@ -170,8 +131,8 @@ static void ddb_cell_editable_text_view_real_editing_canceled (GtkCellRenderer*
#endif
DdbCellEditableTextView* ddb_cell_editable_text_view_construct (GType object_type) {
- DdbCellEditableTextView * self = NULL;
- self = (DdbCellEditableTextView*) g_object_new (object_type, NULL);
+ DdbCellEditableTextView * self;
+ self = g_object_newv (object_type, 0, NULL);
return self;
}
@@ -180,11 +141,77 @@ DdbCellEditableTextView* ddb_cell_editable_text_view_new (void) {
return ddb_cell_editable_text_view_construct (DDB_TYPE_CELL_EDITABLE_TEXT_VIEW);
}
+enum
+{
+ PROP_0,
+
+ PROP_EDITING_CANCELED,
+
+ N_PROPERTIES
+};
+
+static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };
+
+static void
+ddb_cell_editable_text_view_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ DdbCellEditableTextView *self = DDB_CELL_EDITABLE_TEXT_VIEW (object);
+
+ switch (property_id)
+ {
+ case PROP_EDITING_CANCELED:
+ self->priv->editing_canceled = g_value_get_boolean (value);
+ break;
+
+ default:
+ /* We don't have any other property... */
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+ddb_cell_editable_text_view_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ DdbCellEditableTextView *self = DDB_CELL_EDITABLE_TEXT_VIEW (object);
+
+ switch (property_id)
+ {
+ case PROP_EDITING_CANCELED:
+ g_value_set_boolean (value, self->priv->editing_canceled);
+ break;
+
+ default:
+ /* We don't have any other property... */
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
static void ddb_cell_editable_text_view_class_init (DdbCellEditableTextViewClass * klass) {
+ g_type_class_add_private (klass, sizeof (DdbCellEditableTextViewPrivate));
ddb_cell_editable_text_view_parent_class = g_type_class_peek_parent (klass);
GTK_WIDGET_CLASS (klass)->key_press_event = ddb_cell_editable_text_view_real_key_press_event;
G_OBJECT_CLASS (klass)->finalize = ddb_cell_editable_text_view_finalize;
+
+ G_OBJECT_CLASS (klass)->set_property = ddb_cell_editable_text_view_set_property;
+ G_OBJECT_CLASS (klass)->get_property = ddb_cell_editable_text_view_get_property;
+
+ obj_properties[PROP_EDITING_CANCELED] =
+ g_param_spec_boolean ("editing-canceled",
+ "Editing canceled",
+ "Indicates whether editing on the cell has been canceled",
+ FALSE,
+ G_PARAM_READWRITE);
+
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ g_object_class_install_property (gobject_class, PROP_EDITING_CANCELED, obj_properties[PROP_EDITING_CANCELED]);
}
void ddb_cell_editable_text_view_start_editing (DdbCellEditableTextView* self, GdkEvent* event) {
@@ -194,12 +221,13 @@ void ddb_cell_editable_text_view_start_editing (DdbCellEditableTextView* self, G
static void ddb_cell_editable_text_view_gtk_cell_editable_interface_init (GtkCellEditableIface * iface) {
ddb_cell_editable_text_view_gtk_cell_editable_parent_iface = g_type_interface_peek_parent (iface);
- iface->start_editing = (void (*)(GtkCellEditable*, GdkEvent*)) ddb_cell_editable_text_view_real_start_editing;
+ iface->start_editing = ddb_cell_editable_text_view_real_start_editing;
}
static void ddb_cell_editable_text_view_instance_init (DdbCellEditableTextView * self) {
- self->editing_canceled = FALSE;
+ self->priv = DDB_CELL_EDITABLE_TEXT_VIEW_GET_PRIVATE (self);
+ self->priv->editing_canceled = FALSE;
}
@@ -260,7 +288,7 @@ static void ddb_cell_renderer_text_multiline_gtk_cell_renderer_text_editing_done
g_signal_handler_disconnect ((GObject*) _tmp0_, _tmp2_);
_tmp3_ = _self_;
_tmp4_ = entry;
- _tmp5_ = _tmp4_->editing_canceled;
+ _tmp5_ = _tmp4_->priv->editing_canceled;
gtk_cell_renderer_stop_editing ((GtkCellRenderer*) _tmp3_, _tmp5_);
_tmp6_ = entry;
_tmp7_ = gtk_text_view_get_buffer ((GtkTextView*) _tmp6_);
@@ -286,15 +314,11 @@ static void ddb_cell_renderer_text_multiline_gtk_cell_renderer_text_editing_done
static gboolean ddb_cell_renderer_text_multiline_gtk_cell_renderer_focus_out_event (DdbCellEditableTextView* entry, GdkEvent* event, DdbCellRendererTextMultiline* _self_) {
gboolean result = FALSE;
- DdbCellEditableTextView* _tmp0_;
- DdbCellEditableTextView* _tmp1_;
g_return_val_if_fail (entry != NULL, FALSE);
g_return_val_if_fail (event != NULL, FALSE);
g_return_val_if_fail (_self_ != NULL, FALSE);
- _tmp0_ = entry;
- _tmp0_->editing_canceled = TRUE;
- _tmp1_ = entry;
- gtk_cell_editable_remove_widget ((GtkCellEditable*) _tmp1_);
+ entry->priv->editing_canceled = TRUE;
+ gtk_cell_editable_remove_widget ((GtkCellEditable*) entry);
result = FALSE;
return result;
}
@@ -350,7 +374,6 @@ static GtkCellEditable* ddb_cell_renderer_text_multiline_real_start_editing (Gtk
DdbCellEditableTextView* _tmp41_;
DdbCellEditableTextView* _tmp42_;
self = (DdbCellRendererTextMultiline*) base;
- g_return_val_if_fail (event != NULL, NULL);
g_return_val_if_fail (widget != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
g_return_val_if_fail (background_area != NULL, NULL);
@@ -437,17 +460,16 @@ static GtkCellEditable* ddb_cell_renderer_text_multiline_real_start_editing (Gtk
_g_object_unref0 (store);
_g_object_unref0 (tv);
_gtk_tree_path_free0 (p);
- _g_object_unref0 (tv);
- _g_object_unref0 (store);
- G_IS_VALUE (&v) ? (g_value_unset (&v), NULL) : NULL;
- _g_object_unref0 (buf);
+ // evil hack! need to make an event for that
+ extern int trkproperties_block_keyhandler;
+ trkproperties_block_keyhandler = 1;
return result;
}
DdbCellRendererTextMultiline* ddb_cell_renderer_text_multiline_construct (GType object_type) {
- DdbCellRendererTextMultiline * self = NULL;
- self = (DdbCellRendererTextMultiline*) g_object_new (object_type, NULL);
+ DdbCellRendererTextMultiline * self;
+ self = g_object_newv (object_type, 0, NULL);
return self;
}
@@ -460,10 +482,8 @@ DdbCellRendererTextMultiline* ddb_cell_renderer_text_multiline_new (void) {
static void ddb_cell_renderer_text_multiline_class_init (DdbCellRendererTextMultilineClass * klass) {
ddb_cell_renderer_text_multiline_parent_class = g_type_class_peek_parent (klass);
g_type_class_add_private (klass, sizeof (DdbCellRendererTextMultilinePrivate));
+ GTK_CELL_RENDERER_CLASS (klass)->start_editing = ddb_cell_renderer_text_multiline_real_start_editing;
G_OBJECT_CLASS (klass)->finalize = ddb_cell_renderer_text_multiline_finalize;
-#if GTK_CHECK_VERSION(2,20,0)
- GTK_CELL_RENDERER_CLASS (klass)->editing_canceled = (void (*)(GtkCellRenderer*)) ddb_cell_editable_text_view_real_editing_canceled;
-#endif
}