diff options
| author | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-09-30 00:25:47 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-09-30 00:25:47 +0000 |
| commit | 4ced018164553d115a24947ec74dace836e99732 (patch) | |
| tree | cb77b1f59c161da5c1dcde9edaaff9e046865696 | |
| parent | remove helper/gnome-utils.* (diff) | |
| download | inkscape-4ced018164553d115a24947ec74dace836e99732.tar.gz inkscape-4ced018164553d115a24947ec74dace836e99732.zip | |
Hunted every GList to the last (except in libnrtype and libcroco)
| -rw-r--r-- | src/live_effects/parameter/togglebutton.cpp | 16 | ||||
| -rw-r--r-- | src/ui/dialog/clonetiler.cpp | 7 | ||||
| -rw-r--r-- | src/ui/dialog/inkscape-preferences.cpp | 18 | ||||
| -rw-r--r-- | src/ui/interface.cpp | 10 | ||||
| -rw-r--r-- | src/ui/widget/page-sizer.cpp | 14 | ||||
| -rw-r--r-- | src/ui/widget/page-sizer.h | 2 | ||||
| -rw-r--r-- | src/widgets/desktop-widget.cpp | 41 | ||||
| -rw-r--r-- | src/widgets/ege-adjustment-action.cpp | 114 | ||||
| -rw-r--r-- | src/widgets/ege-output-action.cpp | 23 | ||||
| -rw-r--r-- | src/widgets/ege-select-one-action.cpp | 29 | ||||
| -rw-r--r-- | src/widgets/pencil-toolbar.cpp | 34 | ||||
| -rw-r--r-- | src/widgets/spw-utilities.cpp | 12 | ||||
| -rw-r--r-- | src/widgets/toolbox.cpp | 27 |
13 files changed, 164 insertions, 183 deletions
diff --git a/src/live_effects/parameter/togglebutton.cpp b/src/live_effects/parameter/togglebutton.cpp index 16b8f9067..e26884d6a 100644 --- a/src/live_effects/parameter/togglebutton.cpp +++ b/src/live_effects/parameter/togglebutton.cpp @@ -147,21 +147,25 @@ ToggleButtonParam::refresh_button() if(!box_button){ return; } - GList * childs = gtk_container_get_children(GTK_CONTAINER(box_button->gobj())); - guint total_widgets = g_list_length (childs); + std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(box_button))->get_children(); if (!param_label.empty()) { + Gtk::Label *lab = dynamic_cast<Gtk::Label*>(children[children.size()-1]); + if (!lab) return; if(value || inactive_label.empty()){ - gtk_label_set_text(GTK_LABEL(g_list_nth_data(childs, total_widgets-1)), param_label.c_str()); + lab->set_text(param_label.c_str()); }else{ - gtk_label_set_text(GTK_LABEL(g_list_nth_data(childs, total_widgets-1)), inactive_label.c_str()); + lab->set_text(inactive_label.c_str()); } } if ( _icon_active ) { GdkPixbuf * icon_pixbuf = NULL; + Gtk::Image *im = dynamic_cast<Gtk::Image*>(children[0]); + Gtk::IconSize is(_icon_size); + if (!im) return; if(!value){ - gtk_image_set_from_icon_name (GTK_IMAGE(g_list_nth_data(childs, 0)), _icon_inactive, _icon_size); + im->set_from_icon_name(_icon_inactive, is); } else { - gtk_image_set_from_icon_name (GTK_IMAGE(g_list_nth_data(childs, 0)), _icon_active, _icon_size); + im->set_from_icon_name(_icon_active, is); } } } diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index ad13ed8c4..5c9b31fb1 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -2639,11 +2639,10 @@ void CloneTiler::reset_recursive(GtkWidget *w) } if (GTK_IS_CONTAINER(w)) { - GList *ch = gtk_container_get_children (GTK_CONTAINER(w)); - for (GList *i = ch; i != NULL; i = i->next) { - reset_recursive (GTK_WIDGET(i->data)); + std::vector<Gtk::Widget*> c = Glib::wrap(GTK_CONTAINER(w))->get_children(); + for ( auto i : c ) { + reset_recursive(i->gobj()); } - g_list_free (ch); } } diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 13729cf0f..d87a3d94a 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -22,6 +22,8 @@ #include <glibmm/miscutils.h> #include <glibmm/markup.h> #include <gtkmm/main.h> +#include <gtkmm/recentmanager.h> +#include <gtkmm/recentinfo.h> #include "preferences.h" #include "verbs.h" @@ -2057,21 +2059,15 @@ bool InkscapePreferences::PresentPage(const Gtk::TreeModel::iterator& iter) void InkscapePreferences::on_reset_open_recent_clicked() { - GtkRecentManager* manager = gtk_recent_manager_get_default(); - GList* recent_list = gtk_recent_manager_get_items(manager); - GList* element; - GError* error; + Glib::RefPtr<Gtk::RecentManager> manager = Gtk::RecentManager::get_default(); + std::vector< Glib::RefPtr< Gtk::RecentInfo > > recent_list = manager->get_items(); //Remove only elements that were added by Inkscape - for (element = g_list_first(recent_list); element; element = g_list_next(element)){ - error = NULL; - GtkRecentInfo* info = (GtkRecentInfo*) element->data; - if (gtk_recent_info_has_application(info, g_get_prgname())){ - gtk_recent_manager_remove_item(manager, gtk_recent_info_get_uri(info), &error); + for (auto e : recent_list) { + if (e->has_application(g_get_prgname())) { + manager->remove_item(e->get_uri()); } - gtk_recent_info_unref (info); } - g_list_free(recent_list); } void InkscapePreferences::on_pagelist_selection_changed() diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index 93e91b8f8..7a9b92378 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -1436,14 +1436,12 @@ sp_ui_menu_item_set_name(GtkWidget *data, Glib::ustring const &name) if (GTK_IS_LABEL(child)) { gtk_label_set_markup_with_mnemonic(GTK_LABEL (child), name.c_str()); } else if (GTK_IS_BOX(child)) { - GList *children = gtk_container_get_children(GTK_CONTAINER(child)); + std::vector<Gtk::Widget*> children = Glib::wrap(GTK_CONTAINER(child))->get_children(); // Label is second child in list - GtkWidget *label = GTK_WIDGET(children->next->data); - - gtk_label_set_markup_with_mnemonic( - GTK_LABEL (label), - name.c_str()); + Gtk::Label *label = dynamic_cast<Gtk::Label*>(children[1]); + if(!label) return; + label->set_markup_with_mnemonic(name); }//else sp_ui_menu_append_item_from_verb has been modified and can set //a menu item in yet another way... } diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp index eb0e45f14..7427ad4e2 100644 --- a/src/ui/widget/page-sizer.cpp +++ b/src/ui/widget/page-sizer.cpp @@ -355,13 +355,12 @@ PageSizer::PageSizer(Registry & _wr) _fitPageMarginExpander.set_vexpand(); _customDimTable.attach(_fitPageMarginExpander, 0, 2, 2, 1); - _dimTabOrderGList = NULL; - _dimTabOrderGList = g_list_append(_dimTabOrderGList, _dimensionWidth.gobj()); - _dimTabOrderGList = g_list_append(_dimTabOrderGList, _dimensionHeight.gobj()); - _dimTabOrderGList = g_list_append(_dimTabOrderGList, _dimensionUnits.gobj()); - _dimTabOrderGList = g_list_append(_dimTabOrderGList, _fitPageMarginExpander.gobj()); - Glib::ListHandle<Widget *> dimFocusChain(_dimTabOrderGList, Glib::OWNERSHIP_NONE); - _customDimTable.set_focus_chain(dimFocusChain); + _dimTabOrderList.clear(); + _dimTabOrderList.push_back(&_dimensionWidth); + _dimTabOrderList.push_back(&_dimensionHeight); + _dimTabOrderList.push_back(&_dimensionUnits); + _dimTabOrderList.push_back(&_fitPageMarginExpander); + _customDimTable.set_focus_chain(_dimTabOrderList); //## Set up fit page expander _fitPageMarginExpander.set_use_underline(); @@ -454,7 +453,6 @@ PageSizer::PageSizer(Registry & _wr) */ PageSizer::~PageSizer() { - g_list_free(_dimTabOrderGList); } diff --git a/src/ui/widget/page-sizer.h b/src/ui/widget/page-sizer.h index f84f96782..329ecfc6d 100644 --- a/src/ui/widget/page-sizer.h +++ b/src/ui/widget/page-sizer.h @@ -220,7 +220,7 @@ protected: RegisteredUnitMenu _dimensionUnits; RegisteredScalarUnit _dimensionWidth; RegisteredScalarUnit _dimensionHeight; - GList * _dimTabOrderGList; + std::vector<Widget*> _dimTabOrderList; //### Fit Page options Gtk::Expander _fitPageMarginExpander; 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..09a4a542b 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -41,7 +41,10 @@ #include <cmath> #include <string.h> +#include <vector> +#include <algorithm> +#include <gtkmm/container.h> #include <gdk/gdkkeysyms.h> #include "icon-size.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 ); } @@ -624,10 +630,9 @@ static void create_single_menu_item( GCallback toggleCb, int val, GtkWidget* men { 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,7 +641,6 @@ 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, @@ -658,7 +662,8 @@ 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, @@ -667,25 +672,21 @@ static GList* flush_explicit_items( GList* descriptions, GSList** group, gdouble num ) { - GList* cur = descriptions; - - if ( cur ) { - gdouble valUpper = num + act->private_data->epsilon; - gdouble valLower = num - act->private_data->epsilon; + if(pos >= descriptions.size() || pos < 0) return pos; + EgeAdjustmentDescr* descr = descriptions[pos]; - EgeAdjustmentDescr* descr = (EgeAdjustmentDescr*)cur->data; - - 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 ) @@ -694,8 +695,8 @@ static GtkWidget* create_popup_number_menu( EgeAdjustmentAction* act ) GSList* group = 0; 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 +712,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 +966,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/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp index d1b6a43bb..ac186f224 100644 --- a/src/widgets/pencil-toolbar.cpp +++ b/src/widgets/pencil-toolbar.cpp @@ -197,41 +197,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/spw-utilities.cpp b/src/widgets/spw-utilities.cpp index 68fb78327..29e86b885 100644 --- a/src/widgets/spw-utilities.cpp +++ b/src/widgets/spw-utilities.cpp @@ -249,9 +249,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 +272,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/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)); |
