summaryrefslogtreecommitdiffstats
path: root/src/dialogs/swatches.cpp
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2007-10-13 09:05:49 +0000
committerjoncruz <joncruz@users.sourceforge.net>2007-10-13 09:05:49 +0000
commit9d528d0d26f1c7f392472cfb4fe8a7b2ee66c080 (patch)
tree5ae1d0d7ad87799dbd77aa80d5e2ef80094a1c0f /src/dialogs/swatches.cpp
parentimplement dropping color onto stroke (diff)
downloadinkscape-9d528d0d26f1c7f392472cfb4fe8a7b2ee66c080.tar.gz
inkscape-9d528d0d26f1c7f392472cfb4fe8a7b2ee66c080.zip
Adding stroke & fill context menu to swatch
(bzr r3901)
Diffstat (limited to 'src/dialogs/swatches.cpp')
-rw-r--r--src/dialogs/swatches.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/dialogs/swatches.cpp b/src/dialogs/swatches.cpp
index 1196c8378..6607657e5 100644
--- a/src/dialogs/swatches.cpp
+++ b/src/dialogs/swatches.cpp
@@ -16,6 +16,9 @@
#include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
#include <gtk/gtkdnd.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkseparatormenuitem.h>
#include <glibmm/i18n.h>
#include <gdkmm/pixbuf.h>
@@ -219,6 +222,7 @@ static void dragBegin( GtkWidget *widget, GdkDragContext* dc, gpointer data )
// }
static void handleClick( GtkWidget* widget, gpointer callback_data ) {
+ (void)widget;
ColorItem* item = reinterpret_cast<ColorItem*>(callback_data);
if ( item ) {
item->buttonClicked(false);
@@ -226,12 +230,74 @@ static void handleClick( GtkWidget* widget, gpointer callback_data ) {
}
static void handleSecondaryClick( GtkWidget* widget, gint arg1, gpointer callback_data ) {
+ (void)widget;
+ (void)arg1;
ColorItem* item = reinterpret_cast<ColorItem*>(callback_data);
if ( item ) {
item->buttonClicked(true);
}
}
+static GtkWidget* popupMenu = 0;
+static ColorItem* bounceTarget = 0;
+
+static void redirClick( GtkMenuItem *menuitem, gpointer user_data )
+{
+ (void)user_data;
+ if ( bounceTarget ) {
+ handleClick( GTK_WIDGET(menuitem), bounceTarget );
+ }
+}
+
+static void redirSecondaryClick( GtkMenuItem *menuitem, gpointer user_data )
+{
+ (void)user_data;
+ if ( bounceTarget ) {
+ handleSecondaryClick( GTK_WIDGET(menuitem), 0, bounceTarget );
+ }
+}
+
+static gboolean handleButtonPress( GtkWidget* widget, GdkEventButton* event, gpointer user_data)
+{
+ (void)widget;
+ gboolean handled = FALSE;
+
+ if ( (event->button == 3) && (event->type == GDK_BUTTON_PRESS) ) {
+ if ( !popupMenu ) {
+ popupMenu = gtk_menu_new();
+ GtkWidget* child = 0;
+
+ child = gtk_menu_item_new_with_label("Set fill");
+ g_signal_connect( G_OBJECT(child),
+ "activate",
+ G_CALLBACK(redirClick),
+ user_data);
+ gtk_menu_shell_append(GTK_MENU_SHELL(popupMenu), child);
+
+ child = gtk_menu_item_new_with_label("Set stroke");
+
+ g_signal_connect( G_OBJECT(child),
+ "activate",
+ G_CALLBACK(redirSecondaryClick),
+ user_data);
+ gtk_menu_shell_append(GTK_MENU_SHELL(popupMenu), child);
+
+ gtk_widget_show_all(popupMenu);
+ }
+
+ ColorItem* item = reinterpret_cast<ColorItem*>(user_data);
+ if ( item ) {
+ bounceTarget = item;
+ if ( popupMenu ) {
+ gtk_menu_popup(GTK_MENU(popupMenu), NULL, NULL, NULL, NULL, event->button, event->time);
+ handled = TRUE;
+ }
+ }
+ }
+
+ return handled;
+}
+
static void dieDieDie( GtkObject *obj, gpointer user_data )
{
g_message("die die die %p %p", obj, user_data );
@@ -498,6 +564,11 @@ Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Inkscape::
G_CALLBACK(handleSecondaryClick),
this);
+ g_signal_connect( G_OBJECT(newBlot->gobj()),
+ "button-press-event",
+ G_CALLBACK(handleButtonPress),
+ this);
+
gtk_drag_source_set( GTK_WIDGET(newBlot->gobj()),
GDK_BUTTON1_MASK,
sourceColorEntries,