From 8b2af3cde501b5b435110d1f607a9e3cdffd3840 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 10:23:05 -0500 Subject: [PATCH 01/19] shell: Use `.view` style class in Recent view This commit changes the recent view to use `.view` for the entire page. This matches the colors between the headerbar and the GtkGridView below. This is what we do in other apps like Nautilus and Fractal that use GtkListView and GtkGridView. --- shell/evince-recent-view.ui | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shell/evince-recent-view.ui b/shell/evince-recent-view.ui index 899ad842e..4d6453171 100644 --- a/shell/evince-recent-view.ui +++ b/shell/evince-recent-view.ui @@ -142,5 +142,8 @@ + -- GitLab From bf82f13d4c9b684babe6948d755800cdfb81667d Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 10:36:36 -0500 Subject: [PATCH 02/19] shell: Use `top-bar-style=raised` for main window Windows with utility panes or complex content should use the raised top bar style. --- shell/evince-window.ui | 1 + 1 file changed, 1 insertion(+) diff --git a/shell/evince-window.ui b/shell/evince-window.ui index 2d7eb94d1..dd3c56bd3 100644 --- a/shell/evince-window.ui +++ b/shell/evince-window.ui @@ -31,6 +31,7 @@ Document + raised model -- GitLab From ca3518437d6201d184e641db9f20c75d2a290970 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 11:01:08 -0500 Subject: [PATCH 03/19] shell: Use AdwStatusPage for password view Instead of using a custom box, we can use AdwStatusPage and be consistent with other applications. --- shell/evince-password-view.ui | 45 ++++++++++------------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/shell/evince-password-view.ui b/shell/evince-password-view.ui index 424a9948a..423e69a0e 100644 --- a/shell/evince-password-view.ui +++ b/shell/evince-password-view.ui @@ -15,40 +15,21 @@ - - vertical - 24 - center - center - True - True - - - dialog-password-symbolic - 48 - - - - - This document is locked and can only be read by entering the correct password. - True - 64 - char - - - - - horizontal + + dialog-password-symbolic + Password Required + This document is locked and can only be read by entering the correct password + + center - - - True - _Unlock Document - - - + True + _Unlock Document + + - + -- GitLab From f97118edbee2d79da124fbf15d1c253246604b0d Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 13:23:21 -0500 Subject: [PATCH 04/19] shell: Port password view dialogs to AdwMessageDialog Ports the message dialog in the password view to AdwMessageDialog. Also gets the dialog looking more like its GTK3 version. --- shell/ev-password-view.c | 96 +++++++++++++++------------------------- 1 file changed, 35 insertions(+), 61 deletions(-) diff --git a/shell/ev-password-view.c b/shell/ev-password-view.c index 99e5deb4f..e0bce3c54 100644 --- a/shell/ev-password-view.c +++ b/shell/ev-password-view.c @@ -141,27 +141,23 @@ ev_password_view_set_filename (EvPasswordView *password_view, } static void -ev_password_dialog_got_response (GtkDialog *dialog, - gint response_id, - EvPasswordView *password_view) +ev_password_dialog_got_response (AdwMessageDialog *dialog, + GAsyncResult *result, + EvPasswordView *password_view) { EvPasswordViewPrivate *priv = GET_PRIVATE (password_view); + const char *response = adw_message_dialog_choose_finish (dialog, result); gtk_widget_set_sensitive (GTK_WIDGET (password_view), TRUE); - if (response_id == GTK_RESPONSE_OK) { - g_free (priv->password); + if (g_strcmp0 (response, "unlock") == 0) { priv->password = g_strdup (gtk_editable_get_text (GTK_EDITABLE (priv->password_entry))); g_signal_emit (password_view, password_view_signals[UNLOCK], 0); - } else if (response_id == GTK_RESPONSE_CANCEL || - response_id == GTK_RESPONSE_CLOSE || - response_id == GTK_RESPONSE_DELETE_EVENT) { + } else { g_signal_emit (password_view, password_view_signals[CANCELLED], 0); } - - gtk_window_destroy (GTK_WINDOW (dialog)); } static void @@ -179,82 +175,62 @@ ev_password_dialog_remember_button_toggled (GtkCheckButton *button, } static void -ev_password_dialog_entry_changed_cb (GtkEditable *editable, - GtkDialog *dialog) +ev_password_dialog_entry_changed_cb (GtkEditable *editable, + AdwMessageDialog *dialog) { const char *text; text = gtk_editable_get_text (GTK_EDITABLE (editable)); - gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, - (text != NULL && *text != '\0')); -} - -static void -ev_password_dialog_entry_activated_cb (GtkEntry *entry, - GtkDialog *dialog) -{ - gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + adw_message_dialog_set_response_enabled (dialog, "unlock", + (text != NULL && *text != '\0')); } void ev_password_view_ask_password (EvPasswordView *password_view) { - GtkMessageDialog *dialog; + AdwMessageDialog *dialog; GtkWidget *message_area; - GtkWidget *grid, *label; GtkWidget *password_entry; gchar *text; EvPasswordViewPrivate *priv = GET_PRIVATE (password_view); GtkWindow *parent_window; - text = g_markup_printf_escaped (_("The document “%s” is locked and requires a password before it can be opened."), + text = g_markup_printf_escaped (_("The document “%s” is locked and requires a password before it can be opened"), priv->filename); parent_window = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (password_view))); - dialog = GTK_MESSAGE_DIALOG (gtk_message_dialog_new (parent_window, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_NONE, - _("Password required"))); - gtk_message_dialog_format_secondary_markup (dialog, "%s", text); + dialog = ADW_MESSAGE_DIALOG (adw_message_dialog_new (parent_window, + _("Password Required"), + NULL)); + adw_message_dialog_set_body_use_markup (dialog, true); + adw_message_dialog_set_body (dialog, text); g_free (text); - message_area = gtk_message_dialog_get_message_area (dialog); - - gtk_dialog_add_buttons (GTK_DIALOG (dialog), - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_Unlock"), GTK_RESPONSE_OK, - NULL); - gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), - GTK_RESPONSE_OK, FALSE); + adw_message_dialog_add_responses (dialog, + "cancel", _("_Cancel"), + "unlock", _("_Unlock"), + NULL); + adw_message_dialog_set_close_response (dialog, "cancel"); + adw_message_dialog_set_default_response (dialog, "unlock"); + adw_message_dialog_set_response_enabled (dialog, "unlock", FALSE); - grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 12); - gtk_box_prepend (GTK_BOX (message_area), grid); - - gtk_widget_set_halign (grid, GTK_ALIGN_CENTER); - - label = gtk_label_new_with_mnemonic (_("_Password:")); - g_object_set (G_OBJECT (label), "xalign", 0., "yalign", 0.5, NULL); + message_area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + adw_message_dialog_set_extra_child (dialog, message_area); password_entry = gtk_password_entry_new (); gtk_password_entry_set_show_peek_icon (GTK_PASSWORD_ENTRY (password_entry), TRUE); + g_object_set (G_OBJECT (password_entry), + "placeholder-text", _("Password"), + NULL); + g_object_set (G_OBJECT (password_entry), "activates-default", TRUE, NULL); g_object_set (G_OBJECT (password_entry), "width-chars", 32, NULL); g_signal_connect (password_entry, "changed", G_CALLBACK (ev_password_dialog_entry_changed_cb), dialog); - g_signal_connect (password_entry, "activate", - G_CALLBACK (ev_password_dialog_entry_activated_cb), - dialog); - gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID (grid), password_entry, 1, 0, 1, 1); - gtk_widget_set_hexpand (password_entry, TRUE); - - gtk_label_set_mnemonic_widget (GTK_LABEL (label), - password_entry); + gtk_box_append (GTK_BOX (message_area), password_entry); priv->password_entry = password_entry; @@ -264,7 +240,7 @@ ev_password_view_ask_password (EvPasswordView *password_view) GtkWidget *group; remember_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_prepend (GTK_BOX (message_area), remember_box); + gtk_box_append (GTK_BOX (message_area), remember_box); gtk_widget_set_halign (remember_box, GTK_ALIGN_CENTER); choice = gtk_check_button_new_with_mnemonic (_("Forget password _immediately")); @@ -302,11 +278,9 @@ ev_password_view_ask_password (EvPasswordView *password_view) gtk_box_append (GTK_BOX (remember_box), choice); } - g_signal_connect (dialog, "response", - G_CALLBACK (ev_password_dialog_got_response), - password_view); - - gtk_window_present (GTK_WINDOW (dialog)); + adw_message_dialog_choose (dialog, NULL, + (GAsyncReadyCallback) ev_password_dialog_got_response, + password_view); } const gchar * -- GitLab From 96d0b1e6fc2267e360f4945c4510c130d464a127 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 14:38:27 -0500 Subject: [PATCH 05/19] shell: Unlink buttons in search box Per the linked buttons section of https://blogs.gnome.org/alicem/2021/09/10/cleaning-up-header-bars/ --- shell/evince-search-box.ui | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/shell/evince-search-box.ui b/shell/evince-search-box.ui index ab24e8a69..4ad902522 100644 --- a/shell/evince-search-box.ui +++ b/shell/evince-search-box.ui @@ -16,9 +16,7 @@ horizontal center - + 6 -- GitLab From 5edb5ccae7c7c681e455c8c15b281b9db286fb15 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 15:07:06 -0500 Subject: [PATCH 06/19] shell: Move menu button in search box This matches other apps and the latest mockups better. --- shell/evince-search-box.ui | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/shell/evince-search-box.ui b/shell/evince-search-box.ui index 4ad902522..5f0799409 100644 --- a/shell/evince-search-box.ui +++ b/shell/evince-search-box.ui @@ -25,10 +25,26 @@ + + + go-up-symbolic + False + Find previous occurrence of the search string + + + + + + go-down-symbolic + False + Find next occurrence of the search string + + + down - pan-down + view-more-symbolic @@ -54,22 +70,6 @@ - - - go-up-symbolic - False - Find previous occurrence of the search string - - - - - - go-down-symbolic - False - Find next occurrence of the search string - - - -- GitLab From bbbde9fc214391e03fca32c6977ec2e5612b13ce Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 15:59:26 -0500 Subject: [PATCH 07/19] shell: Remove custom search bar styling from CSS It's not doing anything good for us, and it leaks into the menus. --- shell/evince.css | 6 ------ 1 file changed, 6 deletions(-) diff --git a/shell/evince.css b/shell/evince.css index da8a5938e..4917da279 100644 --- a/shell/evince.css +++ b/shell/evince.css @@ -62,12 +62,6 @@ evpresentationview.white-mode { font-feature-settings: "tnum"; } -searchbar.evsearchbox box { - padding-left: 0px; - padding-right: 0px; - border-spacing: 0px 6px; -} - .ev-author-label { opacity: 0.55; font-size: 82%; -- GitLab From 8d7613013b50fe7aa807e3e03c767d2e75471b27 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 16:00:36 -0500 Subject: [PATCH 08/19] shell: Use stateful GActions and GMenuModel for search box Allows us to replace our custom menu widgets with the standard menu checkmarks. --- shell/ev-search-box.c | 33 +++++++++++++++++++++++++++------ shell/evince-search-box.ui | 36 +++++++++++++----------------------- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/shell/ev-search-box.c b/shell/ev-search-box.c index 1666bb797..58ffcd1cf 100644 --- a/shell/ev-search-box.c +++ b/shell/ev-search-box.c @@ -258,13 +258,17 @@ ev_search_box_set_options (EvSearchBox *box, static void -whole_words_only_toggled_cb (GtkCheckButton *button, - EvSearchBox *box) +whole_words_only_toggled_cb (GSimpleAction *action, + GVariant *state, + gpointer user_data) { + EvSearchBox *box = EV_SEARCH_BOX (user_data); EvSearchBoxPrivate *priv = GET_PRIVATE (box); EvFindOptions options = priv->options; + gboolean active = g_variant_get_boolean (state); + g_simple_action_set_state (action, state); - if (gtk_check_button_get_active (button)) + if (active) options |= EV_FIND_WHOLE_WORDS_ONLY; else options &= ~EV_FIND_WHOLE_WORDS_ONLY; @@ -272,13 +276,17 @@ whole_words_only_toggled_cb (GtkCheckButton *button, } static void -case_sensitive_toggled_cb (GtkCheckButton *button, - EvSearchBox *box) +case_sensitive_toggled_cb (GSimpleAction *action, + GVariant *state, + gpointer user_data) { + EvSearchBox *box = EV_SEARCH_BOX (user_data); EvSearchBoxPrivate *priv = GET_PRIVATE (box); EvFindOptions options = priv->options; + gboolean active = g_variant_get_boolean (state); + g_simple_action_set_state (action, state); - if (gtk_check_button_get_active (button)) + if (active) options |= EV_FIND_CASE_SENSITIVE; else options &= ~EV_FIND_CASE_SENSITIVE; @@ -501,10 +509,23 @@ ev_search_box_class_init (EvSearchBoxClass *klass) "next", NULL); } +const GActionEntry actions[] = { + { "whole-words-only", NULL, NULL, "false", whole_words_only_toggled_cb }, + { "case-sensitive", NULL, NULL, "false", case_sensitive_toggled_cb }, +}; + static void ev_search_box_init (EvSearchBox *box) { + GSimpleActionGroup *group; + gtk_widget_init_template (GTK_WIDGET (box)); + + group = g_simple_action_group_new (); + g_action_map_add_action_entries (G_ACTION_MAP (group), actions, + G_N_ELEMENTS (actions), box); + + gtk_widget_insert_action_group (GTK_WIDGET (box), "search", G_ACTION_GROUP (group)); } GtkWidget * diff --git a/shell/evince-search-box.ui b/shell/evince-search-box.ui index 5f0799409..b4d856d15 100644 --- a/shell/evince-search-box.ui +++ b/shell/evince-search-box.ui @@ -45,29 +45,7 @@ down view-more-symbolic - - - - - vertical - - - _Whole Words Only - True - - - - - - C_ase Sensitive - True - - - - - - - + search_options @@ -75,4 +53,16 @@ + +
+ + _Whole Words Only + search.whole-words-only + + + C_ase Sensitive + search.case-sensitive + +
+
-- GitLab From 92c75b01a3f9fc489c28d19abf0b8bbd2b4b6e53 Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 16:43:31 -0500 Subject: [PATCH 09/19] shell: Use AdwOverlaySplitView for main window Instead of using GtkPaned we now use the standard AdwOverlaySplitView widget. --- shell/ev-find-sidebar.c | 1 + shell/ev-window.c | 73 +++++++++++------------------- shell/evince-sidebar-bookmarks.ui | 4 +- shell/evince-sidebar-links.ui | 3 ++ shell/evince-sidebar-thumbnails.ui | 3 ++ shell/evince-window.ui | 22 +++------ 6 files changed, 43 insertions(+), 63 deletions(-) diff --git a/shell/ev-find-sidebar.c b/shell/ev-find-sidebar.c index 672d9cfbb..b0a9aba86 100644 --- a/shell/ev-find-sidebar.c +++ b/shell/ev-find-sidebar.c @@ -194,6 +194,7 @@ ev_find_sidebar_init (EvFindSidebar *sidebar) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); priv->tree_view = gtk_tree_view_new (); + gtk_widget_add_css_class (priv->tree_view, "navigation-sidebar"); ev_find_sidebar_reset_model (sidebar); gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->tree_view), -1); diff --git a/shell/ev-window.c b/shell/ev-window.c index 9841c564d..c8f63fcba 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -112,7 +112,6 @@ typedef struct { GtkWidget *stack; GtkWidget *main_box; GtkWidget *toolbar; - GtkWidget *hpaned; GtkWidget *sidebar; GtkWidget *search_box; GtkWidget *search_bar; @@ -129,6 +128,8 @@ typedef struct { GtkWidget *sidebar_bookmarks; GtkWidget *annots_toolbar; + AdwOverlaySplitView *split_view; + /* Settings */ GSettings *settings; GSettings *default_settings; @@ -1030,10 +1031,6 @@ ev_window_init_metadata_with_default_values (EvWindow *window) ev_metadata_set_boolean (metadata, "sidebar_visibility", g_settings_get_boolean (settings, "show-sidebar")); } - if (!ev_metadata_has_key (metadata, "sidebar_size")) { - ev_metadata_set_int (metadata, "sidebar_size", - g_settings_get_int (settings, "sidebar-size")); - } if (!ev_metadata_has_key (metadata, "sidebar_page")) { gchar *sidebar_page_id = g_settings_get_string (settings, "sidebar-page"); @@ -1085,17 +1082,16 @@ setup_sidebar_from_metadata (EvWindow *window) { gboolean show_sidebar; gchar *page_id; - gint sidebar_size; EvWindowPrivate *priv = GET_PRIVATE (window); if (!priv->metadata) return; - if (ev_metadata_get_boolean (priv->metadata, "sidebar_visibility", &show_sidebar)) - gtk_widget_set_visible (priv->sidebar, show_sidebar); + adw_overlay_split_view_set_show_sidebar (priv->split_view, + ev_metadata_get_boolean (priv->metadata, + "sidebar_visibility", + &show_sidebar)); - if (ev_metadata_get_int (priv->metadata, "sidebar_size", &sidebar_size)) - gtk_paned_set_position (GTK_PANED (priv->hpaned), sidebar_size); if (ev_metadata_get_string (priv->metadata, "sidebar_page", &page_id)) ev_sidebar_set_visible_child_name (EV_SIDEBAR (priv->sidebar), page_id); @@ -1383,9 +1379,9 @@ ev_window_setup_default (EvWindow *ev_window) GSettings *settings = priv->default_settings; /* Sidebar */ - gtk_paned_set_position (GTK_PANED (priv->hpaned), - g_settings_get_int (settings, "sidebar-size")); - gtk_widget_set_visible (priv->sidebar, g_settings_get_boolean (settings, "show-sidebar")); + adw_overlay_split_view_set_show_sidebar (priv->split_view, + g_settings_get_boolean (settings, "show-sidebar")); + g_signal_emit_by_name (priv->split_view, "notify::show-sidebar", NULL); /* Document model */ ev_document_model_set_continuous (model, g_settings_get_boolean (settings, "continuous")); @@ -2666,6 +2662,8 @@ ev_window_open_copy_at_dest (EvWindow *window, dest, 0, NULL); gtk_widget_set_visible (new_priv->sidebar, gtk_widget_is_visible (priv->sidebar)); + adw_overlay_split_view_set_show_sidebar (new_priv->split_view, + adw_overlay_split_view_get_show_sidebar (priv->split_view)); gtk_window_present (GTK_WINDOW (new_window)); } @@ -3838,8 +3836,6 @@ ev_window_save_settings (EvWindow *ev_window) } g_settings_set_boolean (settings, "show-sidebar", gtk_widget_get_visible (priv->sidebar)); - g_settings_set_int (settings, "sidebar-size", - gtk_paned_get_position (GTK_PANED (priv->hpaned))); g_settings_set_string (settings, "sidebar-page", ev_sidebar_get_visible_child_name (EV_SIDEBAR (priv->sidebar))); g_settings_set_boolean (settings, "enable-spellchecking", @@ -4298,18 +4294,6 @@ ev_window_cmd_edit_copy (GSimpleAction *action, ev_view_copy (EV_VIEW (priv->view)); } -static void -sidebar_position_changed_cb (GObject *object, - GParamSpec *pspec, - EvWindow *ev_window) -{ - EvWindowPrivate *priv = GET_PRIVATE (ev_window); - - if (priv->metadata && !ev_window_is_empty (ev_window)) - ev_metadata_set_int (priv->metadata, "sidebar_size", - gtk_paned_get_position (GTK_PANED (object))); -} - static void ev_window_update_fullscreen_action (EvWindow *window, gboolean fullscreen) @@ -5073,7 +5057,7 @@ ev_window_view_cmd_toggle_sidebar (GSimpleAction *action, show_side_pane = g_variant_get_boolean (state); g_simple_action_set_state (action, g_variant_new_boolean (show_side_pane)); - gtk_widget_set_visible (priv->sidebar, show_side_pane); + adw_overlay_split_view_set_show_sidebar (priv->split_view, show_side_pane); } static void @@ -5092,14 +5076,14 @@ sidebar_current_page_changed_cb (EvSidebar *ev_sidebar, } static void -sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, - GParamSpec *pspec, - EvWindow *ev_window) +sidebar_visibility_changed_cb (AdwOverlaySplitView *split_view, + GParamSpec *pspec, + EvWindow *ev_window) { EvWindowPrivate *priv = GET_PRIVATE (ev_window); if (!EV_WINDOW_IS_PRESENTATION (priv)) { - gboolean visible = gtk_widget_get_visible (GTK_WIDGET (ev_sidebar)); + gboolean visible = adw_overlay_split_view_get_show_sidebar (split_view); g_action_group_change_action_state (G_ACTION_GROUP (ev_window), "show-side-pane", g_variant_new_boolean (visible)); @@ -5492,7 +5476,7 @@ ev_window_show_find_bar (EvWindow *ev_window, { EvWindowPrivate *priv = GET_PRIVATE (ev_window); - if (gtk_paned_get_start_child (GTK_PANED (priv->hpaned)) == priv->find_sidebar) { + if (adw_overlay_split_view_get_sidebar (priv->split_view) == priv->find_sidebar) { gtk_widget_grab_focus (priv->search_box); return; } @@ -5507,7 +5491,7 @@ ev_window_show_find_bar (EvWindow *ev_window, ev_history_freeze (priv->history); - gtk_paned_set_start_child (GTK_PANED (priv->hpaned), priv->find_sidebar); + adw_overlay_split_view_set_sidebar (priv->split_view, priv->find_sidebar); gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->search_bar), TRUE); gtk_widget_grab_focus (priv->search_box); @@ -5527,10 +5511,10 @@ ev_window_close_find_bar (EvWindow *ev_window) { EvWindowPrivate *priv = GET_PRIVATE (ev_window); - if (gtk_paned_get_start_child (GTK_PANED (priv->hpaned)) != priv->find_sidebar) + if (adw_overlay_split_view_get_sidebar (priv->split_view) != priv->find_sidebar) return; - gtk_paned_set_start_child (GTK_PANED (priv->hpaned), priv->sidebar); + adw_overlay_split_view_set_sidebar (priv->split_view, priv->sidebar); gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->search_bar), FALSE); gtk_widget_grab_focus (priv->view); @@ -7007,7 +6991,7 @@ ev_window_class_init (EvWindowClass *ev_window_class) gtk_widget_class_bind_template_child_private(widget_class, EvWindow, main_box); gtk_widget_class_bind_template_child_private(widget_class, EvWindow, toolbar); gtk_widget_class_bind_template_child_private(widget_class, EvWindow, sidebar); - gtk_widget_class_bind_template_child_private(widget_class, EvWindow, hpaned); + gtk_widget_class_bind_template_child_private(widget_class, EvWindow, split_view); gtk_widget_class_bind_template_child_private(widget_class, EvWindow, scrolled_window); gtk_widget_class_bind_template_child_private(widget_class, EvWindow, loading_message); gtk_widget_class_bind_template_child_private(widget_class, EvWindow, password_view); @@ -7039,7 +7023,6 @@ ev_window_class_init (EvWindowClass *ev_window_class) gtk_widget_class_bind_template_callback (widget_class, window_size_changed_cb); gtk_widget_class_bind_template_callback (widget_class, sidebar_visibility_changed_cb); gtk_widget_class_bind_template_callback (widget_class, sidebar_current_page_changed_cb); - gtk_widget_class_bind_template_callback (widget_class, sidebar_position_changed_cb); gtk_widget_class_bind_template_callback (widget_class, ev_window_button_pressed); gtk_widget_class_bind_template_callback (widget_class, ev_window_drag_data_received); gtk_widget_class_bind_template_callback (widget_class, view_popup_hide_cb); @@ -7159,19 +7142,14 @@ gint ev_window_get_metadata_sidebar_size (EvWindow *ev_window) { EvWindowPrivate *priv; - gint sidebar_size; + GtkWidget *sidebar; g_return_val_if_fail (EV_WINDOW (ev_window), 0); priv = GET_PRIVATE (ev_window); + sidebar = adw_overlay_split_view_get_sidebar (priv->split_view); - if (!priv->metadata) - return 0; - - if (ev_metadata_get_int (priv->metadata, "sidebar_size", &sidebar_size)) - return sidebar_size; - - return 0; + return gtk_widget_get_width (GTK_WIDGET (sidebar)); } /* Sets the position of the divider between the sidebar and the main view */ @@ -7185,5 +7163,6 @@ ev_window_set_divider_position (EvWindow *ev_window, priv = GET_PRIVATE (ev_window); - gtk_paned_set_position (GTK_PANED (priv->hpaned), sidebar_width); + /* TODO: Rework the dual mode handling to work with AdwOverlaySplitView */ + // gtk_paned_set_position (GTK_PANED (priv->hpaned), sidebar_width); } diff --git a/shell/evince-sidebar-bookmarks.ui b/shell/evince-sidebar-bookmarks.ui index 632b3cca4..e8f66d77f 100644 --- a/shell/evince-sidebar-bookmarks.ui +++ b/shell/evince-sidebar-bookmarks.ui @@ -37,7 +37,9 @@ - + diff --git a/shell/evince-sidebar-links.ui b/shell/evince-sidebar-links.ui index 48cc67c1a..0f4ee83c2 100644 --- a/shell/evince-sidebar-links.ui +++ b/shell/evince-sidebar-links.ui @@ -56,6 +56,9 @@ + diff --git a/shell/evince-sidebar-thumbnails.ui b/shell/evince-sidebar-thumbnails.ui index a624d0b6a..8dd633d3b 100644 --- a/shell/evince-sidebar-thumbnails.ui +++ b/shell/evince-sidebar-thumbnails.ui @@ -35,6 +35,9 @@ 0 + diff --git a/shell/evince-window.ui b/shell/evince-window.ui index dd3c56bd3..684587fe3 100644 --- a/shell/evince-window.ui +++ b/shell/evince-window.ui @@ -74,16 +74,12 @@ - - horizontal - True - fill - 132 - - + + 250 + + model - @@ -175,8 +171,8 @@ - - + + @@ -236,11 +232,7 @@ - - - False + -- GitLab From 4dbddd3915963a552e864e046db49f62ee0e41ee Mon Sep 17 00:00:00 2001 From: Christopher Davis Date: Thu, 11 Jan 2024 19:29:05 -0500 Subject: [PATCH 10/19] shell: Use AdwToolbarView for sidebar --- shell/ev-sidebar.c | 2 +- shell/ev-sidebar.h | 6 +++--- shell/evince-sidebar.ui | 37 ++++++++++++++++++------------------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/shell/ev-sidebar.c b/shell/ev-sidebar.c index 222b098b9..58e8d98e0 100644 --- a/shell/ev-sidebar.c +++ b/shell/ev-sidebar.c @@ -57,7 +57,7 @@ static void ev_sidebar_child_change_cb (GObject *gobject, static void ev_sidebar_buildable_iface_init (GtkBuildableIface *iface); static GtkBuildableIface *parent_buildable_iface; -G_DEFINE_TYPE_WITH_CODE (EvSidebar, ev_sidebar, GTK_TYPE_BOX, +G_DEFINE_TYPE_WITH_CODE (EvSidebar, ev_sidebar, ADW_TYPE_BIN, G_ADD_PRIVATE (EvSidebar) G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, ev_sidebar_buildable_iface_init)) diff --git a/shell/ev-sidebar.h b/shell/ev-sidebar.h index 31423f7a6..8a65f26a5 100644 --- a/shell/ev-sidebar.h +++ b/shell/ev-sidebar.h @@ -25,17 +25,17 @@ #pragma once -#include +#include #include "ev-document-model.h" G_BEGIN_DECLS #define EV_TYPE_SIDEBAR (ev_sidebar_get_type()) -G_DECLARE_FINAL_TYPE (EvSidebar, ev_sidebar, EV, SIDEBAR, GtkBox); +G_DECLARE_FINAL_TYPE (EvSidebar, ev_sidebar, EV, SIDEBAR, AdwBin); struct _EvSidebar { - GtkBox base_instance; + AdwBin base_instance; }; GtkWidget *ev_sidebar_new (void); diff --git a/shell/evince-sidebar.ui b/shell/evince-sidebar.ui index 80818c2fd..6f906ce31 100644 --- a/shell/evince-sidebar.ui +++ b/shell/evince-sidebar.ui @@ -1,24 +1,23 @@ -