[glade/offscreen-design-layout] gladeui: Finish up anjuta/glade dnd integration
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glade/offscreen-design-layout] gladeui: Finish up anjuta/glade dnd integration
- Date: Sat, 22 Jan 2011 17:51:32 +0000 (UTC)
commit 8443a8e25adc2178f2ca77c94656b9d2ac782d17
Author: Johannes Schmid <jhs gnome org>
Date: Thu Jan 20 23:31:09 2011 +0100
gladeui: Finish up anjuta/glade dnd integration
ChangeLog | 15 ++++++++++++
gladeui/glade-app.c | 19 ++++++++++++++++
gladeui/glade-signal-editor.c | 48 +++++++++++++++++++++++++++++++---------
gladeui/glade-signal-model.c | 12 +++++++--
4 files changed, 80 insertions(+), 14 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 54953af..0587ded 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,17 @@
* gladeui/glade-palette.c: Dont strdup the adaptor names in the local hash table (those
strings are constant data, no need to dup them).
+2011-01-20 Johannes Schmid <jhs gnome org>
+
+ * gladeui/glade-signal-model.c:
+ Add the "swapped" property of the signal to the dnd string
+
+ * gladeui/glade-signal-editor.c:
+ Fix creating of the rich dnd icon with proper cairo drawing
+ (thanks to Benjamin Otte)
+
+ * gladeui/glade-app.c: Bring back "signal-editor-created" signal
+
2011-01-19 Tristan Van Berkom <tristanvb openismus com>
* plugins/gtk+/gtk+.xml.in: Remove GtkTreeSelection from the palette, it's only available
@@ -45,6 +56,10 @@
* gladeui/glade-editor.[ch]: Remove glade_editor_set_signal_editor()
+ * gladeui/glade-app.c:
+ * gladeui/glade-signal-editor.c:
+ Added "signal-editor-created" signal
+
2011-01-13 Javier Jardón <jjardon gnome org>
* glade3.doap: Update doap file to glade.doap instead glade3.doap
diff --git a/gladeui/glade-app.c b/gladeui/glade-app.c
index 067fbbc..e71f4be 100644
--- a/gladeui/glade-app.c
+++ b/gladeui/glade-app.c
@@ -55,6 +55,7 @@
enum
{
DOC_SEARCH,
+ SIGNAL_EDITOR_CREATED,
LAST_SIGNAL
};
@@ -330,6 +331,24 @@ glade_app_class_init (GladeAppClass * klass)
G_TYPE_NONE, 3,
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+ /**
+ * GladeApp::signal-editor-created:
+ * @gladeapp: the #GladeApp which received the signal.
+ * @signal_editor: the new #GladeSignalEditor.
+ *
+ * Emitted when a new signal editor created.
+ * A tree view is created in the default handler.
+ * Connect your handler before the default handler for setting a custom column or renderer
+ * and after it for connecting to the tree view signals
+ */
+ glade_app_signals[SIGNAL_EDITOR_CREATED] =
+ g_signal_new ("signal-editor-created",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ glade_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
g_type_class_add_private (klass, sizeof (GladeAppPrivate));
}
diff --git a/gladeui/glade-signal-editor.c b/gladeui/glade-signal-editor.c
index 337a6a9..f657542 100644
--- a/gladeui/glade-signal-editor.c
+++ b/gladeui/glade-signal-editor.c
@@ -467,30 +467,46 @@ glade_signal_editor_dispose (GObject *object)
G_OBJECT_CLASS (glade_signal_editor_parent_class)->dispose (object);
}
+#define BORDER 10
+
static cairo_surface_t*
create_rich_drag_surface (GtkWidget* widget, const gchar* text)
{
+ GtkStyleContext* context = gtk_widget_get_style_context (widget);
+ GtkStateFlags state = gtk_widget_get_state_flags (widget);
PangoLayout* layout = pango_layout_new (gtk_widget_get_pango_context (widget));
cairo_t* cr;
cairo_surface_t* s;
gint width, height;
+ GdkRGBA rgba;
pango_layout_set_text (layout, text, -1);
pango_layout_get_size (layout, &width, &height);
- width = PANGO_PIXELS(width) + 10;
- height = PANGO_PIXELS(height) + 10;
-
- s = cairo_image_surface_create (CAIRO_FORMAT_A1, width, height);
+ width = PANGO_PIXELS(width) + BORDER;
+ height = PANGO_PIXELS(height) + BORDER;
+
+ s = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
+ CAIRO_CONTENT_COLOR,
+ width,
+ height);
cr = cairo_create (s);
-
- cairo_rectangle (cr, 0, 0, 1, 1);
- cairo_show_text (cr, text);
- cairo_stroke (cr);
+ gtk_style_context_get_background_color (context, state, &rgba);
+ gdk_cairo_set_source_rgba (cr, &rgba);
+ cairo_paint (cr);
+
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_move_to (cr, BORDER/2, BORDER/2);
+ pango_cairo_show_layout (cr, layout);
+
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
g_object_unref (layout);
- return s;;
+ return s;
}
static void
@@ -508,15 +524,21 @@ glade_signal_editor_drag_begin (GtkWidget* widget,
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
gchar* handler;
+ gchar* text;
gtk_tree_model_get (model, &iter,
GLADE_SIGNAL_COLUMN_HANDLER, &handler, -1);
- s = create_rich_drag_surface (widget, handler);
+
+ text = g_strdup_printf ("%s ()", handler);
+ g_free (handler);
+
+ s = create_rich_drag_surface (widget, text);
+ g_free (text);
}
if (s)
{
gtk_drag_set_icon_surface (context, s);
- g_object_unref (s);
+ cairo_surface_destroy (s);
}
else
{
@@ -524,6 +546,7 @@ glade_signal_editor_drag_begin (GtkWidget* widget,
}
}
+
static void
glade_signal_editor_name_cell_data_func (GtkTreeViewColumn *column,
GtkCellRenderer *renderer,
@@ -923,6 +946,9 @@ glade_signal_editor_init (GladeSignalEditor *self)
"drag-begin",
G_CALLBACK(glade_signal_editor_drag_begin),
self);
+
+ /* Emit created signal */
+ g_signal_emit_by_name (glade_app_get(), "signal-editor-created", self);
gtk_widget_show_all (GTK_WIDGET(self));
}
diff --git a/gladeui/glade-signal-model.c b/gladeui/glade-signal-model.c
index 25e79c1..5a94f39 100644
--- a/gladeui/glade-signal-model.c
+++ b/gladeui/glade-signal-model.c
@@ -979,13 +979,19 @@ glade_signal_model_drag_data_get (GtkTreeDragSource* model,
GladeSignal* signal;
const gchar* widget = iter.user_data;
gchar* dnd_text;
+ const gchar* user_data;
gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
GLADE_SIGNAL_COLUMN_SIGNAL, &signal, -1);
- dnd_text = g_strdup_printf ("%s:%s:%s", widget, glade_signal_get_name (signal),
- glade_signal_get_handler (signal));
- g_message ("Sent: %s", dnd_text);
+ user_data = glade_signal_get_userdata (signal);
+
+ dnd_text = g_strdup_printf ("%s:%s:%s:%s:%d:%d", widget,
+ glade_signal_get_name (signal),
+ glade_signal_get_handler (signal),
+ user_data && strlen (user_data) ? user_data : "(none)",
+ glade_signal_get_swapped (signal),
+ glade_signal_get_after (signal));
gtk_selection_data_set (data,
gdk_atom_intern_static_string ("application/x-glade-signal"),
8,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]