diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2014-05-13 18:16:32 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2014-05-13 18:16:32 -0300 |
commit | d1b11560a31d49b77052a2e56ec63dfc09d3ed7b (patch) | |
tree | 00f646b18ef7c0821735c6e627f11c3dfd6bac3b /gladeui/glade-design-view.c | |
parent | e79d859c01fd9a0590e1f31cfe4f9d2b5a836f26 (diff) | |
download | glade-d1b11560a31d49b77052a2e56ec63dfc09d3ed7b.tar.gz |
GladeAdaptorChooser: created new widget to choose an adaptor.
Used in GladePlaceholder and GladeDesignView to quickly create new widgets and objects.
This should be more than enough to close Bug 708146 "Catalog search entry"
Diffstat (limited to 'gladeui/glade-design-view.c')
-rw-r--r-- | gladeui/glade-design-view.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/gladeui/glade-design-view.c b/gladeui/glade-design-view.c index a6445fac..598579b7 100644 --- a/gladeui/glade-design-view.c +++ b/gladeui/glade-design-view.c @@ -41,6 +41,7 @@ #include "glade-design-layout.h" #include "glade-design-private.h" #include "glade-path.h" +#include "glade-adaptor-chooser.h" #include <glib.h> #include <glib/gi18n.h> @@ -365,6 +366,46 @@ glade_design_view_draw (GtkWidget *widget, cairo_t *cr) } static void +on_chooser_adaptor_selected (_GladeAdaptorChooser *chooser, + GladeWidgetAdaptor *adaptor, + GladeProject *project) + +{ + gtk_widget_hide (GTK_WIDGET (chooser)); + glade_command_create (adaptor, NULL, NULL, project); + gtk_widget_destroy (GTK_WIDGET (chooser)); +} + +static gboolean +glade_design_view_viewport_button_press (GtkWidget *widget, + GdkEventButton *event, + GladeDesignView *view) +{ + GladeDesignViewPrivate *priv = view->priv; + GdkRectangle rect = {event->x, event->y, 8, 8}; + GtkWidget *pop, *chooser; + + if (event->type != GDK_2BUTTON_PRESS) + return FALSE; + + pop = gtk_popover_new (widget); + gtk_popover_set_pointing_to (GTK_POPOVER (pop), &rect); + gtk_popover_set_position (GTK_POPOVER (pop), GTK_POS_BOTTOM); + + chooser = _glade_adaptor_chooser_new (GLADE_ADAPTOR_CHOOSER_TOPLEVEL, + priv->project); + g_signal_connect (chooser, "adaptor-selected", + G_CALLBACK (on_chooser_adaptor_selected), + priv->project); + + gtk_container_add (GTK_CONTAINER (pop), chooser); + gtk_widget_show (chooser); + gtk_widget_show (pop); + + return TRUE; +} + +static void glade_design_view_init (GladeDesignView *view) { GtkWidget *viewport; @@ -386,6 +427,10 @@ glade_design_view_init (GladeDesignView *view) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); viewport = gtk_viewport_new (NULL, NULL); + gtk_widget_add_events (viewport, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); + g_signal_connect (viewport, "button-press-event", + G_CALLBACK (glade_design_view_viewport_button_press), + view); gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_NONE); gtk_container_add (GTK_CONTAINER (viewport), view->priv->layout_box); gtk_container_add (GTK_CONTAINER (view->priv->scrolled_window), viewport); |