diff options
Diffstat (limited to 'src/app-window.vala')
-rw-r--r-- | src/app-window.vala | 420 |
1 files changed, 178 insertions, 242 deletions
diff --git a/src/app-window.vala b/src/app-window.vala index 67c882c..efcaaf2 100644 --- a/src/app-window.vala +++ b/src/app-window.vala @@ -18,28 +18,25 @@ public class AppWindow : Gtk.ApplicationWindow { private const GLib.ActionEntry[] action_entries = { - { "new_document", new_document_activate_cb }, - { "reorder", reorder_document_activate_cb }, + { "new_document", new_document_cb }, + { "reorder", reorder_document_cb }, { "save", save_document_activate_cb }, - { "email", email_document_activate_cb }, - { "print", print_document_activate_cb }, - { "preferences", preferences_activate_cb }, - { "help", help_contents_activate_cb }, - { "about", about_activate_cb }, - { "quit", quit_activate_cb } + { "email", email_document_cb }, + { "print", print_document_cb }, + { "preferences", preferences_cb }, + { "help", help_cb }, + { "about", about_cb }, + { "quit", quit_cb } }; private Settings settings; + private ScanType scan_type = ScanType.SINGLE; private PreferencesDialog preferences_dialog; [GtkChild] private Gtk.HeaderBar header_bar; [GtkChild] - private Gtk.MenuBar menubar; - [GtkChild] - private Gtk.Toolbar toolbar; - [GtkChild] private Gtk.Menu page_menu; [GtkChild] private Gtk.Stack stack; @@ -76,22 +73,10 @@ public class AppWindow : Gtk.ApplicationWindow [GtkChild] private Gtk.MenuItem crop_rotate_menuitem; [GtkChild] - private Gtk.MenuItem save_menuitem; - [GtkChild] - private Gtk.MenuItem email_menuitem; - [GtkChild] - private Gtk.MenuItem print_menuitem; - [GtkChild] private Gtk.MenuItem copy_to_clipboard_menuitem; [GtkChild] private Gtk.Button save_button; [GtkChild] - private Gtk.ToolButton save_toolbutton; - [GtkChild] - private Gtk.MenuItem stop_scan_menuitem; - [GtkChild] - private Gtk.ToolButton stop_toolbutton; - [GtkChild] private Gtk.Button stop_button; [GtkChild] private Gtk.Button scan_button; @@ -101,25 +86,24 @@ public class AppWindow : Gtk.ApplicationWindow private Gtk.Button delete_button; [GtkChild] - private Gtk.RadioMenuItem text_button_menuitem; + private Gtk.Image scan_options_image; [GtkChild] - private Gtk.RadioMenuItem text_button_hb_menuitem; + private Gtk.RadioButton scan_single_radio; [GtkChild] - private Gtk.RadioMenuItem text_menuitem; + private Gtk.RadioButton scan_adf_radio; [GtkChild] - private Gtk.RadioMenuItem photo_button_menuitem; + private Gtk.RadioButton scan_batch_radio; [GtkChild] - private Gtk.RadioMenuItem photo_button_hb_menuitem; + private Gtk.RadioButton text_radio; [GtkChild] - private Gtk.RadioMenuItem photo_menuitem; + private Gtk.RadioButton photo_radio; [GtkChild] private Gtk.MenuButton menu_button; + private bool have_devices = false; private string? missing_driver = null; - private Gtk.FileChooserDialog? save_dialog; - public Book book { get; private set; } private bool book_needs_saving; private string? book_uri = null; @@ -153,8 +137,6 @@ public class AppWindow : Gtk.ApplicationWindow stack.set_visible_child_name ("document"); page_delete_menuitem.sensitive = !value; delete_button.sensitive = !value; - stop_scan_menuitem.sensitive = value; - stop_toolbutton.sensitive = value; scan_button.visible = !value; stop_button.visible = value; } @@ -256,20 +238,22 @@ public class AppWindow : Gtk.ApplicationWindow password = authorize_dialog.get_password (); } - public void set_scan_devices (List<ScanDevice> devices, string? missing_driver = null) + private void update_scan_status () { - this.missing_driver = missing_driver; - - preferences_dialog.set_scan_devices (devices); - - if (devices != null) + if (!have_devices) + { + status_primary_label.set_text (/* Label shown when searching for scanners */ + _("Searching for Scanners…")); + status_secondary_label.visible = false; + } + else if (selected_device != null) { status_primary_label.set_text (/* Label shown when detected a scanner */ _("Ready to Scan")); status_secondary_label.set_text (preferences_dialog.get_selected_device_label ()); status_secondary_label.visible = true; } - else if (missing_driver != null) + else if (this.missing_driver != null) { status_primary_label.set_text (/* Warning displayed when no drivers are installed but a compatible scanner is detected */ _("Additional software needed")); @@ -287,7 +271,15 @@ public class AppWindow : Gtk.ApplicationWindow } } - private string choose_file_location () + public void set_scan_devices (List<ScanDevice> devices, string? missing_driver = null) + { + have_devices = true; + this.missing_driver = missing_driver; + preferences_dialog.set_scan_devices (devices); + update_scan_status (); + } + + private string? choose_file_location () { /* Get directory to save to */ string? directory = null; @@ -296,13 +288,12 @@ public class AppWindow : Gtk.ApplicationWindow if (directory == null || directory == "") directory = Environment.get_user_special_dir (UserDirectory.DOCUMENTS); - save_dialog = new Gtk.FileChooserDialog (/* Save dialog: Dialog title */ - _("Save As…"), - this, - Gtk.FileChooserAction.SAVE, - _("_Cancel"), Gtk.ResponseType.CANCEL, - _("_Save"), Gtk.ResponseType.ACCEPT, - null); + var save_dialog = new Gtk.FileChooserNative (/* Save dialog: Dialog title */ + _("Save As…"), + this, + Gtk.FileChooserAction.SAVE, + _("_Save"), + _("_Cancel")); save_dialog.local_only = false; if (book_uri != null) save_dialog.set_uri (book_uri); @@ -365,18 +356,18 @@ public class AppWindow : Gtk.ApplicationWindow /* Label in save dialog beside combo box to choose file format (PDF, JPEG, PNG, WEBP) */ var label = new Gtk.Label (_("File format:")); label.visible = true; - box.pack_start (label, false, false, 0); + box.add (label); var file_type_combo = new Gtk.ComboBox.with_model (file_type_store); file_type_combo.visible = true; var renderer = new Gtk.CellRendererText (); file_type_combo.pack_start (renderer, true); file_type_combo.add_attribute (renderer, "text", 0); - box.pack_start (file_type_combo, false, true, 0); + box.add (file_type_combo); /* Label in save dialog beside compression slider */ var quality_label = new Gtk.Label (_("Compression:")); - box.pack_start (quality_label, false, false, 0); + box.add (quality_label); var quality_adjustment = new Gtk.Adjustment (75, 0, 100, 1, 10, 0); var quality_scale = new Gtk.Scale (Gtk.Orientation.HORIZONTAL, quality_adjustment); @@ -388,7 +379,7 @@ public class AppWindow : Gtk.ApplicationWindow quality_scale.add_mark (100, Gtk.PositionType.BOTTOM, null); quality_adjustment.value = settings.get_int ("jpeg-quality"); quality_adjustment.value_changed.connect (() => { settings.set_int ("jpeg-quality", (int) quality_adjustment.value); }); - box.pack_start (quality_scale, false, false, 0); + box.add (quality_scale); file_type_combo.set_active (0); file_type_combo.changed.connect (() => @@ -412,12 +403,14 @@ public class AppWindow : Gtk.ApplicationWindow quality_scale.visible = quality_label.visible = (extension != ".png"); }); - string? uri = null; while (true) { var response = save_dialog.run (); if (response != Gtk.ResponseType.ACCEPT) - break; + { + save_dialog.destroy (); + return null; + } var extension = ""; Gtk.TreeIter i; @@ -431,7 +424,7 @@ public class AppWindow : Gtk.ApplicationWindow if (extension_index < 0) path += extension; - uri = File.new_for_path (path).get_uri (); + var uri = File.new_for_path (path).get_uri (); /* Check the file(s) don't already exist */ var files = new List<File> (); @@ -448,16 +441,14 @@ public class AppWindow : Gtk.ApplicationWindow else files.append (File.new_for_uri (uri)); - if (check_overwrite (save_dialog, files)) - break; + if (check_overwrite (save_dialog.transient_for, files)) + { + settings.set_string ("save-directory", save_dialog.get_current_folder ()); + save_dialog.destroy (); + return uri; + } } - settings.set_string ("save-directory", save_dialog.get_current_folder ()); - - save_dialog.destroy (); - save_dialog = null; - - return uri; } private bool check_overwrite (Gtk.Window parent, List<File> files) @@ -514,6 +505,7 @@ public class AppWindow : Gtk.ApplicationWindow var progress_bar = new CancellableProgressBar (_("Saving"), cancellable); action_bar.pack_end (progress_bar); progress_bar.visible = true; + save_button.sensitive = false; try { yield book.save_async (format, settings.get_int ("jpeg-quality"), file, (fraction) => @@ -523,6 +515,7 @@ public class AppWindow : Gtk.ApplicationWindow } catch (Error e) { + save_button.sensitive = true; progress_bar.destroy (); warning ("Error saving file: %s", e.message); show_error_dialog (/* Title of error dialog when save failed */ @@ -530,6 +523,7 @@ public class AppWindow : Gtk.ApplicationWindow e.message); return false; } + save_button.sensitive = true; progress_bar.destroy_with_delay (500); book_needs_saving = false; @@ -576,14 +570,9 @@ public class AppWindow : Gtk.ApplicationWindow book.clear (); book_needs_saving = false; book_uri = null; - save_menuitem.sensitive = false; - email_menuitem.sensitive = false; - print_menuitem.sensitive = false; save_button.sensitive = false; - save_toolbutton.sensitive = false; copy_to_clipboard_menuitem.sensitive = false; - status_primary_label.set_text (/* Label shown when detected a scanner */ - _("Ready to Scan")); + update_scan_status (); stack.set_visible_child_name ("startup"); } @@ -616,15 +605,51 @@ public class AppWindow : Gtk.ApplicationWindow return false; } - [GtkCallback] - private void new_button_clicked_cb (Gtk.Widget widget) + private void new_document_cb () { new_document(); } - public void new_document_activate_cb () + private void set_scan_type (ScanType scan_type) { - new_document(); + this.scan_type = scan_type; + + switch (scan_type) + { + case ScanType.SINGLE: + scan_single_radio.active = true; + scan_options_image.icon_name = "scanner-symbolic"; + break; + case ScanType.ADF_BOTH: + scan_adf_radio.active = true; + scan_options_image.icon_name = "scan-type-adf-symbolic"; + break; + case ScanType.BATCH: + scan_batch_radio.active = true; + scan_options_image.icon_name = "scan-type-batch-symbolic"; + break; + } + } + + [GtkCallback] + private void scan_single_radio_toggled_cb (Gtk.ToggleButton button) + { + if (button.active) + set_scan_type (ScanType.SINGLE); + } + + [GtkCallback] + private void scan_adf_radio_toggled_cb (Gtk.ToggleButton button) + { + if (button.active) + set_scan_type (ScanType.ADF_BOTH); + } + + [GtkCallback] + private void scan_batch_radio_toggled_cb (Gtk.ToggleButton button) + { + if (button.active) + set_scan_type (ScanType.BATCH); } private void set_document_hint (string document_hint, bool save = false) @@ -633,15 +658,11 @@ public class AppWindow : Gtk.ApplicationWindow if (document_hint == "text") { - text_button_menuitem.active = true; - text_button_hb_menuitem.active = true; - text_menuitem.active = true; + text_radio.active = true; } else if (document_hint == "photo") { - photo_button_menuitem.active = true; - photo_button_hb_menuitem.active = true; - photo_menuitem.active = true; + photo_radio.active = true; } if (save) @@ -649,16 +670,16 @@ public class AppWindow : Gtk.ApplicationWindow } [GtkCallback] - private void text_menuitem_toggled_cb (Gtk.CheckMenuItem widget) + private void text_radio_toggled_cb (Gtk.ToggleButton button) { - if (widget.active) + if (button.active) set_document_hint ("text", true); } [GtkCallback] - private void photo_menuitem_toggled_cb (Gtk.CheckMenuItem widget) + private void photo_radio_toggled_cb (Gtk.ToggleButton button) { - if (widget.active) + if (button.active) set_document_hint ("photo", true); } @@ -689,7 +710,9 @@ public class AppWindow : Gtk.ApplicationWindow private void scan_button_clicked_cb (Gtk.Widget widget) { var options = make_scan_options (); - options.type = ScanType.SINGLE; + options.type = scan_type; + if (options.type == ScanType.ADF_BOTH) + options.type = preferences_dialog.get_page_side (); status_primary_label.set_text (/* Label shown when scan started */ _("Contacting scanner…")); start_scan (selected_device, options); @@ -701,34 +724,7 @@ public class AppWindow : Gtk.ApplicationWindow stop_scan (); } - [GtkCallback] - private void continuous_scan_button_clicked_cb (Gtk.Widget widget) - { - if (scanning) - stop_scan (); - else - { - var options = make_scan_options (); - options.type = preferences_dialog.get_page_side (); - start_scan (selected_device, options); - } - } - - [GtkCallback] - private void batch_button_clicked_cb (Gtk.Widget widget) - { - var options = make_scan_options (); - options.type = ScanType.BATCH; - start_scan (selected_device, options); - } - - [GtkCallback] - private void preferences_button_clicked_cb (Gtk.Widget widget) - { - preferences_dialog.present (); - } - - public void preferences_activate_cb () + private void preferences_cb () { preferences_dialog.present (); } @@ -975,7 +971,7 @@ public class AppWindow : Gtk.ApplicationWindow dialog.modal = true; dialog.border_width = 12; /* Title of dialog to reorder pages */ - dialog.title = _("Reorder Pages"); + dialog.title = C_("dialog title", "Reorder Pages"); dialog.set_transient_for (this); dialog.key_press_event.connect ((e) => { @@ -1039,13 +1035,7 @@ public class AppWindow : Gtk.ApplicationWindow dialog.present (); } - public void reorder_document_activate_cb () - { - reorder_document (); - } - - [GtkCallback] - private void reorder_menuitem_activate_cb (Gtk.Widget widget) + private void reorder_document_cb () { reorder_document (); } @@ -1060,11 +1050,13 @@ public class AppWindow : Gtk.ApplicationWindow var label = new Gtk.Label (text); label.visible = true; - vbox.pack_start (label, true, true, 0); + label.vexpand = true; + vbox.add (label); var rb = make_reorder_box (items); rb.visible = true; - vbox.pack_start (rb, true, true, 0); + rb.vexpand = true; + vbox.add (rb); return b; } @@ -1081,7 +1073,7 @@ public class AppWindow : Gtk.ApplicationWindow { var a = new Gtk.Label ("➤"); a.visible = true; - box.pack_start (a, false, false, 0); + box.add (a); page_box = null; continue; } @@ -1096,7 +1088,7 @@ public class AppWindow : Gtk.ApplicationWindow { page_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 3); page_box.visible = true; - box.pack_start (page_box, false, false, 0); + box.add (page_box); } /* Get colours for each page (from Tango palette) */ @@ -1133,7 +1125,7 @@ public class AppWindow : Gtk.ApplicationWindow var icon = new PageIcon ("%c".printf (items[i]), r, g, b); icon.visible = true; - page_box.pack_start (icon, false, false, 0); + page_box.add (icon); } return box; @@ -1183,13 +1175,7 @@ public class AppWindow : Gtk.ApplicationWindow context.paint (); } - [GtkCallback] - private void email_button_clicked_cb (Gtk.Widget widget) - { - email_document_async.begin (); - } - - public void email_document_activate_cb () + private void email_document_cb () { email_document_async.begin (); } @@ -1238,13 +1224,7 @@ public class AppWindow : Gtk.ApplicationWindow print.draw_page.disconnect (draw_page); } - [GtkCallback] - private void print_button_clicked_cb (Gtk.Widget widget) - { - print_document (); - } - - public void print_document_activate_cb () + private void print_document_cb () { print_document (); } @@ -1263,13 +1243,7 @@ public class AppWindow : Gtk.ApplicationWindow } } - [GtkCallback] - private void help_contents_menuitem_activate_cb (Gtk.Widget widget) - { - launch_help (); - } - - public void help_contents_activate_cb () + private void help_cb () { launch_help (); } @@ -1289,10 +1263,10 @@ public class AppWindow : Gtk.ApplicationWindow Gtk.show_about_dialog (this, "title", title, - "program-name", "Simple Scan", + "program-name", _("Simple Scan"), "version", VERSION, "comments", description, - "logo-icon-name", "scanner", + "logo-icon-name", "org.gnome.SimpleScan", "authors", authors, "translator-credits", _("translator-credits"), "website", "https://gitlab.gnome.org/GNOME/simple-scan", @@ -1302,13 +1276,7 @@ public class AppWindow : Gtk.ApplicationWindow null); } - [GtkCallback] - private void about_menuitem_activate_cb (Gtk.Widget widget) - { - show_about (); - } - - public void about_activate_cb () + private void about_cb () { show_about (); } @@ -1332,13 +1300,7 @@ public class AppWindow : Gtk.ApplicationWindow }); } - [GtkCallback] - private void quit_menuitem_activate_cb (Gtk.Widget widget) - { - on_quit (); - } - - public void quit_activate_cb () + private void quit_cb () { on_quit (); } @@ -1395,14 +1357,16 @@ public class AppWindow : Gtk.ApplicationWindow var label = new Gtk.Label (message); label.visible = true; label.xalign = 0f; - dialog.get_content_area ().pack_start (label, true, true, 0); + label.vexpand = true; + dialog.get_content_area ().add (label); var instructions_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); instructions_box.visible = true; - dialog.get_content_area ().pack_start (instructions_box, true, true, 0); + instructions_box.vexpand = true; + dialog.get_content_area ().add (instructions_box); var stack = new Gtk.Stack (); - instructions_box.pack_start (stack, false, false, 0); + instructions_box.add (stack); var spinner = new Gtk.Spinner (); spinner.visible = true; @@ -1416,14 +1380,15 @@ public class AppWindow : Gtk.ApplicationWindow instructions_label.visible = true; instructions_label.xalign = 0f; instructions_label.use_markup = true; - instructions_box.pack_start (instructions_label, false, false, 0); + instructions_box.add (instructions_label); label = new Gtk.Label (/* Message in driver install dialog */ _("Once installed you will need to restart Simple Scan.")); label.visible = true; label.xalign = 0f; + label.vexpand = true; dialog.get_content_area ().border_width = 12; - dialog.get_content_area ().pack_start (label, true, true, 0); + dialog.get_content_area ().add (label); if (packages_to_install.length > 0) { @@ -1534,64 +1499,48 @@ public class AppWindow : Gtk.ApplicationWindow private void book_changed_cb (Book book) { - save_menuitem.sensitive = true; - email_menuitem.sensitive = true; - print_menuitem.sensitive = true; save_button.sensitive = true; - save_toolbutton.sensitive = true; book_needs_saving = true; copy_to_clipboard_menuitem.sensitive = true; } private void load () { - var use_header_bar = !is_traditional_desktop (); - - preferences_dialog = new PreferencesDialog (settings, use_header_bar); + preferences_dialog = new PreferencesDialog (settings); preferences_dialog.delete_event.connect (() => { return true; }); preferences_dialog.response.connect (() => { preferences_dialog.visible = false; }); - Gtk.IconTheme.get_default ().append_search_path (ICON_DIR); - - Gtk.Window.set_default_icon_name ("scanner"); + Gtk.Window.set_default_icon_name ("org.gnome.SimpleScan"); var app = Application.get_default () as Gtk.Application; - if (!use_header_bar) - { - set_titlebar (null); - menubar.visible = true; - toolbar.visible = true; - } - else - { - /* Set HeaderBar title here because Glade doesn't keep it translated */ - /* https://bugzilla.gnome.org/show_bug.cgi?id=782753 */ - /* Title of scan window */ - header_bar.title = _("Simple Scan"); - - app.add_action_entries (action_entries, this); - - app.set_accels_for_action ("app.new_document", { "<Ctrl>N" }); - app.set_accels_for_action ("app.save", { "<Ctrl>S" }); - app.set_accels_for_action ("app.email", { "<Ctrl>E" }); - app.set_accels_for_action ("app.print", { "<Ctrl>P" }); - app.set_accels_for_action ("app.help", { "F1" }); - app.set_accels_for_action ("app.quit", { "<Ctrl>Q" }); - - var gear_menu = new Menu (); - var section = new Menu (); - gear_menu.append_section (null, section); - section.append (_("Email"), "app.email"); - section.append (_("Reorder Pages"), "app.reorder"); - section = new Menu (); - gear_menu.append_section (null, section); - section.append (_("Preferences"), "app.preferences"); - section.append (_("Keyboard Shortcuts"), "win.show-help-overlay"); - section.append (_("Help"), "app.help"); - section.append (_("About"), "app.about"); - menu_button.set_menu_model (gear_menu); - } + /* Set HeaderBar title here because Glade doesn't keep it translated */ + /* https://bugzilla.gnome.org/show_bug.cgi?id=782753 */ + /* Title of scan window */ + header_bar.title = _("Simple Scan"); + + app.add_action_entries (action_entries, this); + + app.set_accels_for_action ("app.new_document", { "<Ctrl>N" }); + app.set_accels_for_action ("app.save", { "<Ctrl>S" }); + app.set_accels_for_action ("app.email", { "<Ctrl>E" }); + app.set_accels_for_action ("app.print", { "<Ctrl>P" }); + app.set_accels_for_action ("app.help", { "F1" }); + app.set_accels_for_action ("app.quit", { "<Ctrl>Q" }); + + var gear_menu = new Menu (); + var section = new Menu (); + gear_menu.append_section (null, section); + section.append (_("Email"), "app.email"); + section.append (C_("menu", "Reorder Pages"), "app.reorder"); + section = new Menu (); + gear_menu.append_section (null, section); + section.append (_("Preferences"), "app.preferences"); + section.append (_("Keyboard Shortcuts"), "win.show-help-overlay"); + section.append (_("Help"), "app.help"); + section.append (_("About Simple Scan"), "app.about"); + menu_button.set_menu_model (gear_menu); + app.add_window (this); /* Populate ActionBar (not supported in Glade) */ @@ -1599,7 +1548,7 @@ public class AppWindow : Gtk.ApplicationWindow var button = new Gtk.Button.with_label (/* Label on new document button */ _("Start Again…")); button.visible = true; - button.clicked.connect (new_button_clicked_cb); + button.clicked.connect (new_document_cb); action_bar.pack_start (button); var box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 10); @@ -1609,26 +1558,32 @@ public class AppWindow : Gtk.ApplicationWindow var rotate_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); rotate_box.get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED); rotate_box.visible = true; - box.pack_start (rotate_box, false, true, 0); + box.add (rotate_box); button = new Gtk.Button.from_icon_name ("object-rotate-left-symbolic"); button.visible = true; + button.image.margin_start = 18; + button.image.margin_end = 18; /* Tooltip for rotate left (counter-clockwise) button */ button.tooltip_text = _("Rotate the page to the left (counter-clockwise)"); button.clicked.connect (rotate_left_button_clicked_cb); - rotate_box.pack_start (button, false, true, 0); + rotate_box.add (button); button = new Gtk.Button.from_icon_name ("object-rotate-right-symbolic"); button.visible = true; + button.image.margin_start = 18; + button.image.margin_end = 18; /* Tooltip for rotate right (clockwise) button */ button.tooltip_text = _("Rotate the page to the right (clockwise)"); button.clicked.connect (rotate_right_button_clicked_cb); - rotate_box.pack_start (button, false, true, 0); + rotate_box.add (button); crop_button = new Gtk.ToggleButton (); crop_button.visible = true; var image = new Gtk.Image.from_icon_name ("edit-cut-symbolic", Gtk.IconSize.BUTTON); image.visible = true; + image.margin_start = 18; + image.margin_end = 18; crop_button.add (image); /* Tooltip for crop button */ crop_button.tooltip_text = _("Crop the selected page"); @@ -1642,14 +1597,16 @@ public class AppWindow : Gtk.ApplicationWindow else no_crop_menuitem.active = true; }); - box.pack_start (crop_button, false, true, 0); + box.add (crop_button); delete_button = new Gtk.Button.from_icon_name ("user-trash-symbolic"); delete_button.visible = true; + delete_button.image.margin_start = 18; + delete_button.image.margin_end = 18; /* Tooltip for delete button */ delete_button.tooltip_text = _("Delete the selected page"); delete_button.clicked.connect (() => { book_view.book.delete_page (book_view.selected_page); }); - box.pack_start (delete_button, false, true, 0); + box.add (delete_button); var document_type = settings.get_string ("document-type"); if (document_type != null) @@ -1657,7 +1614,8 @@ public class AppWindow : Gtk.ApplicationWindow book_view = new BookView (book); book_view.border_width = 18; - main_vbox.pack_start (book_view, true, true, 0); + book_view.vexpand = true; + main_vbox.add (book_view); book_view.page_selected.connect (page_selected_cb); book_view.show_page.connect (show_page_cb); book_view.show_menu.connect (show_page_menu_cb); @@ -1683,28 +1641,6 @@ public class AppWindow : Gtk.ApplicationWindow } } - private bool is_desktop (string name) - { - var desktop_name_list = Environment.get_variable ("XDG_CURRENT_DESKTOP"); - if (desktop_name_list == null) - return false; - - foreach (var n in desktop_name_list.split (":")) - if (n == name) - return true; - - return false; - } - - private bool is_traditional_desktop () - { - const string[] traditional_desktops = { "Unity", "XFCE", "MATE", "LXDE", "Cinnamon", "X-Cinnamon", "i3" }; - foreach (var name in traditional_desktops) - if (is_desktop (name)) - return true; - return false; - } - private string state_filename { owned get { return Path.build_filename (Environment.get_user_cache_dir (), "simple-scan", "state"); } |