summaryrefslogtreecommitdiffstats
path: root/src/widgets/button.cpp
diff options
context:
space:
mode:
authorAndrew Higginson <at.higginson@gmail.com>2011-12-27 21:04:47 +0000
committerAndrew <at.higginson@gmail.com>2011-12-27 21:04:47 +0000
commit80960b623a99aae1402ab651b2974ef544ed3b03 (patch)
treeba49d42c2789e9e11f805e2d5263e10f9fedeef8 /src/widgets/button.cpp
parenttry to fix bug (diff)
parentGDL: Cherry-pick upstream patch 73852 (2011-03-23) - Add missing return value. (diff)
downloadinkscape-80960b623a99aae1402ab651b2974ef544ed3b03.tar.gz
inkscape-80960b623a99aae1402ab651b2974ef544ed3b03.zip
merged with trunk so I can build again...
(bzr r10092.1.36)
Diffstat (limited to 'src/widgets/button.cpp')
-rw-r--r--src/widgets/button.cpp98
1 files changed, 35 insertions, 63 deletions
diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp
index dc830d096..1360e0a30 100644
--- a/src/widgets/button.cpp
+++ b/src/widgets/button.cpp
@@ -43,20 +43,10 @@ static gint sp_button_process_event (SPButton *button, GdkEvent *event);
static void sp_button_set_action (SPButton *button, SPAction *action);
static void sp_button_set_doubleclick_action (SPButton *button, SPAction *action);
-static void sp_button_action_set_active (SPAction *action, unsigned int active, void *data);
-static void sp_button_action_set_sensitive (SPAction *action, unsigned int sensitive, void *data);
-static void sp_button_action_set_shortcut (SPAction *action, unsigned int shortcut, void *data);
-static void sp_button_set_composed_tooltip (GtkTooltips *tooltips, GtkWidget *widget, SPAction *action);
+static void sp_button_action_set_active (SPButton *button, bool active);
+static void sp_button_set_composed_tooltip (GtkWidget *widget, SPAction *action);
static GtkToggleButtonClass *parent_class;
-SPActionEventVector button_event_vector = {
- {NULL},
- NULL,
- sp_button_action_set_active,
- sp_button_action_set_sensitive,
- sp_button_action_set_shortcut,
- NULL
-};
GType sp_button_get_type(void)
{
@@ -98,12 +88,13 @@ sp_button_init (SPButton *button)
{
button->action = NULL;
button->doubleclick_action = NULL;
- button->tooltips = NULL;
+ new (&button->c_set_active) sigc::connection();
+ new (&button->c_set_sensitive) sigc::connection();
gtk_container_set_border_width (GTK_CONTAINER (button), 0);
- GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (button), GTK_CAN_FOCUS);
- GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (button), GTK_CAN_DEFAULT);
+ gtk_widget_set_can_focus (GTK_WIDGET (button), FALSE);
+ gtk_widget_set_can_default (GTK_WIDGET (button), FALSE);
g_signal_connect_after (G_OBJECT (button), "clicked", G_CALLBACK (sp_button_perform_action), NULL);
g_signal_connect_after (G_OBJECT (button), "event", G_CALLBACK (sp_button_process_event), NULL);
@@ -112,23 +103,18 @@ sp_button_init (SPButton *button)
static void
sp_button_destroy (GtkObject *object)
{
- SPButton *button;
-
- button = SP_BUTTON (object);
-
- if (button->tooltips) {
- g_object_unref (G_OBJECT (button->tooltips));
- button->tooltips = NULL;
- }
+ SPButton *button = SP_BUTTON (object);
if (button->action) {
sp_button_set_action (button, NULL);
}
-
if (button->doubleclick_action) {
sp_button_set_doubleclick_action (button, NULL);
}
+ button->c_set_active.~connection();
+ button->c_set_sensitive.~connection();
+
((GtkObjectClass *) (parent_class))->destroy (object);
}
@@ -186,7 +172,7 @@ sp_button_perform_action (SPButton *button, gpointer /*data*/)
GtkWidget *
-sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action, GtkTooltips *tooltips )
+sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action )
{
SPButton *button;
@@ -194,9 +180,6 @@ sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPA
button->type = type;
button->lsize = CLAMP( size, Inkscape::ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION );
- button->tooltips = tooltips;
-
- if (tooltips) g_object_ref ((GObject *) tooltips);
sp_button_set_action (button, action);
if (doubleclick_action)
@@ -221,12 +204,13 @@ static void
sp_button_set_doubleclick_action (SPButton *button, SPAction *action)
{
if (button->doubleclick_action) {
- nr_object_unref ((NRObject *) button->doubleclick_action);
+ g_object_unref (button->doubleclick_action);
}
button->doubleclick_action = action;
if (action) {
- button->doubleclick_action = (SPAction *) nr_object_ref ((NRObject *) action);
+ g_object_ref(action);
}
+
}
static void
@@ -235,17 +219,25 @@ sp_button_set_action (SPButton *button, SPAction *action)
GtkWidget *child;
if (button->action) {
- nr_active_object_remove_listener_by_data ((NRActiveObject *) button->action, button);
- nr_object_unref ((NRObject *) button->action);
+ button->c_set_active.disconnect();
+ button->c_set_sensitive.disconnect();
child = gtk_bin_get_child (GTK_BIN (button));
if (child) {
gtk_container_remove (GTK_CONTAINER (button), child);
}
+ g_object_unref(button->action);
}
button->action = action;
if (action) {
- button->action = (SPAction *) nr_object_ref ((NRObject *) action);
- nr_active_object_add_listener ((NRActiveObject *) action, (NRObjectEventVector *) &button_event_vector, sizeof (SPActionEventVector), button);
+ g_object_ref(action);
+ button->c_set_active = action->signal_set_active.connect(
+ sigc::bind<0>(
+ sigc::ptr_fun(&sp_button_action_set_active),
+ SP_BUTTON(button)));
+ button->c_set_sensitive = action->signal_set_sensitive.connect(
+ sigc::bind<0>(
+ sigc::ptr_fun(&gtk_widget_set_sensitive),
+ GTK_WIDGET(button)));
if (action->image) {
child = sp_icon_new (button->lsize, action->image);
gtk_widget_show (child);
@@ -253,16 +245,12 @@ sp_button_set_action (SPButton *button, SPAction *action)
}
}
- if (button->tooltips) {
- sp_button_set_composed_tooltip (button->tooltips, (GtkWidget *) button, action);
- }
+ sp_button_set_composed_tooltip ((GtkWidget *) button, action);
}
static void
-sp_button_action_set_active (SPAction */*action*/, unsigned int active, void *data)
+sp_button_action_set_active (SPButton *button, bool active)
{
- SPButton *button;
- button = (SPButton *) data;
if (button->type != SP_BUTTON_TYPE_TOGGLE) {
return;
}
@@ -273,22 +261,7 @@ sp_button_action_set_active (SPAction */*action*/, unsigned int active, void *da
}
}
-static void
-sp_button_action_set_sensitive (SPAction */*action*/, unsigned int sensitive, void *data)
-{
- gtk_widget_set_sensitive (GTK_WIDGET (data), sensitive);
-}
-
-static void
-sp_button_action_set_shortcut (SPAction *action, unsigned int /*shortcut*/, void *data)
-{
- SPButton *button=SP_BUTTON (data);
- if (button->tooltips) {
- sp_button_set_composed_tooltip (button->tooltips, GTK_WIDGET (button), action);
- }
-}
-
-static void sp_button_set_composed_tooltip(GtkTooltips *tooltips, GtkWidget *widget, SPAction *action)
+static void sp_button_set_composed_tooltip(GtkWidget *widget, SPAction *action)
{
if (action) {
unsigned int shortcut = sp_shortcut_get_primary (action->verb);
@@ -298,16 +271,16 @@ static void sp_button_set_composed_tooltip(GtkTooltips *tooltips, GtkWidget *wid
gchar *key = sp_shortcut_get_label(shortcut);
gchar *tip = g_strdup_printf ("%s (%s)", action->tip, key);
- gtk_tooltips_set_tip(tooltips, widget, tip, NULL);
+ gtk_widget_set_tooltip_text(widget, tip);
g_free(tip);
g_free(key);
} else {
// action has no shortcut
- gtk_tooltips_set_tip(tooltips, widget, action->tip, NULL);
+ gtk_widget_set_tooltip_text(widget, action->tip);
}
} else {
// no action
- gtk_tooltips_set_tip(tooltips, widget, NULL, NULL);
+ gtk_widget_set_tooltip_text(widget, NULL);
}
}
@@ -316,13 +289,12 @@ sp_button_new_from_data( Inkscape::IconSize size,
SPButtonType type,
Inkscape::UI::View::View *view,
const gchar *name,
- const gchar *tip,
- GtkTooltips *tooltips )
+ const gchar *tip )
{
GtkWidget *button;
SPAction *action=sp_action_new(view, name, name, tip, name, 0);
- button = sp_button_new (size, type, action, NULL, tooltips);
- nr_object_unref ((NRObject *) action);
+ button = sp_button_new (size, type, action, NULL);
+ g_object_unref(action);
return button;
}