summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2017-11-03 00:10:02 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2017-11-03 00:10:02 +0000
commitd2df0412f728dd5bb54537dfdfe7c35b34d40e0e (patch)
treee2703384779e83312c456399999997fcc289c5cf /src/widgets
parentMerge branch 'master' into powerpencil (diff)
parentchange assignment to equality (diff)
downloadinkscape-d2df0412f728dd5bb54537dfdfe7c35b34d40e0e.tar.gz
inkscape-d2df0412f728dd5bb54537dfdfe7c35b34d40e0e.zip
Merge branch 'master' into powerpencil
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/button.h1
-rw-r--r--src/widgets/desktop-widget.cpp41
-rw-r--r--src/widgets/ege-adjustment-action.cpp128
-rw-r--r--src/widgets/ege-output-action.cpp23
-rw-r--r--src/widgets/ege-select-one-action.cpp29
-rw-r--r--src/widgets/gimp/ruler.cpp24
-rw-r--r--src/widgets/gradient-vector.cpp61
-rw-r--r--src/widgets/ink-action.h1
-rw-r--r--src/widgets/ink-toggle-action.cpp4
-rw-r--r--src/widgets/ink-toggle-action.h1
-rw-r--r--src/widgets/makefile.in17
-rw-r--r--src/widgets/paint-selector.cpp74
-rw-r--r--src/widgets/pencil-toolbar.cpp34
-rw-r--r--src/widgets/spinbutton-events.cpp2
-rw-r--r--src/widgets/spw-utilities.cpp125
-rw-r--r--src/widgets/spw-utilities.h16
-rw-r--r--src/widgets/stroke-marker-selector.cpp43
-rw-r--r--src/widgets/stroke-marker-selector.h7
-rw-r--r--src/widgets/toolbox.cpp27
-rw-r--r--src/widgets/toolbox.h1
20 files changed, 217 insertions, 442 deletions
diff --git a/src/widgets/button.h b/src/widgets/button.h
index 94a956de3..680ccb79d 100644
--- a/src/widgets/button.h
+++ b/src/widgets/button.h
@@ -18,7 +18,6 @@
#include <gtk/gtk.h>
#include <sigc++/connection.h>
-#include "icon-size.h"
struct SPAction;
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index 1d0b31a6e..571f920bf 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -1077,8 +1077,8 @@ SPDesktopWidget::shutdown()
doc->getName());
// fix for bug lp:168809
GtkWidget *ma = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog));
- GList *ma_labels = gtk_container_get_children(GTK_CONTAINER(ma));
- GtkWidget *label = GTK_WIDGET(g_list_first(ma_labels)->data);
+ std::vector<Gtk::Widget*> ma_labels = Glib::wrap(GTK_CONTAINER(ma))->get_children();
+ GtkWidget *label = GTK_WIDGET(ma_labels[0]->gobj());
gtk_widget_set_can_focus(label, FALSE);
GtkWidget *close_button;
@@ -1136,8 +1136,8 @@ SPDesktopWidget::shutdown()
doc->getName() ? doc->getName() : "Unnamed");
// fix for bug lp:168809
GtkWidget *ma = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog));
- GList *ma_labels = gtk_container_get_children(GTK_CONTAINER(ma));
- GtkWidget *label = GTK_WIDGET(g_list_first(ma_labels)->data);
+ std::vector<Gtk::Widget*> ma_labels = Glib::wrap(GTK_CONTAINER(ma))->get_children();
+ GtkWidget *label = GTK_WIDGET(ma_labels[0]->gobj());
gtk_widget_set_can_focus(label, FALSE);
GtkWidget *close_button;
@@ -1734,22 +1734,22 @@ void SPDesktopWidget::namedviewModified(SPObject *obj, guint flags)
* This should solve: https://bugs.launchpad.net/inkscape/+bug/362995
*/
if (GTK_IS_CONTAINER(aux_toolbox)) {
- GList *ch = gtk_container_get_children (GTK_CONTAINER(aux_toolbox));
- for (GList *i = ch; i != NULL; i = i->next) {
- if (GTK_IS_CONTAINER(i->data)) {
- GList *grch = gtk_container_get_children (GTK_CONTAINER(i->data));
- for (GList *j = grch; j != NULL; j = j->next) {
+ std::vector<Gtk::Widget*> ch = Glib::wrap(GTK_CONTAINER(aux_toolbox))->get_children();
+ for (auto i:ch) {
+ if (GTK_IS_CONTAINER(i->gobj())) {
+ std::vector<Gtk::Widget*> grch = dynamic_cast<Gtk::Container*>(i)->get_children();
+ for (auto j:grch) {
- if (!GTK_IS_WIDGET(j->data)) // wasn't a widget
+ if (!GTK_IS_WIDGET(j->gobj())) // wasn't a widget
continue;
// Don't apply to text toolbar. We want to be able to
// use different units for text. (Bug 1562217)
- const gchar* name = gtk_widget_get_name( (GTK_WIDGET(j->data)) );
- if (strcmp( name, "TextToolbar") == 0)
+ const Glib::ustring name = j->get_name();
+ if ( name == "TextToolbar")
continue;
- gpointer t = sp_search_by_data_recursive(GTK_WIDGET(j->data), (gpointer) "tracker");
+ gpointer t = sp_search_by_data_recursive(GTK_WIDGET(j->gobj()), (gpointer) "tracker");
if (t == NULL) // didn't find any tracker data
continue;
@@ -1941,12 +1941,10 @@ static void
sp_dtw_zoom_populate_popup (GtkEntry */*entry*/, GtkMenu *menu, gpointer data)
{
SPDesktop *dt = SP_DESKTOP_WIDGET (data)->desktop;
-
- GList* children = gtk_container_get_children (GTK_CONTAINER (menu));
- for ( auto iter = children ; iter ; iter = g_list_next (iter)) {
- gtk_container_remove (GTK_CONTAINER (menu), GTK_WIDGET (iter->data));
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(menu))->get_children();
+ for ( auto iter : children) {
+ Glib::wrap(GTK_CONTAINER(menu))->remove(*iter);
}
- g_list_free (children);
GtkWidget *item;
@@ -2129,11 +2127,10 @@ sp_dtw_rotation_populate_popup (GtkEntry */*entry*/, GtkMenu *menu, gpointer dat
{
SPDesktopWidget *dtw = static_cast<SPDesktopWidget*>(data);
- GList* children = gtk_container_get_children (GTK_CONTAINER (menu));
- for ( auto iter = children ; iter ; iter = g_list_next (iter)) {
- gtk_container_remove (GTK_CONTAINER (menu), GTK_WIDGET (iter->data));
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(menu))->get_children();
+ for ( auto iter : children) {
+ Glib::wrap(GTK_CONTAINER(menu))->remove(*iter);
}
- g_list_free (children);
GtkWidget *item;
diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp
index e4f041bd1..597c697cb 100644
--- a/src/widgets/ege-adjustment-action.cpp
+++ b/src/widgets/ege-adjustment-action.cpp
@@ -41,10 +41,13 @@
#include <cmath>
#include <string.h>
+#include <vector>
+#include <algorithm>
+#include <gtkmm/container.h>
+#include <gtkmm/radiomenuitem.h>
#include <gdk/gdkkeysyms.h>
-#include "icon-size.h"
#include "widgets/ege-adjustment-action.h"
#include "gimp/gimpspinscale.h"
#include "ui/icon-names.h"
@@ -111,7 +114,7 @@ struct _EgeAdjustmentActionPrivate
gdouble page;
gint appearanceMode;
gboolean transferFocus;
- GList* descriptions;
+ std::vector<EgeAdjustmentDescr*> descriptions;
gchar* appearance;
gchar* iconId;
GtkIconSize iconSize;
@@ -268,7 +271,7 @@ static void ege_adjustment_action_init( EgeAdjustmentAction* action )
action->private_data->page = 0.0;
action->private_data->appearanceMode = APPEARANCE_NONE;
action->private_data->transferFocus = FALSE;
- action->private_data->descriptions = 0;
+ //action->private_data->descriptions = 0;
action->private_data->appearance = 0;
action->private_data->iconId = 0;
action->private_data->iconSize = GTK_ICON_SIZE_SMALL_TOOLBAR;
@@ -514,11 +517,13 @@ static void egeAct_free_description( gpointer data, gpointer user_data ) {
static void egeAct_free_all_descriptions( EgeAdjustmentAction* action )
{
- if ( action->private_data->descriptions ) {
- g_list_foreach( action->private_data->descriptions, egeAct_free_description, 0 );
- g_list_free( action->private_data->descriptions );
- action->private_data->descriptions = 0;
+ for(auto i:action->private_data->descriptions) {
+ egeAct_free_description(i,0);
}
+ for(auto i:action->private_data->descriptions) {
+ g_free(i);
+ }
+ action->private_data->descriptions.clear();
}
static gint egeAct_compare_descriptions( gconstpointer a, gconstpointer b )
@@ -551,7 +556,8 @@ void ege_adjustment_action_set_descriptions( EgeAdjustmentAction* action, gchar
EgeAdjustmentDescr* descr = g_new0( EgeAdjustmentDescr, 1 );
descr->descr = descriptions[i] ? g_strdup( descriptions[i] ) : 0;
descr->value = values[i];
- action->private_data->descriptions = g_list_insert_sorted( action->private_data->descriptions, (gpointer)descr, egeAct_compare_descriptions );
+ action->private_data->descriptions.push_back(descr);
+ std::sort(action->private_data->descriptions.begin(),action->private_data->descriptions.end());
}
}
}
@@ -609,8 +615,8 @@ static void process_menu_action( GtkWidget* obj, gpointer data )
default:
if ( what >= BUMP_CUSTOM ) {
guint index = what - BUMP_CUSTOM;
- if ( index < g_list_length( act->private_data->descriptions ) ) {
- EgeAdjustmentDescr* descr = (EgeAdjustmentDescr*)g_list_nth_data( act->private_data->descriptions, index );
+ if ( index < act->private_data->descriptions.size() ) {
+ EgeAdjustmentDescr* descr = act->private_data->descriptions[index];
if ( descr ) {
gtk_adjustment_set_value( act->private_data->adj, descr->value );
}
@@ -620,14 +626,13 @@ static void process_menu_action( GtkWidget* obj, gpointer data )
}
}
-static void create_single_menu_item( GCallback toggleCb, int val, GtkWidget* menu, EgeAdjustmentAction* act, GtkWidget** dst, GSList** group, gdouble num, gboolean active )
+static void create_single_menu_item( GCallback toggleCb, int val, GtkWidget* menu, EgeAdjustmentAction* act, GtkWidget** dst, Gtk::RadioMenuItem::Group *group, gdouble num, gboolean active )
{
char* str = 0;
EgeAdjustmentDescr* marker = 0;
- GList* cur = act->private_data->descriptions;
+ std::vector<EgeAdjustmentDescr*> cur = act->private_data->descriptions;
- while ( cur ) {
- EgeAdjustmentDescr* descr = (EgeAdjustmentDescr*)cur->data;
+ for (auto descr:cur) {
gdouble delta = num - descr->value;
if ( delta < 0.0 ) {
delta = -delta;
@@ -636,17 +641,14 @@ static void create_single_menu_item( GCallback toggleCb, int val, GtkWidget* men
marker = descr;
break;
}
- cur = g_list_next( cur );
}
str = g_strdup_printf( act->private_data->format, num,
((marker && marker->descr) ? ": " : ""),
((marker && marker->descr) ? marker->descr : ""));
- *dst = gtk_radio_menu_item_new_with_label( *group, str );
- if ( !*group) {
- *group = gtk_radio_menu_item_get_group( GTK_RADIO_MENU_ITEM(*dst) );
- }
+ auto rmi = new Gtk::RadioMenuItem(*group,Glib::ustring(str));
+ *dst = GTK_WIDGET(rmi->gobj());
if ( active ) {
gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(*dst), TRUE );
}
@@ -658,44 +660,41 @@ static void create_single_menu_item( GCallback toggleCb, int val, GtkWidget* men
g_free(str);
}
-static GList* flush_explicit_items( GList* descriptions,
+static int flush_explicit_items( std::vector<EgeAdjustmentDescr*> descriptions,
+ int pos,
GCallback toggleCb,
int val,
GtkWidget* menu,
EgeAdjustmentAction* act,
GtkWidget** dst,
- GSList** group,
+ Gtk::RadioMenuItem::Group *group,
gdouble num )
{
- GList* cur = descriptions;
-
- if ( cur ) {
- gdouble valUpper = num + act->private_data->epsilon;
- gdouble valLower = num - act->private_data->epsilon;
-
- EgeAdjustmentDescr* descr = (EgeAdjustmentDescr*)cur->data;
+ if(pos >= descriptions.size() || pos < 0) return pos;
+ EgeAdjustmentDescr* descr = descriptions[pos];
- while ( cur && descr && (descr->value >= valLower) ) {
- if ( descr->value > valUpper ) {
- create_single_menu_item( toggleCb, val + g_list_position(act->private_data->descriptions, cur), menu, act, dst, group, descr->value, FALSE );
- }
+ gdouble valUpper = num + act->private_data->epsilon;
+ gdouble valLower = num - act->private_data->epsilon;
- cur = g_list_previous( cur );
- descr = cur ? (EgeAdjustmentDescr*)cur->data : 0;
+ while ( pos>=0 && pos<descriptions.size() && descr && (descr->value >= valLower) ) {
+ if ( descr->value > valUpper ) {
+ create_single_menu_item( toggleCb, val + ( std::find(act->private_data->descriptions.begin(),act->private_data->descriptions.end(),descr) - act->private_data->descriptions.begin() ) , menu, act, dst, group, descr->value, FALSE );
}
+ pos--;
+ descr = (pos<0) ? descriptions[pos] : NULL;
}
- return cur;
+ return pos;
}
static GtkWidget* create_popup_number_menu( EgeAdjustmentAction* act )
{
GtkWidget* menu = gtk_menu_new();
- GSList* group = 0;
+ Gtk::RadioMenuItem::Group group;
GtkWidget* single = 0;
-
- GList* addOns = g_list_last( act->private_data->descriptions );
+ std::vector<EgeAdjustmentDescr*> list = act->private_data->descriptions;
+ int addOns = list.size() - 1;
gdouble base = gtk_adjustment_get_value( act->private_data->adj );
gdouble lower = 0.0;
@@ -711,37 +710,37 @@ static GtkWidget* create_popup_number_menu( EgeAdjustmentAction* act )
if ( base < upper ) {
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, upper );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, upper );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_TOP, menu, act, &single, &group, upper, FALSE );
if ( (base + page) < upper ) {
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base + page );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base + page );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_PAGE_UP, menu, act, &single, &group, base + page, FALSE );
}
if ( (base + step) < upper ) {
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base + step );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base + step );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_UP, menu, act, &single, &group, base + step, FALSE );
}
}
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_NONE, menu, act, &single, &group, base, TRUE );
if ( base > lower ) {
if ( (base - step) > lower ) {
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base - step );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base - step );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_DOWN, menu, act, &single, &group, base - step, FALSE );
}
if ( (base - page) > lower ) {
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base - page );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, base - page );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_PAGE_DOWN, menu, act, &single, &group, base - page, FALSE );
}
- addOns = flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, lower );
+ addOns = flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, lower );
create_single_menu_item( G_CALLBACK(process_menu_action), BUMP_BOTTOM, menu, act, &single, &group, lower, FALSE );
}
- if ( act->private_data->descriptions ) {
- gdouble value = ((EgeAdjustmentDescr*)act->private_data->descriptions->data)->value;
- flush_explicit_items( addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, value );
+ if ( !act->private_data->descriptions.empty() ) {
+ gdouble value = ((EgeAdjustmentDescr*)act->private_data->descriptions[0])->value;
+ flush_explicit_items( list, addOns, G_CALLBACK(process_menu_action), BUMP_CUSTOM, menu, act, &single, &group, value );
}
return menu;
@@ -965,36 +964,37 @@ static gboolean process_tab( GtkWidget* widget, int direction )
GtkWidget* ggp = gp ? gtk_widget_get_parent(gp) : 0;
if ( ggp && GTK_IS_TOOLBAR(ggp) ) {
- GList* kids = gtk_container_get_children( GTK_CONTAINER(ggp) );
- if ( kids ) {
+ std::vector<Gtk::Widget*> kids = Glib::wrap(GTK_CONTAINER(ggp))->get_children();
+ if ( !kids.empty() ) {
GtkWidget* curr = widget;
while ( curr && (gtk_widget_get_parent(curr) != ggp) ) {
curr = gtk_widget_get_parent( curr );
}
if ( curr ) {
- GList* mid = g_list_find( kids, curr );
- while ( mid ) {
- mid = ( direction < 0 ) ? g_list_previous(mid) : g_list_next(mid);
- if ( mid && GTK_IS_TOOL_ITEM(mid->data) ) {
+ std::vector<Gtk::Widget*>::iterator mid=kids.end();
+ for(auto i = kids.begin(); i!= kids.end(); ++i){
+ if(curr == (*i)->gobj())
+ mid = i;
+ }
+ while ( mid != kids.end() && !(mid==kids.begin() && direction<0 ) ) {
+ mid = ( direction < 0 ) ? std::prev(mid) : ++mid;
+ if ( mid!=kids.end() && GTK_IS_TOOL_ITEM((*mid)->gobj()) ) {
/* potential target */
- GtkWidget* child = gtk_bin_get_child( GTK_BIN(mid->data) );
+ GtkWidget* child = gtk_bin_get_child( GTK_BIN((*mid)->gobj()) );
if ( child && GTK_IS_BOX(child) ) { /* could be ours */
- GList* subChildren = gtk_container_get_children( GTK_CONTAINER(child) );
- if ( subChildren ) {
- GList* last = g_list_last(subChildren);
- if ( last && GTK_IS_SPIN_BUTTON(last->data) && gtk_widget_is_sensitive( GTK_WIDGET(last->data) ) ) {
- gtk_widget_grab_focus( GTK_WIDGET(last->data) );
+ std::vector<Gtk::Widget*> subChildren = Glib::wrap(GTK_CONTAINER(child))->get_children();
+ if ( ! subChildren.empty() ) {
+ Gtk::Widget *last = subChildren[subChildren.size()-1];
+ if ( GTK_IS_SPIN_BUTTON(last->gobj()) && gtk_widget_is_sensitive( GTK_WIDGET(last->gobj()) ) ) {
+ gtk_widget_grab_focus( GTK_WIDGET(last->gobj()) );
handled = TRUE;
- mid = 0; /* to stop loop */
+ mid = kids.end(); /* to stop loop */
}
-
- g_list_free(subChildren);
}
}
}
}
}
- g_list_free( kids );
}
}
diff --git a/src/widgets/ege-output-action.cpp b/src/widgets/ege-output-action.cpp
index da29524a5..e7d74a25f 100644
--- a/src/widgets/ege-output-action.cpp
+++ b/src/widgets/ege-output-action.cpp
@@ -42,6 +42,8 @@
#include <string.h>
#include <gtk/gtk.h>
+#include <gtkmm/container.h>
+#include <gtkmm/label.h>
#include "widgets/ege-output-action.h"
@@ -211,22 +213,23 @@ void fixup_labels( GObject *gobject, GParamSpec *arg1, gpointer user_data )
GSList* proxies = gtk_action_get_proxies( GTK_ACTION(gobject) );
gchar* str = 0;
g_object_get( gobject, "label", &str, NULL );
+ Glib::ustring str2(str);
(void)user_data;
while ( proxies ) {
if ( GTK_IS_TOOL_ITEM(proxies->data) ) {
/* Search for the things we built up in create_tool_item() */
- GList* children = gtk_container_get_children( GTK_CONTAINER(proxies->data) );
- if ( children && children->data ) {
- if ( GTK_IS_BOX(children->data) ) {
- children = gtk_container_get_children( GTK_CONTAINER(children->data) );
- if ( children && g_list_next(children) ) {
- GtkWidget* child = GTK_WIDGET( g_list_next(children)->data );
- if ( GTK_IS_LABEL(child) ) {
- GtkLabel* lbl = GTK_LABEL(child);
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(proxies->data))->get_children();
+ if ( !children.empty() ) {
+ if ( GTK_IS_BOX(children[0]->gobj()) ) {
+ children = dynamic_cast<Gtk::Container *>(children[0])->get_children();
+ if ( children.size()>1 ) {
+ Gtk::Widget *child = children[1];
+ if ( GTK_IS_LABEL(child->gobj()) ) {
+ Gtk::Label* lbl = dynamic_cast<Gtk::Label *>(child);
if ( EGE_OUTPUT_ACTION(gobject)->private_data->useMarkup ) {
- gtk_label_set_markup( lbl, str );
+ lbl->set_markup(str2);
} else {
- gtk_label_set_text( lbl, str );
+ lbl->set_text(str2);
}
}
}
diff --git a/src/widgets/ege-select-one-action.cpp b/src/widgets/ege-select-one-action.cpp
index 5555663e4..f51e48a8c 100644
--- a/src/widgets/ege-select-one-action.cpp
+++ b/src/widgets/ege-select-one-action.cpp
@@ -40,6 +40,8 @@
/* Note: this file should be kept compilable as both .cpp and .c */
#include <string.h>
+#include <vector>
+#include <gtkmm/checkmenuitem.h>
#include <gtk/gtk.h>
@@ -843,9 +845,9 @@ void resync_active( EgeSelectOneAction* act, gint active, gboolean override )
while ( proxies ) {
if ( GTK_IS_TOOL_ITEM(proxies->data) ) {
/* Search for the things we built up in create_tool_item() */
- GList* children = gtk_container_get_children( GTK_CONTAINER(proxies->data) );
- if ( children && children->data ) {
- gpointer combodata = g_object_get_data( G_OBJECT(children->data), "ege-combo-box" );
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(proxies->data))->get_children();
+ if ( !children.empty() ) {
+ gpointer combodata = g_object_get_data( G_OBJECT(children[0]->gobj()), "ege-combo-box" );
if ( GTK_IS_COMBO_BOX(combodata) ) {
GtkComboBox* combo = GTK_COMBO_BOX(combodata);
@@ -854,8 +856,8 @@ void resync_active( EgeSelectOneAction* act, gint active, gboolean override )
} else if ( gtk_combo_box_get_active(combo) != active ) {
gtk_combo_box_set_active( combo, active );
}
- } else if ( GTK_IS_BOX(children->data) ) {
- gpointer data = g_object_get_data( G_OBJECT(children->data), "ege-proxy_action-group" );
+ } else if ( GTK_IS_BOX(children[0]->gobj()) ) {
+ gpointer data = g_object_get_data( G_OBJECT(children[0]->gobj()), "ege-proxy_action-group" );
if ( data ) {
GSList* group = (GSList*)data;
GtkRadioAction* oneAction = GTK_RADIO_ACTION(group->data);
@@ -880,10 +882,9 @@ void resync_active( EgeSelectOneAction* act, gint active, gboolean override )
}
} else if ( GTK_IS_MENU_ITEM(proxies->data) ) {
GtkWidget* subMenu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(proxies->data) );
- GList* children = gtk_container_get_children( GTK_CONTAINER(subMenu) );
- if ( children && (g_list_length(children) > (guint)active) ) {
- gpointer data = g_list_nth_data( children, active );
- gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(data), TRUE );
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(subMenu))->get_children();
+ if ( children.size() > (guint)active ) {
+ dynamic_cast<Gtk::CheckMenuItem*>(children[active])->set_active(true);
}
}
@@ -900,14 +901,14 @@ void resync_sensitive( EgeSelectOneAction* act )
while ( proxies ) {
if ( GTK_IS_TOOL_ITEM(proxies->data) ) {
/* Search for the things we built up in create_tool_item() */
- GList* children = gtk_container_get_children( GTK_CONTAINER(proxies->data) );
- if ( children && children->data ) {
- gpointer combodata = g_object_get_data( G_OBJECT(children->data), "ege-combo-box" );
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(proxies->data))->get_children();
+ if ( !children.empty() ) {
+ gpointer combodata = g_object_get_data( G_OBJECT(children[0]->gobj()), "ege-combo-box" );
if ( GTK_IS_COMBO_BOX(combodata) ) {
/* Not implemented */
- } else if ( GTK_IS_BOX(children->data) ) {
- gpointer data = g_object_get_data( G_OBJECT(children->data), "ege-proxy_action-group" );
+ } else if ( GTK_IS_BOX(children[0]->gobj()) ) {
+ gpointer data = g_object_get_data( G_OBJECT(children[0]->gobj()), "ege-proxy_action-group" );
if ( data ) {
GSList* group = (GSList*)data;
// List is backwards in group as compared to GtkTreeModel, we better do matching.
diff --git a/src/widgets/gimp/ruler.cpp b/src/widgets/gimp/ruler.cpp
index 6a1f7f903..8d73ada3b 100644
--- a/src/widgets/gimp/ruler.cpp
+++ b/src/widgets/gimp/ruler.cpp
@@ -32,6 +32,7 @@
#include <cstring>
#include <cmath>
#include <cstdio>
+#include <set>
#include "ruler.h"
#include <glibmm/i18n.h>
@@ -61,8 +62,9 @@ enum {
/* All distances below are in 1/72nd's of an inch. (According to
* Adobe, that's a point, but points are really 1/72.27 in.)
*/
-typedef struct
+class SPRulerPrivate
{
+public:
GtkOrientation orientation;
Inkscape::Util::Unit const *unit;
gdouble lower;
@@ -78,8 +80,8 @@ typedef struct
PangoLayout *layout;
gdouble font_scale;
- GList *track_widgets;
-} SPRulerPrivate;
+ std::set<GtkWidget*> *track_widgets;
+};
#define SP_RULER_GET_PRIVATE(ruler) \
G_TYPE_INSTANCE_GET_PRIVATE (ruler, SP_TYPE_RULER, SPRulerPrivate)
@@ -178,6 +180,7 @@ sp_ruler_class_init (SPRulerClass *klass)
g_type_class_add_private (object_class, sizeof (SPRulerPrivate));
+
g_object_class_install_property (object_class,
PROP_ORIENTATION,
g_param_spec_enum ("orientation",
@@ -269,6 +272,7 @@ sp_ruler_init (SPRuler *ruler)
priv->pos_redraw_idle_id = 0;
priv->font_scale = DEFAULT_RULER_FONT_SCALE;
+ priv->track_widgets = new std::set<GtkWidget*>;
}
static void
@@ -277,14 +281,15 @@ sp_ruler_dispose (GObject *object)
SPRuler *ruler = SP_RULER (object);
SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler);
- while (priv->track_widgets)
- sp_ruler_remove_track_widget (ruler, GTK_WIDGET(priv->track_widgets->data));
+ for (auto i:*(priv->track_widgets))
+ sp_ruler_remove_track_widget (ruler, i);
if (priv->pos_redraw_idle_id)
{
g_source_remove (priv->pos_redraw_idle_id);
priv->pos_redraw_idle_id = 0;
}
+ delete priv->track_widgets;
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@@ -889,9 +894,10 @@ sp_ruler_add_track_widget (SPRuler *ruler,
priv = SP_RULER_GET_PRIVATE (ruler);
- g_return_if_fail (g_list_find (priv->track_widgets, widget) == NULL);
+ g_return_if_fail (priv->track_widgets->find(widget)==priv->track_widgets->end());
+
- priv->track_widgets = g_list_prepend (priv->track_widgets, widget);
+ priv->track_widgets->insert(widget);
g_signal_connect (widget, "motion-notify-event",
G_CALLBACK (sp_ruler_track_widget_motion_notify),
@@ -920,9 +926,9 @@ sp_ruler_remove_track_widget (SPRuler *ruler,
priv = SP_RULER_GET_PRIVATE (ruler);
- g_return_if_fail (g_list_find (priv->track_widgets, widget) != NULL);
+ g_return_if_fail (priv->track_widgets->find(widget)!=priv->track_widgets->end());
- priv->track_widgets = g_list_remove (priv->track_widgets, widget);
+ priv->track_widgets->erase(widget);
g_signal_handlers_disconnect_by_func (widget,
(gpointer) G_CALLBACK (sp_ruler_track_widget_motion_notify),
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 0c5f3cf47..fdba2b56d 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -268,17 +268,16 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
gvs->store->clear();
/* Pick up all gradients with vectors */
- GSList *gl = NULL;
+ std::vector<SPGradient *> gl;
if (gvs->gr) {
std::vector<SPObject *> gradients = gvs->gr->document->getResourceList("gradient");
for (std::vector<SPObject *>::const_iterator it = gradients.begin(); it != gradients.end(); ++it) {
SPGradient* grad = SP_GRADIENT(*it);
if ( grad->hasStops() && (grad->isSwatch() == gvs->swatched) ) {
- gl = g_slist_prepend(gl, *it);
+ gl.push_back(SP_GRADIENT(*it));
}
}
}
- gl = g_slist_reverse(gl);
/* Get usage count of all the gradients */
std::map<SPGradient *, gint> usageCount;
@@ -288,7 +287,7 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
Gtk::TreeModel::Row row = *(gvs->store->append());
row[gvs->columns->name] = _("No document selected");
- } else if (!gl) {
+ } else if (gl.empty()) {
Gtk::TreeModel::Row row = *(gvs->store->append());
row[gvs->columns->name] = _("No gradients in document");
@@ -297,11 +296,7 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
row[gvs->columns->name] = _("No gradient selected");
} else {
- while (gl) {
- SPGradient *gr;
- gr = SP_GRADIENT(gl->data);
- gl = g_slist_remove(gl, gr);
-
+ for (auto gr:gl) {
unsigned long hhssll = sp_gradient_to_hhssll(gr);
GdkPixbuf *pixb = sp_gradient_to_pixbuf (gr, 64, 18);
Glib::ustring label = gr_prepare_label(gr);
@@ -312,7 +307,6 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
row[gvs->columns->refcount] = usageCount[gr];
row[gvs->columns->data] = gr;
row[gvs->columns->pixbuf] = Glib::wrap(pixb);
-
}
}
@@ -333,19 +327,14 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr)
return ((int)(hsl[0]*100 * 10000)) + ((int)(hsl[1]*100 * 100)) + ((int)(hsl[2]*100 * 1));
}
-static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude)
+static void get_all_doc_items(std::vector<SPItem*> &list, SPObject *from)
{
for (auto& child: from->children) {
if (SP_IS_ITEM(&child)) {
- list = g_slist_prepend(list, SP_ITEM(&child));
- }
-
- if (ingroups || SP_IS_ITEM(&child)) {
- list = get_all_doc_items(list, &child, onlyvisible, onlysensitive, ingroups, exclude);
+ list.push_back(SP_ITEM(&child));
}
+ get_all_doc_items(list, &child);
}
-
- return list;
}
/*
@@ -377,15 +366,10 @@ void gr_get_usage_counts(SPDocument *doc, std::map<SPGradient *, gint> *mapUsage
if (!doc)
return;
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- bool onlyvisible = prefs->getBool("/options/kbselection/onlyvisible", true);
- bool onlysensitive = prefs->getBool("/options/kbselection/onlysensitive", true);
- bool ingroups = TRUE;
-
- GSList *all_list = get_all_doc_items(NULL, doc->getRoot(), onlyvisible, onlysensitive, ingroups, NULL);
+ std::vector<SPItem *> all_list;
+ get_all_doc_items(all_list, doc->getRoot());
- for (GSList *i = all_list; i != NULL; i = i->next) {
- SPItem *item = SP_ITEM(i->data);
+ for (auto item:all_list) {
if (!item->getId())
continue;
SPGradient *gr = NULL;
@@ -565,34 +549,29 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s
GtkTreeIter iter;
/* Populate the combobox store */
- GSList *sl = NULL;
+ std::vector<SPStop *> sl;
if ( gradient->hasStops() ) {
for (auto& ochild: gradient->children) {
if (SP_IS_STOP(&ochild)) {
- sl = g_slist_append(sl, &ochild);
+ sl.push_back(SP_STOP(&ochild));
}
}
}
- if (!sl) {
+ if (sl.empty()) {
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, NULL, 1, _("No stops in gradient"), 2, NULL, -1);
gtk_widget_set_sensitive (combo_box, FALSE);
} else {
- for (; sl != NULL; sl = sl->next){
- if (SP_IS_STOP(sl->data)){
- SPStop *stop = SP_STOP(sl->data);
- Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(sl->data)->getRepr();
- Inkscape::UI::Widget::ColorPreview *cpv = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(stop->get_rgba32()));
- GdkPixbuf *pb = cpv->toPixbuf(64, 16);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, pb, 1, repr->attribute("id"), 2, stop, -1);
- gtk_widget_set_sensitive (combo_box, FALSE);
- }
+ for (auto stop:sl) {
+ Inkscape::XML::Node *repr = stop->getRepr();
+ Inkscape::UI::Widget::ColorPreview *cpv = Gtk::manage(new Inkscape::UI::Widget::ColorPreview(stop->get_rgba32()));
+ GdkPixbuf *pb = cpv->toPixbuf(64, 16);
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, pb, 1, repr->attribute("id"), 2, stop, -1);
+ gtk_widget_set_sensitive (combo_box, FALSE);
}
-
gtk_widget_set_sensitive(combo_box, TRUE);
}
diff --git a/src/widgets/ink-action.h b/src/widgets/ink-action.h
index 99786c878..396e4838b 100644
--- a/src/widgets/ink-action.h
+++ b/src/widgets/ink-action.h
@@ -2,7 +2,6 @@
#define SEEN_INK_ACTION
#include <gtk/gtk.h>
-#include "icon-size.h"
#include "attributes.h"
/* Equivalent to GTK Actions of the same type, but can support Inkscape SVG icons */
diff --git a/src/widgets/ink-toggle-action.cpp b/src/widgets/ink-toggle-action.cpp
index c091a2e0d..200d0d558 100644
--- a/src/widgets/ink-toggle-action.cpp
+++ b/src/widgets/ink-toggle-action.cpp
@@ -51,9 +51,9 @@ static void ink_toggle_action_class_init( InkToggleActionClass* klass )
g_param_spec_int( "iconSize",
"Icon Size",
"The size the icon",
- (int)Inkscape::ICON_SIZE_MENU,
+ GTK_ICON_SIZE_MENU,
(int)99,
- (int)Inkscape::ICON_SIZE_SMALL_TOOLBAR,
+ GTK_ICON_SIZE_SMALL_TOOLBAR,
(GParamFlags)(G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT) ) );
g_type_class_add_private( klass, sizeof(InkToggleActionClass) );
diff --git a/src/widgets/ink-toggle-action.h b/src/widgets/ink-toggle-action.h
index 9130b9f9f..f329f57a6 100644
--- a/src/widgets/ink-toggle-action.h
+++ b/src/widgets/ink-toggle-action.h
@@ -4,7 +4,6 @@
#include <gtk/gtk.h>
#include "attributes.h"
-#include "icon-size.h"
G_BEGIN_DECLS
#define INK_TOGGLE_ACTION_TYPE ( ink_toggle_action_get_type() )
diff --git a/src/widgets/makefile.in b/src/widgets/makefile.in
deleted file mode 100644
index 5b756ebf3..000000000
--- a/src/widgets/makefile.in
+++ /dev/null
@@ -1,17 +0,0 @@
-# Convenience stub makefile to call the real Makefile.
-
-@SET_MAKE@
-
-OBJEXT = @OBJEXT@
-
-# Explicit so that it's the default rule.
-all:
- cd .. && $(MAKE) widgets/all
-
-clean %.a %.$(OBJEXT):
- cd .. && $(MAKE) widgets/$@
-
-.PHONY: all clean
-
-.SUFFIXES:
-.SUFFIXES: .a .$(OBJEXT)
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index 27fe4b63a..4457b712d 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -23,6 +23,7 @@
#include <cstring>
#include <string>
+#include <vector>
#include "widgets/swatch-selector.h"
#include "sp-pattern.h"
@@ -789,25 +790,23 @@ static void sp_psel_mesh_change(GtkWidget * /*widget*/, SPPaintSelector *psel)
/**
- * Returns a list of meshes in the defs of the given source document as a GSList object
- * Returns NULL if there are no meshes in the document.
+ * Returns a list of meshes in the defs of the given source document as a vector
*/
-static GSList *
+static std::vector<SPMeshGradient *>
ink_mesh_list_get (SPDocument *source)
{
+ std::vector<SPMeshGradient *> pl;
if (source == NULL)
- return NULL;
+ return pl;
+
- GSList *pl = NULL;
std::vector<SPObject *> meshes = source->getResourceList("gradient");
for (std::vector<SPObject *>::const_iterator it = meshes.begin(); it != meshes.end(); ++it) {
if (SP_IS_MESHGRADIENT(*it) &&
SP_GRADIENT(*it) == SP_GRADIENT(*it)->getArray()) { // only if this is a root mesh
- pl = g_slist_prepend(pl, *it);
+ pl.push_back(SP_MESHGRADIENT(*it));
}
}
-
- pl = g_slist_reverse(pl);
return pl;
}
@@ -815,14 +814,14 @@ ink_mesh_list_get (SPDocument *source)
* Adds menu items for mesh list.
*/
static void
-sp_mesh_menu_build (GtkWidget *combo, GSList *mesh_list, SPDocument */*source*/)
+sp_mesh_menu_build (GtkWidget *combo, std::vector<SPMeshGradient *> &mesh_list, SPDocument */*source*/)
{
GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo)));
GtkTreeIter iter;
- for (; mesh_list != NULL; mesh_list = mesh_list->next) {
+ for (auto i:mesh_list) {
- Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(mesh_list->data)->getRepr();
+ Inkscape::XML::Node *repr = i->getRepr();
gchar const *meshid = repr->attribute("id");
gchar const *label = meshid;
@@ -847,21 +846,8 @@ sp_mesh_menu_build (GtkWidget *combo, GSList *mesh_list, SPDocument */*source*/)
*/
static void sp_mesh_list_from_doc(GtkWidget *combo, SPDocument * /*current_doc*/, SPDocument *source, SPDocument * /*mesh_doc*/)
{
- GSList *pl = ink_mesh_list_get(source);
- GSList *clean_pl = NULL;
-
- for (; pl != NULL; pl = pl->next) {
- if (!SP_IS_MESHGRADIENT(pl->data)) {
- continue;
- }
- // Add to the list of meshes we really do wish to show
- clean_pl = g_slist_prepend (clean_pl, pl->data);
- }
-
- sp_mesh_menu_build (combo, clean_pl, source);
-
- g_slist_free (pl);
- g_slist_free (clean_pl);
+ std::vector<SPMeshGradient *> pl = ink_mesh_list_get(source);
+ sp_mesh_menu_build (combo, pl, source);
}
@@ -1138,24 +1124,22 @@ static void sp_psel_pattern_change(GtkWidget * /*widget*/, SPPaintSelector *psel
/**
- * Returns a list of patterns in the defs of the given source document as a GSList object
- * Returns NULL if there are no patterns in the document.
+ * Returns a list of patterns in the defs of the given source document as a vector
*/
-static GSList *
+static std::vector<SPPattern*>
ink_pattern_list_get (SPDocument *source)
{
+ std::vector<SPPattern *> pl;
if (source == NULL)
- return NULL;
+ return pl;
- GSList *pl = NULL;
std::vector<SPObject *> patterns = source->getResourceList("pattern");
for (std::vector<SPObject *>::const_iterator it = patterns.begin(); it != patterns.end(); ++it) {
if (SP_PATTERN(*it) == SP_PATTERN(*it)->rootPattern()) { // only if this is a root pattern
- pl = g_slist_prepend(pl, *it);
+ pl.push_back(SP_PATTERN(*it));
}
}
- pl = g_slist_reverse(pl);
return pl;
}
@@ -1163,14 +1147,14 @@ ink_pattern_list_get (SPDocument *source)
* Adds menu items for pattern list - derived from marker code, left hb etc in to make addition of previews easier at some point.
*/
static void
-sp_pattern_menu_build (GtkWidget *combo, GSList *pattern_list, SPDocument */*source*/)
+sp_pattern_menu_build (GtkWidget *combo, std::vector<SPPattern *> &pl, SPDocument */*source*/)
{
GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo)));
GtkTreeIter iter;
- for (; pattern_list != NULL; pattern_list = pattern_list->next) {
+ for (auto i=pl.rbegin(); i!=pl.rend(); ++i) {
- Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(pattern_list->data)->getRepr();
+ Inkscape::XML::Node *repr = (*i)->getRepr();
// label for combobox
gchar const *label;
@@ -1200,22 +1184,8 @@ sp_pattern_menu_build (GtkWidget *combo, GSList *pattern_list, SPDocument */*sou
*/
static void sp_pattern_list_from_doc(GtkWidget *combo, SPDocument * /*current_doc*/, SPDocument *source, SPDocument * /*pattern_doc*/)
{
- GSList *pl = ink_pattern_list_get(source);
- GSList *clean_pl = NULL;
-
- for (; pl != NULL; pl = pl->next) {
- if (!SP_IS_PATTERN(pl->data)) {
- continue;
- }
-
- // Add to the list of patterns we really do wish to show
- clean_pl = g_slist_prepend (clean_pl, pl->data);
- }
-
- sp_pattern_menu_build (combo, clean_pl, source);
-
- g_slist_free (pl);
- g_slist_free (clean_pl);
+ std::vector<SPPattern *> pl = ink_pattern_list_get(source);
+ sp_pattern_menu_build (combo, pl, source);
}
diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp
index a9d27566d..ea7411285 100644
--- a/src/widgets/pencil-toolbar.cpp
+++ b/src/widgets/pencil-toolbar.cpp
@@ -205,41 +205,29 @@ static void freehand_simplify_lpe(InkToggleAction* itact, GObject *dataKludge) {
}
}
-/**
- * Generate the list of freehand advanced shape option entries.
- */
-static GList * freehand_shape_dropdown_items_list() {
- GList *glist = NULL;
-
- glist = g_list_append (glist, const_cast<gchar *>(C_("Freehand shape", "None")));
- glist = g_list_append (glist, _("Triangle in"));
- glist = g_list_append (glist, _("Triangle out"));
- glist = g_list_append (glist, _("Ellipse"));
- glist = g_list_append (glist, _("From clipboard"));
- glist = g_list_append (glist, _("Bend from clipboard"));
- glist = g_list_append (glist, _("Last applied"));
-
- return glist;
-}
-
static void freehand_add_advanced_shape_options(GtkActionGroup* mainActions, GObject* holder, bool tool_is_pencil)
{
/*advanced shape options */
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
GtkListStore* model = gtk_list_store_new( 2, G_TYPE_STRING, G_TYPE_INT );
-
- GList* items = 0;
gint count = 0;
- for ( items = freehand_shape_dropdown_items_list(); items ; items = g_list_next(items) )
+ std::vector<gchar*> freehand_shape_dropdown_items_list = {
+ const_cast<gchar *>(C_("Freehand shape", "None")),
+ _("Triangle in"),
+ _("Triangle out"),
+ _("Ellipse"),
+ _("From clipboard"),
+ _("Bend from clipboard"),
+ _("Last applied") };
+
+ for (auto item:freehand_shape_dropdown_items_list)
{
GtkTreeIter iter;
gtk_list_store_append( model, &iter );
- gtk_list_store_set( model, &iter, 0, reinterpret_cast<gchar*>(items->data), 1, count, -1 );
+ gtk_list_store_set( model, &iter, 0, item, 1, count, -1 );
count++;
}
- g_list_free( items );
- items = 0;
EgeSelectOneAction* act1 = ege_select_one_action_new(
tool_is_pencil ? "SetPencilShapeAction" : "SetPenShapeAction",
_("Shape:"), (_("Shape of new paths drawn by this tool")), NULL, GTK_TREE_MODEL(model));
diff --git a/src/widgets/spinbutton-events.cpp b/src/widgets/spinbutton-events.cpp
index fdf88ec85..9666fc636 100644
--- a/src/widgets/spinbutton-events.cpp
+++ b/src/widgets/spinbutton-events.cpp
@@ -66,7 +66,7 @@ gboolean spinbutton_keypress(GtkWidget *w, GdkEventKey *event, gpointer /*data*/
{
gboolean result = FALSE; // I didn't consume the event
- switch (Inkscape::UI::Tools::get_group0_keyval(event)) {
+ switch (Inkscape::UI::Tools::get_latin_keyval(event)) {
case GDK_KEY_Escape: // defocus
spinbutton_undo(w);
spinbutton_defocus(w);
diff --git a/src/widgets/spw-utilities.cpp b/src/widgets/spw-utilities.cpp
index 68fb78327..992f1f6b7 100644
--- a/src/widgets/spw-utilities.cpp
+++ b/src/widgets/spw-utilities.cpp
@@ -61,31 +61,6 @@ Gtk::Label * spw_label(Gtk::Grid *table, const gchar *label_text, int col, int r
return label_widget;
}
-GtkWidget *
-spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row)
-{
- GtkWidget *label_widget;
-
- label_widget = gtk_label_new (label_text);
- g_assert(label_widget != NULL);
- gtk_widget_set_halign(label_widget, GTK_ALIGN_END);
- gtk_widget_show (label_widget);
-
-#if GTK_CHECK_VERSION(3,12,0)
- gtk_widget_set_margin_start(label_widget, 4);
- gtk_widget_set_margin_end(label_widget, 4);
-#else
- gtk_widget_set_margin_left(label_widget, 4);
- gtk_widget_set_margin_right(label_widget, 4);
-#endif
- gtk_widget_set_hexpand(label_widget, TRUE);
- gtk_widget_set_halign(label_widget, GTK_ALIGN_FILL);
- gtk_widget_set_valign(label_widget, GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(table), label_widget, col, row, 1, 1);
-
- return label_widget;
-}
-
/**
* Creates a horizontal layout manager with 4-pixel spacing between children
* and space for 'width' columns.
@@ -104,94 +79,6 @@ Gtk::HBox * spw_hbox(Gtk::Grid * table, int width, int col, int row)
return hb;
}
-/**
- * Creates a checkbutton widget and adds it to a vbox.
- * This is a compound widget that includes a label.
- */
-GtkWidget *spw_vbox_checkbutton(GtkWidget *dialog, GtkWidget *vbox,
- const gchar *label, const gchar *tip, gchar *key, GCallback cb)
-{
- g_assert (dialog != NULL);
- g_assert (vbox != NULL);
-
- GtkWidget *b = gtk_check_button_new_with_label (label);
- gtk_widget_set_tooltip_text(b, tip);
- g_assert (b != NULL);
- gtk_widget_show (b);
- gtk_box_pack_start (GTK_BOX (vbox), b, FALSE, FALSE, 0);
- g_object_set_data (G_OBJECT (b), "key", key);
- g_object_set_data (G_OBJECT (dialog), key, b);
- g_signal_connect (G_OBJECT (b), "toggled", cb, dialog);
- return b;
-}
-
-
-/**
- * Creates a checkbutton widget and adds it to a table.
- * This is a compound widget that includes a label.
- */
-GtkWidget *
-spw_checkbutton(GtkWidget * dialog, GtkWidget * table,
- const gchar * label, gchar * key, int /*col*/, int row,
- int insensitive, GCallback cb)
-{
- GtkWidget *b;
-
- g_assert(dialog != NULL);
- g_assert(table != NULL);
-
- GtkWidget *l = gtk_label_new (label);
- gtk_widget_set_halign(l, GTK_ALIGN_END);
- gtk_widget_show (l);
-
- gtk_widget_set_halign(l, GTK_ALIGN_FILL);
- gtk_widget_set_hexpand(l, TRUE);
- gtk_widget_set_valign(l, GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(table), l, 0, row, 1, 1);
-
- b = gtk_check_button_new ();
- gtk_widget_show (b);
-
- gtk_widget_set_halign(b, GTK_ALIGN_FILL);
- gtk_widget_set_hexpand(b, TRUE);
- gtk_widget_set_valign(b, GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(table), b, 1, row, 1, 1);
-
- g_object_set_data (G_OBJECT (b), "key", key);
- g_object_set_data (G_OBJECT (dialog), key, b);
- g_signal_connect (G_OBJECT (b), "toggled", cb, dialog);
- if (insensitive == 1) {
- gtk_widget_set_sensitive (b, FALSE);
- }
- return b;
-}
-
-/**
- * Creates a dropdown widget. This is a compound widget that includes
- * a label as well as the dropdown.
- */
-GtkWidget *
-spw_dropdown(GtkWidget * dialog, GtkWidget * table,
- const gchar * label_text, gchar * key, int row,
- GtkWidget * selector
- )
-{
- g_assert(dialog != NULL);
- g_assert(table != NULL);
- g_assert(selector != NULL);
-
- spw_label_old(table, label_text, 0, row);
-
- gtk_widget_show (selector);
- gtk_widget_set_halign(selector, GTK_ALIGN_FILL);
- gtk_widget_set_hexpand(selector, TRUE);
- gtk_widget_set_valign(selector, GTK_ALIGN_CENTER);
- gtk_grid_attach(GTK_GRID(table), selector, 1, row, 1, 1);
-
- g_object_set_data (G_OBJECT (dialog), key, selector);
- return selector;
-}
-
static void
sp_set_font_size_recursive (GtkWidget *w, gpointer font)
{
@@ -249,9 +136,9 @@ gpointer sp_search_by_data_recursive(GtkWidget *w, gpointer key)
if (r) return r;
if (GTK_IS_CONTAINER(w)) {
- GList *ch = gtk_container_get_children (GTK_CONTAINER(w));
- for (GList *i = ch; i != NULL; i = i->next) {
- r = sp_search_by_data_recursive(GTK_WIDGET(i->data), key);
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(w))->get_children();
+ for (auto i:children) {
+ r = sp_search_by_data_recursive(GTK_WIDGET(i->gobj()), key);
if (r) return r;
}
}
@@ -272,9 +159,9 @@ GtkWidget *sp_search_by_value_recursive(GtkWidget *w, gchar *key, gchar *value)
if (r && !strcmp (r, value)) return w;
if (GTK_IS_CONTAINER(w)) {
- GList *ch = gtk_container_get_children (GTK_CONTAINER(w));
- for (GList *i = ch; i != NULL; i = i->next) {
- GtkWidget *child = sp_search_by_value_recursive(GTK_WIDGET(i->data), key, value);
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(w))->get_children();
+ for (auto i:children) {
+ GtkWidget *child = sp_search_by_value_recursive(GTK_WIDGET(i->gobj()), key, value);
if (child) return child;
}
}
diff --git a/src/widgets/spw-utilities.h b/src/widgets/spw-utilities.h
index 71b451631..ea0d55279 100644
--- a/src/widgets/spw-utilities.h
+++ b/src/widgets/spw-utilities.h
@@ -27,22 +27,6 @@ namespace Gtk {
Gtk::Label * spw_label(Gtk::Grid *table, gchar const *label_text, int col, int row, Gtk::Widget *target);
Gtk::HBox * spw_hbox(Gtk::Grid *table, int width, int col, int row);
-GtkWidget * spw_label_old(GtkWidget *table, gchar const *label_text, int col, int row);
-
-GtkWidget *
-spw_vbox_checkbutton(GtkWidget *dialog, GtkWidget *table,
- const gchar *label, const gchar *tip, gchar *key, GCallback cb);
-
-GtkWidget *
-spw_checkbutton(GtkWidget *dialog, GtkWidget *table,
- gchar const *label, gchar *key, int col, int row,
- int sensitive, GCallback cb);
-
-GtkWidget *
-spw_dropdown(GtkWidget *dialog, GtkWidget *table,
- gchar const *label, gchar *key, int row,
- GtkWidget *selector
- );
void sp_set_font_size (GtkWidget *w, guint font);
void sp_set_font_size_smaller (GtkWidget *w);
diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp
index 96994741c..9ddcf993d 100644
--- a/src/widgets/stroke-marker-selector.cpp
+++ b/src/widgets/stroke-marker-selector.cpp
@@ -111,22 +111,20 @@ MarkerComboBox::refreshHistory()
updating = true;
- GSList *ml = get_marker_list(doc);
+ std::vector<SPMarker *> ml = get_marker_list(doc);
/*
* Seems to be no way to get notified of changes just to markers,
* so listen to changes in all defs and check if the number of markers has changed here
* to avoid unnecessary refreshes when things like gradients change
*/
- if (markerCount != g_slist_length(ml)) {
+ if (markerCount != ml.size()) {
const char *active = get_active()->get_value(marker_columns.marker);
sp_marker_list_from_doc(doc, true);
set_selected(active);
- markerCount = g_slist_length(ml);
+ markerCount = ml.size();
}
- g_slist_free (ml);
-
updating = false;
}
@@ -295,45 +293,32 @@ void MarkerComboBox::set_selected(const gchar *name, gboolean retry/*=true*/) {
*/
void MarkerComboBox::sp_marker_list_from_doc(SPDocument *source, gboolean history)
{
- GSList *ml = get_marker_list(source);
- GSList *clean_ml = NULL;
-
- for (; ml != NULL; ml = ml->next) {
- if (!SP_IS_MARKER(ml->data))
- continue;
-
- // Add to the list of markers we really do wish to show
- clean_ml = g_slist_prepend (clean_ml, ml->data);
- }
+ std::vector<SPMarker *> ml = get_marker_list(source);
remove_markers(history); // Seem to need to remove 2x
remove_markers(history);
- add_markers(clean_ml, source, history);
-
- g_slist_free (ml);
- g_slist_free (clean_ml);
-
+ add_markers(ml, source, history);
}
/**
- * Returns a list of markers in the defs of the given source document as a GSList object
+ * Returns a list of markers in the defs of the given source document as a vector
* Returns NULL if there are no markers in the document.
*/
-GSList *MarkerComboBox::get_marker_list (SPDocument *source)
+std::vector<SPMarker *> MarkerComboBox::get_marker_list (SPDocument *source)
{
+ std::vector<SPMarker *> ml;
if (source == NULL)
- return NULL;
+ return ml;
- GSList *ml = NULL;
SPDefs *defs = source->getDefs();
if (!defs) {
- return NULL;
+ return ml;
}
for (auto& child: defs->children)
{
if (SP_IS_MARKER(&child)) {
- ml = g_slist_prepend (ml, &child);
+ ml.push_back(SP_MARKER(&child));
}
}
return ml;
@@ -361,7 +346,7 @@ void MarkerComboBox::remove_markers (gboolean history)
/**
* Adds markers in marker_list to the combo
*/
-void MarkerComboBox::add_markers (GSList *marker_list, SPDocument *source, gboolean history)
+void MarkerComboBox::add_markers (std::vector<SPMarker *> const& marker_list, SPDocument *source, gboolean history)
{
// Do this here, outside of loop, to speed up preview generation:
Inkscape::Drawing drawing;
@@ -388,9 +373,9 @@ void MarkerComboBox::add_markers (GSList *marker_list, SPDocument *source, gbool
row[marker_columns.separator] = false;
}
- for (; marker_list != NULL; marker_list = marker_list->next) {
+ for (auto i:marker_list) {
- Inkscape::XML::Node *repr = reinterpret_cast<SPItem *>(marker_list->data)->getRepr();
+ Inkscape::XML::Node *repr = i->getRepr();
gchar const *markid = repr->attribute("inkscape:stockid") ? repr->attribute("inkscape:stockid") : repr->attribute("id");
// generate preview
diff --git a/src/widgets/stroke-marker-selector.h b/src/widgets/stroke-marker-selector.h
index a7ee788b8..24389526c 100644
--- a/src/widgets/stroke-marker-selector.h
+++ b/src/widgets/stroke-marker-selector.h
@@ -9,7 +9,7 @@
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-
+#include <vector>
#include <gtkmm/box.h>
#include <gtkmm/combobox.h>
#include <gtkmm/liststore.h>
@@ -20,6 +20,7 @@
#include "document.h"
#include "inkscape.h"
#include "display/drawing.h"
+#include "sp-marker.h"
namespace Gtk {
class Container;
@@ -80,8 +81,8 @@ private:
void init_combo();
void set_history(Gtk::TreeModel::Row match_row);
void sp_marker_list_from_doc(SPDocument *source, gboolean history);
- GSList *get_marker_list (SPDocument *source);
- void add_markers (GSList *marker_list, SPDocument *source, gboolean history);
+ std::vector <SPMarker*> get_marker_list (SPDocument *source);
+ void add_markers (std::vector<SPMarker *> const& marker_list, SPDocument *source, gboolean history);
void remove_markers (gboolean history);
SPDocument *ink_markers_preview_doc ();
Gtk::Image * create_marker_image(unsigned psize, gchar const *mname,
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index 68e38e8ed..447af9c71 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -795,13 +795,10 @@ void ToolboxFactory::setToolboxDesktop(GtkWidget *toolbox, SPDesktop *desktop)
SPDesktop *old_desktop = static_cast<SPDesktop*>(ptr);
if (old_desktop) {
- GList *children, *iter;
-
- children = gtk_container_get_children(GTK_CONTAINER(toolbox));
- for ( iter = children ; iter ; iter = iter->next ) {
- gtk_container_remove( GTK_CONTAINER(toolbox), GTK_WIDGET(iter->data) );
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(toolbox))->get_children();
+ for ( auto i:children ) {
+ gtk_container_remove( GTK_CONTAINER(toolbox), i->gobj() );
}
- g_list_free(children);
}
g_object_set_data(G_OBJECT(toolbox), "desktop", (gpointer)desktop);
@@ -894,20 +891,20 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
g_message(" is a BOX");
#endif // DUMP_DETAILS
- GList* children = gtk_container_get_children(GTK_CONTAINER(child));
- if (children) {
- for (GList* curr = children; curr; curr = g_list_next(curr)) {
- GtkWidget* child2 = GTK_WIDGET(curr->data);
+ std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(child))->get_children();
+ if (!children.empty()) {
+ for (auto curr:children) {
+ GtkWidget* child2 = curr->gobj();
#if DUMP_DETAILS
GType type3 = G_OBJECT_TYPE(child2);
g_message(" child2 [%s]", g_type_name(type3));
#endif // DUMP_DETAILS
if (GTK_IS_CONTAINER(child2)) {
- GList* children2 = gtk_container_get_children(GTK_CONTAINER(child2));
- if (children2) {
- for (GList* curr2 = children2; curr2; curr2 = g_list_next(curr2)) {
- GtkWidget* child3 = GTK_WIDGET(curr2->data);
+ std::vector<Gtk::Widget*> children2 = Glib::wrap(GTK_CONTAINER(child2))->get_children();
+ if (!children2.empty()) {
+ for (auto curr2:children2) {
+ GtkWidget* child3 = curr2->gobj();
#if DUMP_DETAILS
GType type4 = G_OBJECT_TYPE(child3);
g_message(" child3 [%s]", g_type_name(type4));
@@ -917,7 +914,6 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
gtk_orientable_set_orientation(GTK_ORIENTABLE(childBar), orientation);
}
}
- g_list_free(children2);
}
}
@@ -929,7 +925,6 @@ void ToolboxFactory::setOrientation(GtkWidget* toolbox, GtkOrientation orientati
g_message("need to add dynamic switch");
}
}
- g_list_free(children);
} else {
// The call is being made before the toolbox proper has been setup.
g_object_set_data(G_OBJECT(toolbox), HANDLE_POS_MARK, GINT_TO_POINTER(pos));
diff --git a/src/widgets/toolbox.h b/src/widgets/toolbox.h
index 09178ec2f..afa382e5b 100644
--- a/src/widgets/toolbox.h
+++ b/src/widgets/toolbox.h
@@ -15,7 +15,6 @@
#include <glibmm/ustring.h>
-#include "icon-size.h"
#include "preferences.h"
#define TOOLBAR_SLIDER_HINT "full"