summaryrefslogtreecommitdiffstats
path: root/src/widgets/button.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
committerMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
commit5a4fb2325f60d292b47330f540b26a3279341c90 (patch)
treed2aa7967be25450b83e625025366c618101ae49f /src/widgets/button.cpp
parentThe Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff)
parentRemove Snap menu item and improve grid menu item text (diff)
downloadinkscape-5a4fb2325f60d292b47330f540b26a3279341c90.tar.gz
inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.zip
Commit a merge to trunk, with probabal errors
(bzr r11073.1.36)
Diffstat (limited to 'src/widgets/button.cpp')
-rw-r--r--src/widgets/button.cpp132
1 files changed, 67 insertions, 65 deletions
diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp
index 0071fc56e..a1bd9b792 100644
--- a/src/widgets/button.cpp
+++ b/src/widgets/button.cpp
@@ -20,16 +20,13 @@
#include "icon.h"
#include "shortcuts.h"
#include "interface.h"
+#include "helper/action-context.h"
#include <gdk/gdkkeysyms.h>
#include "button.h"
-static void sp_button_class_init (SPButtonClass *klass);
-static void sp_button_init (SPButton *button);
-static void sp_button_destroy (GtkObject *object);
-
-static void sp_button_size_request (GtkWidget *widget, GtkRequisition *requisition);
+static void sp_button_dispose(GObject *object);
#if GTK_CHECK_VERSION(3,0,0)
static void sp_button_get_preferred_width(GtkWidget *widget,
@@ -39,6 +36,8 @@ static void sp_button_get_preferred_width(GtkWidget *widget,
static void sp_button_get_preferred_height(GtkWidget *widget,
gint *minimal_height,
gint *natural_height);
+#else
+static void sp_button_size_request (GtkWidget *widget, GtkRequisition *requisition);
#endif
static void sp_button_clicked (GtkButton *button);
@@ -50,39 +49,16 @@ static void sp_button_set_doubleclick_action (SPButton *button, 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;
-
-GType sp_button_get_type(void)
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof(SPButtonClass),
- 0, // base_init
- 0, // base_finalize
- (GClassInitFunc)sp_button_class_init,
- 0, // class_finalize
- 0, // class_data
- sizeof(SPButton),
- 0, // n_preallocs
- (GInstanceInitFunc)sp_button_init,
- 0 // value_table
- };
- type = g_type_register_static(GTK_TYPE_TOGGLE_BUTTON, "SPButton", &info, static_cast<GTypeFlags>(0));
- }
- return type;
-}
+G_DEFINE_TYPE(SPButton, sp_button, GTK_TYPE_TOGGLE_BUTTON);
static void
sp_button_class_init (SPButtonClass *klass)
{
- GtkObjectClass *object_class=(GtkObjectClass *)klass;
- GtkWidgetClass *widget_class=(GtkWidgetClass *)klass;
- GtkButtonClass *button_class=(GtkButtonClass *)klass;
-
- parent_class = (GtkToggleButtonClass *)g_type_class_peek_parent (klass);
+ GObjectClass *object_class=G_OBJECT_CLASS(klass);
+ GtkWidgetClass *widget_class=GTK_WIDGET_CLASS(klass);
+ GtkButtonClass *button_class=GTK_BUTTON_CLASS(klass);
- object_class->destroy = sp_button_destroy;
+ object_class->dispose = sp_button_dispose;
#if GTK_CHECK_VERSION(3,0,0)
widget_class->get_preferred_width = sp_button_get_preferred_width;
widget_class->get_preferred_height = sp_button_get_preferred_height;
@@ -109,8 +85,7 @@ sp_button_init (SPButton *button)
g_signal_connect_after (G_OBJECT (button), "event", G_CALLBACK (sp_button_process_event), NULL);
}
-static void
-sp_button_destroy (GtkObject *object)
+static void sp_button_dispose(GObject *object)
{
SPButton *button = SP_BUTTON (object);
@@ -121,19 +96,53 @@ sp_button_destroy (GtkObject *object)
sp_button_set_doubleclick_action (button, NULL);
}
- button->c_set_active.~connection();
- button->c_set_sensitive.~connection();
+ button->c_set_active.~connection();
+ button->c_set_sensitive.~connection();
- ((GtkObjectClass *) (parent_class))->destroy (object);
+ (G_OBJECT_CLASS(sp_button_parent_class))->dispose(object);
}
-static void
-sp_button_size_request (GtkWidget *widget, GtkRequisition *requisition)
+
+
+#if GTK_CHECK_VERSION(3,0,0)
+static void sp_button_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width)
{
- GtkWidget *child;
+ GtkWidget *child = gtk_bin_get_child(GTK_BIN (widget));
+ GtkStyle *style = gtk_widget_get_style(widget);
+
+ if (child) {
+ gtk_widget_get_preferred_width(GTK_WIDGET(child), minimal_width, natural_width);
+ } else {
+ *minimal_width = 0;
+ *natural_width = 0;
+ }
+
+ *minimal_width += 2 + 2 * MAX(2, style->xthickness);
+ *natural_width += 2 + 2 * MAX(2, style->xthickness);
+}
+
+static void sp_button_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height)
+{
+ GtkWidget *child = gtk_bin_get_child(GTK_BIN (widget));
+ GtkStyle *style = gtk_widget_get_style(widget);
+
+ if (child) {
+ gtk_widget_get_preferred_height(GTK_WIDGET(child), minimal_height, natural_height);
+ } else {
+ *minimal_height = 0;
+ *natural_height = 0;
+ }
+
+ *minimal_height += 2 + 2 * MAX(2, style->ythickness);
+ *natural_height += 2 + 2 * MAX(2, style->ythickness);
+
+}
+#else
+static void sp_button_size_request(GtkWidget *widget, GtkRequisition *requisition)
+{
+ GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget));
GtkStyle *style = gtk_widget_get_style (widget);
- child = gtk_bin_get_child (GTK_BIN (widget));
if (child) {
gtk_widget_size_request (GTK_WIDGET (child), requisition);
} else {
@@ -144,21 +153,6 @@ sp_button_size_request (GtkWidget *widget, GtkRequisition *requisition)
requisition->width += 2 + 2 * MAX (2, style->xthickness);
requisition->height += 2 + 2 * MAX (2, style->ythickness);
}
-
-#if GTK_CHECK_VERSION(3,0,0)
-static void sp_button_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width)
-{
- GtkRequisition requisition;
- sp_button_size_request(widget, &requisition);
- *minimal_width = *natural_width = requisition.width;
-}
-
-static void sp_button_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height)
-{
- GtkRequisition requisition;
- sp_button_size_request(widget, &requisition);
- *minimal_height = *natural_height = requisition.height;
-}
#endif
static void
@@ -167,7 +161,7 @@ sp_button_clicked (GtkButton *button)
SPButton *sp_button=SP_BUTTON (button);
if (sp_button->type == SP_BUTTON_TYPE_TOGGLE) {
- ((GtkButtonClass *) (parent_class))->clicked (button);
+ (GTK_BUTTON_CLASS(sp_button_parent_class))->clicked (button);
}
}
@@ -200,9 +194,7 @@ sp_button_perform_action (SPButton *button, gpointer /*data*/)
GtkWidget *
sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPAction *doubleclick_action )
{
- SPButton *button;
-
- button = (SPButton *)g_object_new (SP_TYPE_BUTTON, NULL);
+ SPButton *button = SP_BUTTON(g_object_new(SP_TYPE_BUTTON, NULL));
button->type = type;
button->lsize = CLAMP( size, Inkscape::ICON_SIZE_MENU, Inkscape::ICON_SIZE_DECORATION );
@@ -214,7 +206,7 @@ sp_button_new( Inkscape::IconSize size, SPButtonType type, SPAction *action, SPA
// The Inkscape style is no-relief buttons
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
- return (GtkWidget *) button;
+ return GTK_WIDGET(button);
}
void
@@ -271,7 +263,7 @@ sp_button_set_action (SPButton *button, SPAction *action)
}
}
- sp_button_set_composed_tooltip ((GtkWidget *) button, action);
+ sp_button_set_composed_tooltip(GTK_WIDGET(button), action);
}
static void
@@ -291,7 +283,7 @@ static void sp_button_set_composed_tooltip(GtkWidget *widget, SPAction *action)
{
if (action) {
unsigned int shortcut = sp_shortcut_get_primary (action->verb);
- if (shortcut != GDK_VoidSymbol) {
+ if (shortcut != GDK_KEY_VoidSymbol) {
// there's both action and shortcut
gchar *key = sp_shortcut_get_label(shortcut);
@@ -318,9 +310,19 @@ sp_button_new_from_data( Inkscape::IconSize size,
const gchar *tip )
{
GtkWidget *button;
- SPAction *action=sp_action_new(view, name, name, tip, name, 0);
+ SPAction *action=sp_action_new(Inkscape::ActionContext(view), name, name, tip, name, 0);
button = sp_button_new (size, type, action, NULL);
g_object_unref(action);
return button;
}
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :