From f09962028d017896279b717a6621a4de772d1b4f Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sat, 14 Apr 2018 21:18:07 +0200 Subject: Make SPDesktopWidget::window_get_pointer() use gdkmm. --- src/widgets/desktop-widget.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 9b28e1424..56b6f45b9 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; -- cgit v1.2.3 From 216266f2ad3b8ff5d5afd3e1d0dc3e20308e01d6 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Tue, 12 Jun 2018 23:21:23 +0200 Subject: Replace all deprecated gdk_keymap_get_default() with Gdk::Display::get_default()->get_keymap(). --- src/widgets/ege-adjustment-action.cpp | 3 ++- src/widgets/ink-comboboxentry-action.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 318e6ced2..e922bcc00 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 2fecb06a4..133ae7878 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 ); -- cgit v1.2.3 From 5a2d79b70338d0a075c08f2e330f315e6cec5c57 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Wed, 13 Jun 2018 02:36:33 +0200 Subject: Make info dialog use gtkmm. --- src/widgets/desktop-widget.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 56b6f45b9..9f9a62af3 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -1370,19 +1370,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; } -- cgit v1.2.3 From 37cae3246f318b7614b8670b93efc444eff715c4 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Wed, 13 Jun 2018 02:36:19 +0200 Subject: Make shutdown dialogs use gtkmm. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes a FIXME, by using g_markup_printf_escaped() we can make sure the filename won’t conflict with Pango markup and be wrongly interpreted. --- src/widgets/desktop-widget.cpp | 93 +++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 56 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 9f9a62af3..7777b291f 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -1084,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: @@ -1143,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: -- cgit v1.2.3