diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index c48b06a9c685b27b28df15ac4c758e679ef1f066..feeddbdff608d4381fb0d2a71d728cd1f25d0db4 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -563,7 +563,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) sp_guideline_set_color(SP_GUIDELINE(item), guide->getColor()); // restore event context's cursor - gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), desktop->event_context->cursor); + Glib::wrap(GTK_WIDGET(desktop->getCanvas()))->get_window()->set_cursor(desktop->event_context->cursor); desktop->guidesMessageContext()->clear(); break; diff --git a/src/desktop.cpp b/src/desktop.cpp index 47c82b6d939d37c5bdadbdabc2f16f09ce66d2ea..dad60832de41bf25b3ba821ef1c5f1894d87b4af 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -1503,12 +1503,11 @@ void SPDesktop::disableInteraction() void SPDesktop::setWaitingCursor() { - GdkDisplay *display = gdk_display_get_default(); - GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(getCanvas())), waiting); - g_object_unref(waiting); + Glib::RefPtr display = Gdk::Display::get_default(); + Glib::RefPtr waiting = Gdk::Cursor::create(display, Gdk::WATCH); + Glib::wrap(GTK_WIDGET(getCanvas()))->get_window()->set_cursor(waiting); // GDK needs the flush for the cursor change to take effect - gdk_flush(); + display->flush(); waiting_cursor = true; } diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index 96008dbebe8a3731f6cb493b16e7ef08abd600de..5c2aa3e39248f7d686c3881614edc10fae837a3d 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -27,6 +27,7 @@ #include "shortcuts.h" #include +#include #include #include @@ -687,9 +688,10 @@ static void read_shortcuts_file(char const *filename, bool const is_user_set) { } else if (!strcmp(mod, "Meta")) { modifiers |= SP_SHORTCUT_META_MASK; } else if (!strcmp(mod, "Primary")) { + GdkKeymap* keymap = Gdk::Display::get_default()->get_keymap(); GdkModifierType mod = - gdk_keymap_get_modifier_mask (gdk_keymap_get_default(), GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); - gdk_keymap_add_virtual_modifiers(gdk_keymap_get_default(), &mod); + gdk_keymap_get_modifier_mask (keymap, GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); + gdk_keymap_add_virtual_modifiers(keymap, &mod); if (mod & GDK_CONTROL_MASK) modifiers |= SP_SHORTCUT_CONTROL_MASK; else if (mod & GDK_META_MASK) diff --git a/src/ui/tool/event-utils.cpp b/src/ui/tool/event-utils.cpp index 6b8d5f0dc9b15084336677e9acf1788896d028e8..7793c9d4d943e2ff8313b963205a8f04512311cb 100644 --- a/src/ui/tool/event-utils.cpp +++ b/src/ui/tool/event-utils.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include "display/sp-canvas.h" #include "ui/tool/event-utils.h" @@ -22,7 +23,7 @@ guint shortcut_key(GdkEventKey const &event) { guint shortcut_key = 0; gdk_keymap_translate_keyboard_state( - gdk_keymap_get_for_display(gdk_display_get_default()), + Gdk::Display::get_default()->get_keymap(), event.hardware_keycode, (GdkModifierType) event.state, 0 /*event->key.group*/, diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index ddc6e2881af298ca78b6f26bed808bab6fe4d5c0..b412812b690da46de352ddc4fb27f40b32c20624 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -344,9 +345,9 @@ bool SelectTool::item_handler(SPItem* item, GdkEvent* event) { } case GDK_LEAVE_NOTIFY: if (!desktop->isWaitingCursor() && !this->dragging) { - GdkWindow* window = gtk_widget_get_window (GTK_WIDGET (desktop->getCanvas())); + Glib::RefPtr window = Glib::wrap(GTK_WIDGET(desktop->getCanvas()))->get_window(); - gdk_window_set_cursor(window, this->cursor); + window->set_cursor(this->cursor); } break; diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 9f9a155c2cf4c05c12bf327a48a802e25e226a27..ce319009b747aaae3b31a7bba694aa2d898abd61 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -19,6 +19,7 @@ #endif #include +#include #include #include "shortcuts.h" @@ -123,11 +124,6 @@ ToolBase::~ToolBase() { delete this->message_context; } - if (this->cursor != NULL) { - g_object_unref(this->cursor); - this->cursor = NULL; - } - if (this->desktop) { this->desktop = NULL; } @@ -161,27 +157,23 @@ void ToolBase::sp_event_context_set_cursor(GdkCursorType cursor_type) { * Recreates and draws cursor on desktop related to ToolBase. */ void ToolBase::sp_event_context_update_cursor() { - GtkWidget *w = GTK_WIDGET(this->desktop->getCanvas()); - if (gtk_widget_get_window (w)) { + Gtk::Widget* w = Glib::wrap(GTK_WIDGET(desktop->getCanvas())); + if (w->get_window()) { if (this->cursor_shape) { - if(this->cursor) { - g_object_unref(this->cursor); - } - bool fillHasColor=false, strokeHasColor=false; guint32 fillColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), true, &fillHasColor); guint32 strokeColor = sp_desktop_get_color_tool(this->desktop, this->getPrefsPath(), false, &strokeHasColor); double fillOpacity = fillHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), true) : 0; double strokeOpacity = strokeHasColor ? sp_desktop_get_opacity_tool(this->desktop, this->getPrefsPath(), false) : 0; - this->cursor = sp_cursor_from_xpm( + this->cursor = Glib::wrap(sp_cursor_from_xpm( this->cursor_shape, SP_RGBA32_C_COMPOSE(fillColor, fillOpacity), SP_RGBA32_C_COMPOSE(strokeColor, strokeOpacity) - ); + )); } - gdk_window_set_cursor(gtk_widget_get_window (w), this->cursor); - gdk_flush(); + w->get_window()->set_cursor(cursor); + w->get_display()->flush(); } this->desktop->waiting_cursor = false; } @@ -546,8 +538,8 @@ bool ToolBase::root_handler(GdkEvent* event) { if (panning_cursor == 1) { panning_cursor = 0; - GtkWidget *w = GTK_WIDGET(this->desktop->getCanvas()); - gdk_window_set_cursor(gtk_widget_get_window (w), this->cursor); + Gtk::Widget* w = Glib::wrap(GTK_WIDGET(desktop->getCanvas())); + w->get_window()->set_cursor(cursor); } if (within_tolerance && (panning || zoom_rb)) { @@ -755,8 +747,8 @@ bool ToolBase::root_handler(GdkEvent* event) { if (panning_cursor == 1) { panning_cursor = 0; - GtkWidget *w = GTK_WIDGET(this->desktop->getCanvas()); - gdk_window_set_cursor(gtk_widget_get_window (w), this->cursor); + Gtk::Widget* w = Glib::wrap(GTK_WIDGET(desktop->getCanvas())); + w->get_window()->set_cursor(cursor); } switch (get_latin_keyval(&event->key)) { @@ -1179,7 +1171,7 @@ static void update_latin_keys_group() { gint n_keys; latin_keys_group_valid = FALSE; - if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(), GDK_KEY_a, &keys, &n_keys)) { + if (gdk_keymap_get_entries_for_keyval(Gdk::Display::get_default()->get_keymap(), GDK_KEY_a, &keys, &n_keys)) { for (gint i = 0; i < n_keys; i++) { if (!latin_keys_group_valid || keys[i].group < latin_keys_group) { latin_keys_group = keys[i].group; @@ -1194,7 +1186,7 @@ static void update_latin_keys_group() { * Initialize Latin keys group handling. */ void init_latin_keys_group() { - g_signal_connect(G_OBJECT(gdk_keymap_get_default()), + g_signal_connect(G_OBJECT(Gdk::Display::get_default()->get_keymap()), "keys-changed", G_CALLBACK(update_latin_keys_group), NULL); update_latin_keys_group(); } @@ -1211,7 +1203,7 @@ guint get_latin_keyval(GdkEventKey const *event, guint *consumed_modifiers /*= N gint group = latin_keys_group_valid ? latin_keys_group : event->group; gdk_keymap_translate_keyboard_state( - gdk_keymap_get_for_display(gdk_display_get_default()), + Gdk::Display::get_default()->get_keymap(), event->hardware_keycode, (GdkModifierType) event->state, group, &keyval, NULL, NULL, &modifiers); diff --git a/src/ui/tools/tool-base.h b/src/ui/tools/tool-base.h index 7185b787ee7e190c2950561d81f8a7dc46fa0016..e7b0d015511ba56a159adc7f3c516a746b172369 100644 --- a/src/ui/tools/tool-base.h +++ b/src/ui/tools/tool-base.h @@ -18,6 +18,7 @@ #include "knotholder.h" #include <2geom/point.h> #include +#include #include #include @@ -150,7 +151,7 @@ public: virtual ~ToolBase(); Inkscape::Preferences::Observer *pref_observer; - GdkCursor *cursor; + Glib::RefPtr cursor; gint xp, yp; ///< where drag started gint tolerance; diff --git a/src/ui/widget/font-selector-toolbar.cpp b/src/ui/widget/font-selector-toolbar.cpp index c997e09206177f4cf685f6468ad25602784e7a9a..4f951fa624684ea0c4325b61425ac9d8539846e7 100644 --- a/src/ui/widget/font-selector-toolbar.cpp +++ b/src/ui/widget/font-selector-toolbar.cpp @@ -13,6 +13,7 @@ #include #include +#include #include "font-selector-toolbar.h" @@ -259,7 +260,7 @@ FontSelectorToolbar::on_key_press_event (GdkEventKey* key_event) bool consumed = false; unsigned int key = 0; - gdk_keymap_translate_keyboard_state( gdk_keymap_get_for_display( gdk_display_get_default() ), + gdk_keymap_translate_keyboard_state( Gdk::Display::get_default()->get_keymap(), key_event->hardware_keycode, (GdkModifierType)key_event->state, 0, &key, 0, 0, 0 ); diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 9b28e1424dcee6c7d2a53ea0ec678e444a7561ad..7777b291fac9a6d00adba2937136dca20e050f81 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -28,6 +28,9 @@ #include #include +#include +#include + #include <2geom/rect.h> #include "attributes.h" @@ -237,20 +240,21 @@ SPDesktopWidget::setMessage (Inkscape::MessageType type, const gchar *message) Geom::Point SPDesktopWidget::window_get_pointer() { - gint x,y; - auto window = gtk_widget_get_window(GTK_WIDGET(canvas)); - auto display = gdk_window_get_display(window); + int x, y; + auto window = Glib::wrap(GTK_WIDGET(canvas))->get_window(); + auto display = window->get_display(); #if GTK_CHECK_VERSION(3,20,0) - auto seat = gdk_display_get_default_seat(display); - auto device = gdk_seat_get_pointer(seat); + auto seat = display->get_default_seat(); + auto device = seat->get_pointer(); #else - auto dm = gdk_display_get_device_manager(display); - auto device = gdk_device_manager_get_client_pointer(dm); + auto dm = display->get_device_manager(); + auto device = dm->get_client_pointer(); #endif - gdk_window_get_device_position(window, device, &x, &y, NULL); + Gdk::ModifierType m; + window->get_device_position(device, x, y, m); - return Geom::Point(x,y); + return Geom::Point(x, y); } static GTimer *overallTimer = 0; @@ -1080,38 +1084,28 @@ SPDesktopWidget::shutdown() if (INKSCAPE.sole_desktop_for_document(*desktop)) { SPDocument *doc = desktop->doc(); if (doc->isModifiedSinceSave()) { - GtkWidget *dialog; - - /** \todo - * FIXME !!! obviously this will have problems if the document - * name contains markup characters - */ - dialog = gtk_message_dialog_new_with_markup( - GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(this))), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_NONE, + Gtk::Window *toplevel_window = Glib::wrap(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(this)))); + Glib::ustring message = g_markup_printf_escaped( _("Save changes to document \"%s\" before closing?\n\n" "If you close without saving, your changes will be discarded."), doc->getName()); + Gtk::MessageDialog dialog = Gtk::MessageDialog(*toplevel_window, message, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); + dialog.property_destroy_with_parent() = true; + // fix for bug lp:168809 - GtkWidget *ma = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog)); - std::vector ma_labels = Glib::wrap(GTK_CONTAINER(ma))->get_children(); - GtkWidget *label = GTK_WIDGET(ma_labels[0]->gobj()); - gtk_widget_set_can_focus(label, FALSE); + Gtk::Container *ma = dialog.get_message_area(); + std::vector ma_labels = ma->get_children(); + ma_labels[0]->set_can_focus(false); - GtkWidget *close_button; - close_button = gtk_button_new_with_mnemonic(_("Close _without saving")); - gtk_widget_show(close_button); - gtk_dialog_add_action_widget(GTK_DIALOG(dialog), close_button, GTK_RESPONSE_NO); + Gtk::Button close_button(_("Close _without saving"), true); + close_button.show(); + dialog.add_action_widget(close_button, Gtk::RESPONSE_NO); - gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); - gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Save"), GTK_RESPONSE_YES); - gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES); + dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); + dialog.add_button(_("_Save"), Gtk::RESPONSE_YES); + dialog.set_default_response(Gtk::RESPONSE_YES); - gint response; - response = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); + gint response = dialog.run(); switch (response) { case GTK_RESPONSE_YES: @@ -1139,41 +1133,32 @@ SPDesktopWidget::shutdown() /* Code to check data loss */ bool allow_data_loss = FALSE; while (doc->getReprRoot()->attribute("inkscape:dataloss") != NULL && allow_data_loss == FALSE) { - GtkWidget *dialog; - - /** \todo - * FIXME !!! obviously this will have problems if the document - * name contains markup characters - */ - dialog = gtk_message_dialog_new_with_markup( - GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(this))), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_NONE, + Gtk::Window *toplevel_window = Glib::wrap(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(this)))); + Glib::ustring message = g_markup_printf_escaped( _("The file \"%s\" was saved with a format that may cause data loss!\n\n" "Do you want to save this file as Inkscape SVG?"), doc->getName() ? doc->getName() : "Unnamed"); + Gtk::MessageDialog dialog = Gtk::MessageDialog(*toplevel_window, message, true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE); + dialog.property_destroy_with_parent() = true; + // fix for bug lp:168809 - GtkWidget *ma = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog)); - std::vector 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; - close_button = gtk_button_new_with_mnemonic(_("Close _without saving")); - gtk_widget_show(close_button); - GtkWidget *save_button = gtk_button_new_with_mnemonic(_("_Save as Inkscape SVG")); - gtk_widget_set_can_default(save_button, TRUE); - gtk_widget_show(save_button); - gtk_dialog_add_action_widget(GTK_DIALOG(dialog), close_button, GTK_RESPONSE_NO); - - gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Cancel"), GTK_RESPONSE_CANCEL); - gtk_dialog_add_action_widget(GTK_DIALOG(dialog), save_button, GTK_RESPONSE_YES); - gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES); - - gint response; - response = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); + Gtk::Container *ma = dialog.get_message_area(); + std::vector ma_labels = ma->get_children(); + ma_labels[0]->set_can_focus(false); + + Gtk::Button close_button(_("Close _without saving"), true); + close_button.show(); + dialog.add_action_widget(close_button, Gtk::RESPONSE_NO); + + dialog.add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); + + Gtk::Button save_button(_("_Save as Inkscape SVG"), true); + save_button.set_can_default(true); + save_button.show(); + dialog.add_action_widget(save_button, Gtk::RESPONSE_YES); + dialog.set_default_response(Gtk::RESPONSE_YES); + + gint response = dialog.run(); switch (response) { case GTK_RESPONSE_YES: @@ -1366,19 +1351,14 @@ SPDesktopWidget::presentWindow() bool SPDesktopWidget::showInfoDialog( Glib::ustring const &message ) { bool result = false; - GtkWindow *window = GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET(this) ) ); + Gtk::Window *window = Glib::wrap(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(this)))); if (window) { - GtkWidget *dialog = gtk_message_dialog_new( - window, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - "%s", message.c_str()); - gtk_widget_set_name(dialog, "InfoDialog"); - gtk_window_set_title( GTK_WINDOW(dialog), _("Note:")); // probably want to take this as a parameter. - gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); + Gtk::MessageDialog dialog(*window, message, false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK); + dialog.property_destroy_with_parent() = true; + dialog.set_name("InfoDialog"); + dialog.set_title(_("Note:")); // probably want to take this as a parameter. + dialog.run(); } return result; } diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 318e6ced20b729902907d3b69963de971ee797de..e922bcc0054c5ac28bef9f2e69ed57d275ee1e8a 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include "widgets/ege-adjustment-action.h" #include "ui/icon-names.h" @@ -1014,7 +1015,7 @@ gboolean keypress_cb( GtkWidget *widget, GdkEventKey *event, gpointer data ) gboolean wasConsumed = FALSE; /* default to report event not consumed */ EgeAdjustmentAction* action = EGE_ADJUSTMENT_ACTION(data); guint key = 0; - gdk_keymap_translate_keyboard_state( gdk_keymap_get_for_display( gdk_display_get_default() ), + gdk_keymap_translate_keyboard_state( Gdk::Display::get_default()->get_keymap(), event->hardware_keycode, (GdkModifierType)event->state, 0, &key, 0, 0, 0 ); diff --git a/src/widgets/ink-comboboxentry-action.cpp b/src/widgets/ink-comboboxentry-action.cpp index 2fecb06a4df9225aba161465ab3294e28723b7ba..133ae7878af952a656fdabf9b808c7372a0c5a05 100644 --- a/src/widgets/ink-comboboxentry-action.cpp +++ b/src/widgets/ink-comboboxentry-action.cpp @@ -29,6 +29,7 @@ #include #include +#include #include "widgets/ink-comboboxentry-action.h" #include "ui/icon-names.h" @@ -921,7 +922,7 @@ gboolean keypress_cb( GtkWidget * /*widget*/, GdkEventKey *event, gpointer data gboolean wasConsumed = FALSE; /* default to report event not consumed */ guint key = 0; Ink_ComboBoxEntry_Action* action = INK_COMBOBOXENTRY_ACTION( data ); - gdk_keymap_translate_keyboard_state( gdk_keymap_get_for_display( gdk_display_get_default() ), + gdk_keymap_translate_keyboard_state( Gdk::Display::get_default()->get_keymap(), event->hardware_keycode, (GdkModifierType)event->state, 0, &key, 0, 0, 0 );