Skip to content

Keyboard accel fixes and Home key support #1294

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

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
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
Expand Up @@ -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>
Expand Down
72 changes: 62 additions & 10 deletions src/Application.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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)" },
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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 ();
}
Expand Down Expand Up @@ -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 (() => {
Expand All @@ -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,
Expand Down
6 changes: 6 additions & 0 deletions src/Dialogs/Composer/Dialog.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {};
}
Expand Down
7 changes: 7 additions & 0 deletions src/Dialogs/MainWindow.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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 ();
Expand Down
13 changes: 13 additions & 0 deletions src/Dialogs/NewAccount.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions src/Dialogs/Preferences.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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 {
Expand Down
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)");
}

Expand Down Expand Up @@ -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 () {
Expand Down
2 changes: 1 addition & 1 deletion src/Views/Base.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
13 changes: 13 additions & 0 deletions src/Views/Lists.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
};
Expand Down Expand Up @@ -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");
}
Expand Down
13 changes: 13 additions & 0 deletions src/Views/Search.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand Down Expand Up @@ -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 ();
}
Expand Down
6 changes: 6 additions & 0 deletions src/Views/TabbedBase.vala
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Loading