diff options
Diffstat (limited to 'src/AppWindow.vala')
-rw-r--r-- | src/AppWindow.vala | 197 |
1 files changed, 51 insertions, 146 deletions
diff --git a/src/AppWindow.vala b/src/AppWindow.vala index 0103300..41751e8 100644 --- a/src/AppWindow.vala +++ b/src/AppWindow.vala @@ -19,26 +19,19 @@ public class FullscreenWindow : PageWindow { private bool switched_to = false; private bool is_toolbar_dismissal_enabled; + private const GLib.ActionEntry[] entries = { + { "LeaveFullscreen", on_close } + }; + public FullscreenWindow(Page page) { - set_current_page(page); + base (); - File ui_file = Resources.get_ui("fullscreen.ui"); + set_current_page(page); - try { - ui.add_ui_from_file(ui_file.get_path()); - } catch (Error err) { - error("Error loading UI file %s: %s", ui_file.get_path(), err.message); - } - - Gtk.ActionGroup action_group = new Gtk.ActionGroup("FullscreenActionGroup"); - action_group.add_actions(create_actions(), this); - ui.insert_action_group(action_group, 0); - ui.ensure_update(); + AppWindow.get_instance().add_action_entries (entries, this); + const string[] accels = { "F11" }; + Application.set_accels_for_action ("win.LeaveFullscreen", accels); - Gtk.AccelGroup accel_group = ui.get_accel_group(); - if (accel_group != null) - add_accel_group(accel_group); - set_screen(AppWindow.get_instance().get_screen()); // Needed so fullscreen will occur on correct monitor in multi-monitor setups @@ -58,7 +51,7 @@ public class FullscreenWindow : PageWindow { close_button.set_icon_name("view-restore"); close_button.set_tooltip_text(_("Leave fullscreen")); - close_button.clicked.connect(on_close); + close_button.set_action_name ("win.LeaveFullscreen"); toolbar = page.get_toolbar(); toolbar.set_show_arrow(false); @@ -101,6 +94,9 @@ public class FullscreenWindow : PageWindow { // Toolbar steals keyboard focus from page, put it back again page.grab_focus (); + + // Do not show menubar in fullscreen + set_show_menubar (false); } public void disable_toolbar_dismissal() { @@ -130,18 +126,6 @@ public class FullscreenWindow : PageWindow { return result; } - - private Gtk.ActionEntry[] create_actions() { - Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0]; - - Gtk.ActionEntry leave_fullscreen = { "LeaveFullscreen", Resources.LEAVE_FULLSCREEN_LABEL, - TRANSLATABLE, "F11", TRANSLATABLE, on_close }; - leave_fullscreen.label = Resources.LEAVE_FULLSCREEN_LABEL; - leave_fullscreen.tooltip = Resources.LEAVE_FULLSCREEN_LABEL; - actions += leave_fullscreen; - - return actions; - } public override bool key_press_event(Gdk.EventKey event) { // check for an escape/abort @@ -289,9 +273,7 @@ public class FullscreenWindow : PageWindow { // subclass. A subclass should set current_page to the user-visible Page for it to receive // various notifications. It is the responsibility of the subclass to notify Pages when they're // switched to and from, and other aspects of the Page interface. -public abstract class PageWindow : Gtk.Window { - protected Gtk.UIManager ui = new Gtk.UIManager(); - +public abstract class PageWindow : Gtk.ApplicationWindow { private Page current_page = null; private int busy_counter = 0; @@ -299,15 +281,12 @@ public abstract class PageWindow : Gtk.Window { } public PageWindow() { + Object (application: Application.get_instance().get_system_app ()); + // the current page needs to know when modifier keys are pressed add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK | Gdk.EventMask.STRUCTURE_MASK); - - set_has_resize_grip(false); - } - - public Gtk.UIManager get_ui_manager() { - return ui; + set_show_menubar (true); } public Page? get_current_page() { @@ -381,8 +360,10 @@ public abstract class PageWindow : Gtk.Window { public void set_busy_cursor() { if (busy_counter++ > 0) return; - - get_window().set_cursor(new Gdk.Cursor(Gdk.CursorType.WATCH)); + + var display = get_window ().get_display (); + var cursor = new Gdk.Cursor.for_display (display, Gdk.CursorType.WATCH); + get_window().set_cursor (cursor); spin_event_loop(); } @@ -394,7 +375,9 @@ public abstract class PageWindow : Gtk.Window { return; } - get_window().set_cursor(new Gdk.Cursor(Gdk.CursorType.LEFT_PTR)); + var display = get_window ().get_display (); + var cursor = new Gdk.Cursor.for_display (display, Gdk.CursorType.LEFT_PTR); + get_window().set_cursor (cursor); spin_event_loop(); } @@ -416,14 +399,11 @@ public abstract class AppWindow : PageWindow { // the AppWindow maintains its own UI manager because the first UIManager an action group is // added to is the one that claims its accelerators - protected Gtk.ActionGroup[] common_action_groups; protected bool maximized = false; protected Dimensions dimensions; protected int pos_x = 0; protected int pos_y = 0; - private Gtk.ActionGroup common_action_group = new Gtk.ActionGroup("AppWindowGlobalActionGroup"); - public AppWindow() { // although there are multiple AppWindow types, only one may exist per-process assert(instance == null); @@ -454,18 +434,8 @@ public abstract class AppWindow : PageWindow { // UIManager. In order to activate those accelerators, we need to create a dummy UI string // that lists all the common actions. We build it on-the-fly from the actions associated // with each ActionGroup while we're adding the groups to the UIManager. - common_action_groups = create_common_action_groups(); - foreach (Gtk.ActionGroup group in common_action_groups) - ui.insert_action_group(group, 0); - - try { - ui.add_ui_from_string(build_dummy_ui_string(common_action_groups), -1); - } catch (Error err) { - error("Unable to add AppWindow UI: %s", err.message); - } - - ui.ensure_update(); - add_accel_group(ui.get_accel_group()); + + add_actions (); Gtk.CssProvider provider = new Gtk.CssProvider(); try { @@ -475,67 +445,20 @@ public abstract class AppWindow : PageWindow { debug("Unable to load custom CSS: %s", err.message); } } - - private Gtk.ActionEntry[] create_common_actions() { - Gtk.ActionEntry[] actions = new Gtk.ActionEntry[0]; - - Gtk.ActionEntry quit = { "CommonQuit", Resources.QUIT_LABEL, TRANSLATABLE, "<Ctrl>Q", - TRANSLATABLE, on_quit }; - quit.label = Resources.QUIT_LABEL; - actions += quit; - - Gtk.ActionEntry about = { "CommonAbout", Resources.ABOUT_LABEL, TRANSLATABLE, null, - TRANSLATABLE, on_about }; - about.label = Resources.ABOUT_LABEL; - actions += about; - - Gtk.ActionEntry fullscreen = { "CommonFullscreen", Resources.FULLSCREEN_LABEL, - TRANSLATABLE, "F11", TRANSLATABLE, on_fullscreen }; - fullscreen.label = Resources.FULLSCREEN_LABEL; - actions += fullscreen; - - Gtk.ActionEntry help_contents = { "CommonHelpContents", Resources.HELP_LABEL, - TRANSLATABLE, "F1", TRANSLATABLE, on_help_contents }; - help_contents.label = _("_Contents"); - actions += help_contents; - - Gtk.ActionEntry help_faq = { "CommonHelpFAQ", null, TRANSLATABLE, null, - TRANSLATABLE, on_help_faq }; - help_faq.label = _("_Frequently Asked Questions"); - actions += help_faq; - - Gtk.ActionEntry help_report_problem = { "CommonHelpReportProblem", null, TRANSLATABLE, null, - TRANSLATABLE, on_help_report_problem }; - help_report_problem.label = _("_Report a Problem…"); - actions += help_report_problem; - Gtk.ActionEntry undo = { "CommonUndo", Resources.UNDO_MENU, TRANSLATABLE, "<Ctrl>Z", - TRANSLATABLE, on_undo }; - undo.label = Resources.UNDO_MENU; - actions += undo; - - Gtk.ActionEntry redo = { "CommonRedo", Resources.REDO_MENU, TRANSLATABLE, "<Ctrl><Shift>Z", - TRANSLATABLE, on_redo }; - redo.label = Resources.REDO_MENU; - actions += redo; + private const GLib.ActionEntry[] common_actions = { + { "CommonQuit", on_quit }, + { "CommonFullscreen", on_fullscreen }, + { "CommonHelpContents", on_help_contents }, + { "CommonHelpFAQ", on_help_faq }, + { "CommonHelpReportProblem", on_help_report_problem }, + { "CommonUndo", on_undo }, + { "CommonRedo", on_redo }, + { "CommonJumpToFile", on_jump_to_file }, + { "CommonSelectAll", on_select_all }, + { "CommonSelectNone", on_select_none } + }; - Gtk.ActionEntry jump_to_file = { "CommonJumpToFile", Resources.JUMP_TO_FILE_MENU, TRANSLATABLE, - "<Ctrl><Shift>M", TRANSLATABLE, on_jump_to_file }; - jump_to_file.label = Resources.JUMP_TO_FILE_MENU; - actions += jump_to_file; - - Gtk.ActionEntry select_all = { "CommonSelectAll", Resources.SELECT_ALL_MENU, TRANSLATABLE, - "<Ctrl>A", TRANSLATABLE, on_select_all }; - select_all.label = Resources.SELECT_ALL_MENU; - actions += select_all; - - Gtk.ActionEntry select_none = { "CommonSelectNone", null, null, - "<Ctrl><Shift>A", TRANSLATABLE, on_select_none }; - actions += select_none; - - return actions; - } - protected abstract void on_fullscreen(); public static bool has_instance() { @@ -747,22 +670,10 @@ public abstract class AppWindow : PageWindow { sys_show_uri(get_window().get_screen(), url); } - protected virtual Gtk.ActionGroup[] create_common_action_groups() { - Gtk.ActionGroup[] groups = new Gtk.ActionGroup[0]; - - common_action_group.add_actions(create_common_actions(), this); - groups += common_action_group; - - return groups; - } - - public Gtk.ActionGroup[] get_common_action_groups() { - return common_action_groups; + protected virtual void add_actions () { + this.add_action_entries (AppWindow.common_actions, this); } - - public virtual void replace_common_placeholders(Gtk.UIManager ui) { - } - + public void go_fullscreen(Page page) { // if already fullscreen, use that if (fullscreen_window != null) { @@ -801,34 +712,26 @@ public abstract class AppWindow : PageWindow { present(); } - public Gtk.Action? get_common_action(string name) { - foreach (Gtk.ActionGroup group in common_action_groups) { - Gtk.Action? action = group.get_action(name); - if (action != null) - return action; - } - - warning("No common action found: %s", name); - - return null; + public GLib.Action? get_common_action(string name) { + return lookup_action (name); } public void set_common_action_sensitive(string name, bool sensitive) { - Gtk.Action? action = get_common_action(name); + var action = get_common_action(name) as GLib.SimpleAction; if (action != null) - action.sensitive = sensitive; + action.set_enabled (sensitive); } public void set_common_action_important(string name, bool important) { - Gtk.Action? action = get_common_action(name); + var action = get_common_action(name) as GLib.SimpleAction; if (action != null) - action.is_important = important; + action.set_enabled (sensitive); } public void set_common_action_visible(string name, bool visible) { - Gtk.Action? action = get_common_action(name); + var action = get_common_action(name) as GLib.SimpleAction; if (action != null) - action.visible = visible; + action.set_enabled (sensitive); } protected override void switched_pages(Page? old_page, Page? new_page) { @@ -891,6 +794,7 @@ public abstract class AppWindow : PageWindow { private void decorate_command_manager_action(string name, string prefix, string default_explanation, CommandDescription? desc) { +#if 0 Gtk.Action? action = get_common_action(name); if (action == null) return; @@ -904,6 +808,7 @@ public abstract class AppWindow : PageWindow { action.tooltip = default_explanation; action.sensitive = false; } +#endif } public void decorate_undo_action() { |