summaryrefslogtreecommitdiffstats
path: root/src/dialogs/item-properties.cpp
diff options
context:
space:
mode:
authorKris De Gussem <kris.degussem@gmail.com>2011-12-16 21:03:31 +0000
committerKris <Kris.De.Gussem@hotmail.com>2011-12-16 21:03:31 +0000
commit8a8d0dacce18cf93f3c808199a6125c0132bdb33 (patch)
tree22db3e6f988e7666480dc664c01ebffe51ece4f2 /src/dialogs/item-properties.cpp
parentExtensions. convert2dashes. delete 'stroke-dasharray' attribute in style (Bug... (diff)
parent- Dropped deprecated sp_window_new (diff)
downloadinkscape-8a8d0dacce18cf93f3c808199a6125c0132bdb33.tar.gz
inkscape-8a8d0dacce18cf93f3c808199a6125c0132bdb33.zip
- SPAttributeWidget and SPAttributeTable C++ified
- fixed memory leak with item properties (old instances of item properties window were not destroyed) (bzr r10775)
Diffstat (limited to 'src/dialogs/item-properties.cpp')
-rw-r--r--src/dialogs/item-properties.cpp81
1 files changed, 41 insertions, 40 deletions
diff --git a/src/dialogs/item-properties.cpp b/src/dialogs/item-properties.cpp
index 4ca2b2753..2e805c14e 100644
--- a/src/dialogs/item-properties.cpp
+++ b/src/dialogs/item-properties.cpp
@@ -7,8 +7,9 @@
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
* Abhishek Sharma
+ * Kris De Gussem <Kris.DeGussem@gmail.com>
*
- * Copyright (C) 1999-2006 Authors
+ * Copyright (C) 1999-2011 Authors
* Copyright (C) 2001 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -18,11 +19,11 @@
# include "config.h"
#endif
#include <gtk/gtk.h>
+#include <glibmm/i18n.h>
#include "../desktop-handles.h"
#include "dialog-events.h"
#include "../document.h"
-#include <glibmm/i18n.h>
#include "../helper/window.h"
#include "../inkscape.h"
#include "../interface.h"
@@ -39,6 +40,7 @@ using Inkscape::DocumentUndo;
#define MIN_ONSCREEN_DISTANCE 50
static GtkWidget *dlg = NULL;
+static SPAttributeTable* attrTable = NULL;
static win_data wd;
// impossible original values to make sure they are read from prefs
@@ -52,16 +54,18 @@ static void sp_item_widget_sensitivity_toggled (GtkWidget *widget, SPWidget *spw
static void sp_item_widget_hidden_toggled (GtkWidget *widget, SPWidget *spw);
static void sp_item_widget_label_changed (GtkWidget *widget, SPWidget *spw);
-static void
-sp_item_dialog_destroy( GtkObject */*object*/, gpointer /*data*/ )
+static void sp_item_dialog_destroy( GtkObject */*object*/, gpointer /*data*/ )
{
+ if (attrTable)
+ {
+ delete attrTable;
+ }
sp_signal_disconnect_by_data (INKSCAPE, dlg);
wd.win = dlg = NULL;
wd.stop = 0;
}
-static gboolean
-sp_item_dialog_delete( GtkObject */*object*/, GdkEvent */*event*/, gpointer /*data*/ )
+static gboolean sp_item_dialog_delete( GtkObject */*object*/, GdkEvent */*event*/, gpointer /*data*/ )
{
gtk_window_get_position ((GtkWindow *) dlg, &x, &y);
gtk_window_get_size ((GtkWindow *) dlg, &w, &h);
@@ -246,8 +250,7 @@ GtkWidget *sp_item_widget_new(void)
-static void
-sp_item_widget_modify_selection( SPWidget *spw,
+static void sp_item_widget_modify_selection( SPWidget *spw,
Inkscape::Selection *selection,
guint /*flags*/,
GtkWidget */*itemw*/ )
@@ -257,8 +260,7 @@ sp_item_widget_modify_selection( SPWidget *spw,
-static void
-sp_item_widget_change_selection ( SPWidget *spw,
+static void sp_item_widget_change_selection ( SPWidget *spw,
Inkscape::Selection *selection,
GtkWidget */*itemw*/ )
{
@@ -352,29 +354,34 @@ static void sp_item_widget_setup( SPWidget *spw, Inkscape::Selection *selection
w = GTK_WIDGET(g_object_get_data(G_OBJECT(spw), "interactivity"));
GtkWidget* int_table = GTK_WIDGET(g_object_get_data(G_OBJECT(spw), "interactivity_table"));
- if (int_table){
- gtk_container_remove(GTK_CONTAINER(w), int_table);
- }
-
- const gchar* int_labels[10] = {"onclick", "onmouseover", "onmouseout", "onmousedown", "onmouseup", "onmousemove","onfocusin", "onfocusout", "onactivate", "onload"};
-
- int_table = sp_attribute_table_new (obj, 10, int_labels, int_labels);
- gtk_widget_show_all (int_table);
- g_object_set_data(G_OBJECT(spw), "interactivity_table", int_table);
-
- gtk_container_add (GTK_CONTAINER (w), int_table);
+ std::vector<Glib::ustring> int_labels;
+ int_labels.push_back("onclick");
+ int_labels.push_back("onmouseover");
+ int_labels.push_back("onmouseout");
+ int_labels.push_back("onmousedown");
+ int_labels.push_back("onmouseup");
+ int_labels.push_back("onmousemove");
+ int_labels.push_back("onfocusin");
+ int_labels.push_back("onfocusout");
+ int_labels.push_back("onfocusout");
+ int_labels.push_back("onload");
+
+ if (attrTable)
+ {
+ delete(attrTable);
+ }
+ attrTable = new SPAttributeTable (obj, int_labels, int_labels, w);
+ attrTable->show_all();
+ g_object_set_data(G_OBJECT(spw), "interactivity_table", (GtkWidget*) attrTable->gobj());
}
g_object_set_data (G_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
-
-
} // end of sp_item_widget_setup()
-static void
-sp_item_widget_sensitivity_toggled (GtkWidget *widget, SPWidget *spw)
+static void sp_item_widget_sensitivity_toggled (GtkWidget *widget, SPWidget *spw)
{
if (g_object_get_data(G_OBJECT (spw), "blocked"))
return;
@@ -392,8 +399,7 @@ sp_item_widget_sensitivity_toggled (GtkWidget *widget, SPWidget *spw)
g_object_set_data (G_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
}
-void
-sp_item_widget_hidden_toggled(GtkWidget *widget, SPWidget *spw)
+void sp_item_widget_hidden_toggled(GtkWidget *widget, SPWidget *spw)
{
if (g_object_get_data(G_OBJECT (spw), "blocked"))
return;
@@ -411,8 +417,7 @@ sp_item_widget_hidden_toggled(GtkWidget *widget, SPWidget *spw)
g_object_set_data (G_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
}
-static void
-sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
+static void sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
{
if (g_object_get_data(G_OBJECT (spw), "blocked"))
return;
@@ -490,8 +495,9 @@ void sp_item_dialog(void)
gchar title[500];
sp_ui_dialog_title_string (Inkscape::Verb::get(SP_VERB_DIALOG_ITEM), title);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
- dlg = sp_window_new (title, TRUE);
+
+ Gtk::Window* window = Inkscape::UI::window_new (title, true);
+ dlg = (GtkWidget*)window->gobj();
if (x == -1000 || y == -1000) {
x = prefs->getInt(prefs_path + "x", -1000);
y = prefs->getInt(prefs_path + "y", -1000);
@@ -501,9 +507,6 @@ void sp_item_dialog(void)
h = prefs->getInt(prefs_path + "h", 0);
}
-// if (x<0) x=0;
-// if (y<0) y=0;
-
if (w && h) {
gtk_window_resize ((GtkWindow *) dlg, w, h);
}
@@ -513,24 +516,22 @@ void sp_item_dialog(void)
gtk_window_set_position(GTK_WINDOW(dlg), GTK_WIN_POS_CENTER);
}
-
sp_transientize (dlg);
wd.win = dlg;
wd.stop = 0;
- g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd);
+ g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_transientize_callback), &wd);
g_signal_connect ( G_OBJECT (dlg), "event", G_CALLBACK (sp_dialog_event_handler), dlg);
g_signal_connect ( G_OBJECT (dlg), "destroy", G_CALLBACK (sp_item_dialog_destroy), dlg);
g_signal_connect ( G_OBJECT (dlg), "delete_event", G_CALLBACK (sp_item_dialog_delete), dlg);
- g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_item_dialog_delete), dlg);
- g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg);
- g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg);
+ g_signal_connect ( G_OBJECT (INKSCAPE), "shut_down", G_CALLBACK (sp_item_dialog_delete), dlg);
+ g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_hide", G_CALLBACK (sp_dialog_hide), dlg);
+ g_signal_connect ( G_OBJECT (INKSCAPE), "dialogs_unhide", G_CALLBACK (sp_dialog_unhide), dlg);
// Dialog-specific stuff
GtkWidget *itemw = sp_item_widget_new ();
gtk_widget_show (itemw);
gtk_container_add (GTK_CONTAINER (dlg), itemw);
-
}
gtk_window_present ((GtkWindow *) dlg);