Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keyboard accel fixes and Home key support #1294

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions data/gtk/help-overlay.ui
Original file line number Diff line number Diff line change
@@ -75,6 +75,12 @@
<property name="action-name">app.scroll-page-down</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="title" translatable="yes">Scroll to Top</property>
<property name="action-name">app.scroll-page-to-top</property>
</object>
</child>
</object>
</child>
<child>
72 changes: 62 additions & 10 deletions src/Application.vala
Original file line number Diff line number Diff line change
@@ -78,6 +78,7 @@ namespace Tuba {
{ "back-home", back_home_activated },
{ "scroll-page-down", scroll_view_page_down },
{ "scroll-page-up", scroll_view_page_up },
{ "scroll-page-to-top", scroll_view_page_to_top },
{ "goto-notifications", goto_notifications },
{ "open-status-url", open_status_url, "s" },
{ "answer-follow-request", answer_follow_request, "(ssb)" },
@@ -312,32 +313,69 @@ namespace Tuba {
var style_manager = Adw.StyleManager.get_default ();
ColorScheme color_scheme = (ColorScheme) settings.get_enum ("color-scheme");
style_manager.color_scheme = color_scheme.to_adwaita_scheme ();
enable_window_accels ();
enable_nav_accels ();
add_action_entries (APP_ENTRIES, this);

if (settings.monitor_network)
network_monitor.network_changed.connect (on_network_change);

if (settings.proxy != "")
on_proxy_change ();
settings.notify ["proxy"].connect (on_proxy_notify);

if (settings.analytics) app.update_analytics.begin ();
app.update_contributors.begin ();
}

public void enable_window_accels () {
#if DEV_MODE
set_accels_for_action ("app.dev-only-window", {"F2"});
#endif
set_accels_for_action ("app.about", {"F1"});
set_accels_for_action ("app.open-preferences", {"<Ctrl>comma"});
set_accels_for_action ("app.compose", {"<Ctrl>T", "<Ctrl>N"});
set_accels_for_action ("app.back", {"<Alt>BackSpace", "<Alt>KP_Left"});
set_accels_for_action ("app.refresh", {"<Ctrl>R", "F5"});
set_accels_for_action ("app.search", {"<Ctrl>F"});
set_accels_for_action ("app.quit", {"<Ctrl>Q"});
set_accels_for_action ("window.close", {"<Ctrl>W"});
}

public void disable_window_accels () {
#if DEV_MODE
set_accels_for_action ("app.dev-only-window", {});
#endif
set_accels_for_action ("app.about", {});
set_accels_for_action ("app.open-preferences", {});
set_accels_for_action ("app.compose", {});
set_accels_for_action ("app.search", {});
set_accels_for_action ("app.quit", {});
set_accels_for_action ("window.close", {});
}

public void enable_nav_accels () {
set_accels_for_action ("app.back", {"<Alt>BackSpace", "<Alt>KP_Left"});
set_accels_for_action ("app.refresh", {"<Ctrl>R", "F5"});
set_accels_for_action ("app.back-home", {"<Alt>Home"});
set_accels_for_action ("app.scroll-page-down", {"Page_Down"});
set_accels_for_action ("app.scroll-page-up", {"Page_Up"});
add_action_entries (APP_ENTRIES, this);
set_accels_for_action ("app.scroll-page-to-top", {"Home"});
}

if (settings.monitor_network)
network_monitor.network_changed.connect (on_network_change);
public void disable_nav_accels () {
set_accels_for_action ("app.back", {});
set_accels_for_action ("app.refresh", {});
set_accels_for_action ("app.back-home", {});
set_accels_for_action ("app.scroll-page-down", {});
set_accels_for_action ("app.scroll-page-up", {});
set_accels_for_action ("app.scroll-page-to-top", {});
}

if (settings.proxy != "")
on_proxy_change ();
settings.notify ["proxy"].connect (on_proxy_notify);
public void enable_home_accel () {
set_accels_for_action ("app.scroll-page-to-top", {"Home"});
}

if (settings.analytics) app.update_analytics.begin ();
app.update_contributors.begin ();
public void disable_home_accel () {
set_accels_for_action ("app.scroll-page-to-top", {});
}

private void on_proxy_change (bool recover = false) {
@@ -497,6 +535,10 @@ namespace Tuba {
main_window.go_back_to_start ();
}

void scroll_view_page_to_top () {
main_window.scroll_view_to_top ();
}

void scroll_view_page_down () {
main_window.scroll_view_page ();
}
@@ -641,6 +683,11 @@ namespace Tuba {
// Static functions seem to avoid this peculiar behavior.
// dialog.translator_credits = Build.TRANSLATOR != " " ? Build.TRANSLATOR : null;

app.disable_window_accels ();
app.disable_nav_accels ();

dialog.closed.connect (on_about_closed);

dialog.present (main_window);

GLib.Idle.add (() => {
@@ -651,6 +698,11 @@ namespace Tuba {
});
}

public void on_about_closed () {
app.enable_window_accels ();
app.enable_nav_accels ();
}

public Adw.AlertDialog inform (string text, string? msg = null) {
var dlg = new Adw.AlertDialog (
text,
6 changes: 6 additions & 0 deletions src/Dialogs/Composer/Dialog.vala
Original file line number Diff line number Diff line change
@@ -224,9 +224,15 @@ public class Tuba.Dialogs.Compose : Adw.Dialog {

stack.notify["visible-child"].connect (on_view_switched);
this.close_attempt.connect (on_exit);

app.disable_window_accels ();
app.disable_nav_accels ();
}

~Compose () {
app.enable_window_accels ();
app.enable_nav_accels ();

debug ("Destroying composer");
t_pages = {};
}
7 changes: 7 additions & 0 deletions src/Dialogs/MainWindow.vala
Original file line number Diff line number Diff line change
@@ -222,6 +222,13 @@ public class Tuba.Dialogs.MainWindow: Adw.ApplicationWindow, Saveable {
}
}

public void scroll_view_to_top () {
var c_view = navigation_view.visible_page.child as Views.Base;
if (c_view != null) {
c_view.on_scroll_to_top ();
}
}

// public override bool delete_event (Gdk.EventAny event) {
// window = null;
// return app.on_window_closed ();
13 changes: 13 additions & 0 deletions src/Dialogs/NewAccount.vala
Original file line number Diff line number Diff line change
@@ -62,10 +62,23 @@ public class Tuba.Dialogs.NewAccount: Adw.Window {
manual_auth_label.activate_link.connect (on_manual_auth);

reset ();

app.disable_window_accels ();
app.disable_nav_accels ();

this.close_request.connect (on_new_account_closed);

present ();
instance_entry.grab_focus ();
}

public bool on_new_account_closed () {
app.enable_window_accels ();
app.enable_nav_accels ();

return false;
}

private void add_toast (string content, uint timeout = 0) {
toast_overlay.add_toast (new Adw.Toast (content) {
timeout = timeout
5 changes: 5 additions & 0 deletions src/Dialogs/Preferences.vala
Original file line number Diff line number Diff line change
@@ -205,6 +205,8 @@ public class Tuba.Dialogs.Preferences : Adw.PreferencesDialog {
setup_notification_mutes ();
setup_filters ();
bind ();
app.disable_window_accels ();
app.disable_nav_accels ();
closed.connect (on_window_closed);
}

@@ -393,6 +395,9 @@ public class Tuba.Dialogs.Preferences : Adw.PreferencesDialog {

if (settings.analytics) app.update_analytics.begin ();
app.update_contributors.begin ();

app.enable_window_accels ();
app.enable_nav_accels ();
}

protected class AnalyticsDialog : Adw.Dialog {
7 changes: 7 additions & 0 deletions src/Dialogs/ProfileEdit.vala
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[GtkTemplate (ui = "/dev/geopjr/Tuba/ui/dialogs/profile_edit.ui")]
public class Tuba.Dialogs.ProfileEdit : Adw.Dialog {
~ProfileEdit () {
app.enable_window_accels ();
app.enable_nav_accels ();

debug (@"Destroying ProfileEdit for $(profile.handle)");
}

@@ -106,6 +109,10 @@ public class Tuba.Dialogs.ProfileEdit : Adw.Dialog {
cepbtn.visible = true;
bio_row.bind_property ("expanded", cepbtn, "sensitive", GLib.BindingFlags.SYNC_CREATE);
}

app.disable_window_accels ();
app.disable_nav_accels ();

}

protected void update_style_scheme () {
2 changes: 1 addition & 1 deletion src/Views/Base.vala
Original file line number Diff line number Diff line change
@@ -173,7 +173,7 @@ public class Tuba.Views.Base : Adw.BreakpointBin {
header.show_start_title_buttons = !header.show_start_title_buttons;
}

private void on_scroll_to_top () {
public virtual void on_scroll_to_top () {
scrolled.scroll_child (Gtk.ScrollType.START, false);
}

13 changes: 13 additions & 0 deletions src/Views/Lists.vala
Original file line number Diff line number Diff line change
@@ -216,6 +216,11 @@ public class Tuba.Views.Lists : Views.Timeline {
placeholder_text = _("New list title")
};

var focus_controller = new Gtk.EventControllerFocus ();
focus_controller.enter.connect (on_entry_focus_enter);
focus_controller.leave.connect (on_entry_focus_leave);
add_controller (focus_controller);

var add_action_bar = new Gtk.ActionBar () {
css_classes = { "ttl-box-no-shadow" }
};
@@ -245,6 +250,14 @@ public class Tuba.Views.Lists : Views.Timeline {
add_button.sensitive = child_entry.text.length > 0;
}

private void on_entry_focus_enter () {
app.disable_home_accel ();
}

private void on_entry_focus_leave () {
app.enable_home_accel ();
}

~Lists () {
debug ("Destroying Lists view");
}
13 changes: 13 additions & 0 deletions src/Views/Search.vala
Original file line number Diff line number Diff line change
@@ -27,6 +27,11 @@ public class Tuba.Views.Search : Views.TabbedBase {
entry.changed.connect (on_entry_change);
entry.activate.connect (on_entry_activated);

var focus_controller = new Gtk.EventControllerFocus ();
focus_controller.enter.connect (on_entry_focus_enter);
focus_controller.leave.connect (on_entry_focus_leave);
add_controller (focus_controller);

var advanced_search = new Gtk.Button.from_icon_name ("tuba-funnel-symbolic") {
tooltip_text = _("Advanced Search"),
css_classes = {"flat", "circular", "entry-button"},
@@ -55,6 +60,14 @@ public class Tuba.Views.Search : Views.TabbedBase {
entry.grab_focus ();
}

private void on_entry_focus_enter () {
app.disable_home_accel ();
}

private void on_entry_focus_leave () {
app.enable_home_accel ();
}

private void on_entry_activated () {
on_entry_activate ();
}
6 changes: 6 additions & 0 deletions src/Views/TabbedBase.vala
Original file line number Diff line number Diff line change
@@ -157,6 +157,12 @@ public class Tuba.Views.TabbedBase : Views.Base {
base_status = null;
}

public override void on_scroll_to_top () {
var c_scrolled = stack.visible_child as Views.Base;
if (c_scrolled != null)
c_scrolled.on_scroll_to_top ();
}

public override void scroll_page (bool up = false) {
var c_scrolled = stack.visible_child as Views.Base;
if (c_scrolled != null)