diff --git a/src/client/application/application-main-window.vala b/src/client/application/application-main-window.vala
index d37f8eff..46f0d929 100644
--- a/src/client/application/application-main-window.vala
+++ b/src/client/application/application-main-window.vala
@@ -555,7 +555,7 @@ public class Application.MainWindow :
activate_action(get_window_action(ACTION_CONVERSATION_DOWN));
break;
default:
- this.get_window().beep();
+ error_bell();
break;
}
}
@@ -957,6 +957,13 @@ public class Application.MainWindow :
/** Displays and focuses the search bar for the window. */
public void show_search_bar(string? text = null) {
+ if (!this.is_conversation_list_shown) {
+ if (this.outer_leaflet.folded) {
+ this.outer_leaflet.set_visible_child_name(INNER_LEAFLET);
+ }
+ this.inner_leaflet.set_visible_child_name(CONVERSATION_LIST);
+ }
+
this.search_bar.grab_focus();
if (text != null) {
this.search_bar.entry.text = text;
@@ -1741,7 +1748,8 @@ public class Application.MainWindow :
}
private void load_more() {
- if (this.conversations != null) {
+ if (this.is_conversation_list_shown &&
+ this.conversations != null) {
this.conversations.min_window_count += MIN_CONVERSATION_COUNT;
}
}
@@ -1806,7 +1814,7 @@ public class Application.MainWindow :
bool multiple = (count == MULTIPLE);
get_window_action(ACTION_FIND_IN_CONVERSATION).set_enabled(
- sensitive && !multiple
+ sensitive && !multiple && this.is_conversation_viewer_shown
);
bool reply_sensitive = (
@@ -1845,11 +1853,6 @@ public class Application.MainWindow :
sensitive && (selected_folder is Geary.FolderSupport.Remove)
);
- this.update_context_dependent_actions.begin(sensitive);
- update_conversation_list_actions_revealer(count);
- }
-
- private void update_conversation_list_actions_revealer(ConversationCount count) {
switch (count) {
case NONE:
this.conversation_list_actions_revealer.reveal_child = false;
@@ -1863,6 +1866,8 @@ public class Application.MainWindow :
this.conversation_list_actions_revealer.reveal_child = true;
break;
}
+
+ this.update_context_dependent_actions.begin(sensitive);
}
private void update_trash_action() {
@@ -1978,7 +1983,7 @@ public class Application.MainWindow :
if (focus != null) {
focus.focus(TAB_FORWARD);
} else {
- get_window().beep();
+ error_bell();
}
}
@@ -2018,7 +2023,7 @@ public class Application.MainWindow :
if (focus != null) {
focus.focus(TAB_FORWARD);
} else {
- get_window().beep();
+ error_bell();
}
}
@@ -2035,7 +2040,7 @@ public class Application.MainWindow :
if (action != null && action.get_enabled()) {
action.activate(null);
} else {
- get_window().beep();
+ error_bell();
}
}
@@ -2105,13 +2110,36 @@ public class Application.MainWindow :
[GtkCallback]
private void on_outer_leaflet_changed() {
int selected = this.conversation_list_view.get_selected().size;
- update_conversation_list_actions_revealer(
+ update_conversation_actions(
ConversationCount.for_size(selected)
);
- if (this.has_composer &&
- this.outer_leaflet.folded &&
- (this.is_folder_list_shown || this.is_conversation_list_shown)) {
- close_composer(false, false);
+ if (this.outer_leaflet.folded) {
+ // Ensure something useful gets the keyboard focus, given
+ // GNOME/libhandy#179
+ if (this.is_conversation_list_shown) {
+ this.conversation_list_view.grab_focus();
+ } else if (this.is_folder_list_shown) {
+ this.folder_list.grab_focus();
+ }
+
+ // Close any open composer that is no longer visible
+ if (this.has_composer &&
+ (this.is_folder_list_shown || this.is_conversation_list_shown)) {
+ close_composer(false, false);
+ }
+ }
+ }
+
+ [GtkCallback]
+ private void on_inner_leaflet_changed() {
+ if (this.inner_leaflet.folded) {
+ // Ensure something useful gets the keyboard focus, given
+ // GNOME/libhandy#179
+ if (this.is_conversation_list_shown) {
+ this.conversation_list_view.grab_focus();
+ } else if (this.is_folder_list_shown) {
+ this.folder_list.grab_focus();
+ }
}
}
@@ -2395,7 +2423,7 @@ public class Application.MainWindow :
} else if (this.is_conversation_viewer_shown) {
this.main_toolbar.shown_actions.show_copy_menu();
} else {
- this.error_bell();
+ error_bell();
}
}
@@ -2406,7 +2434,7 @@ public class Application.MainWindow :
} else if (this.is_conversation_viewer_shown) {
this.main_toolbar.shown_actions.show_move_menu();
} else {
- this.error_bell();
+ error_bell();
}
}
diff --git a/src/client/sidebar/sidebar-tree.vala b/src/client/sidebar/sidebar-tree.vala
index c90285d1..f90f1c25 100644
--- a/src/client/sidebar/sidebar-tree.vala
+++ b/src/client/sidebar/sidebar-tree.vala
@@ -853,39 +853,22 @@ public class Sidebar.Tree : Gtk.TreeView {
return base.button_press_event(event);
}
- public bool is_keypress_interpreted(Gdk.EventKey event) {
- switch (Gdk.keyval_name(event.keyval)) {
- case "F2":
- case "Delete":
- case "Return":
- case "KP_Enter":
- return true;
-
- default:
- return false;
- }
- }
-
public override bool key_press_event(Gdk.EventKey event) {
+ bool handled = false;
switch (Gdk.keyval_name(event.keyval)) {
- case "Return":
- case "KP_Enter":
- Gtk.TreePath? path = get_current_path();
- if (path != null)
- toggle_branch_expansion(path);
-
- return true;
-
case "F2":
- return rename_in_place();
+ handled = rename_in_place();
+ break;
case "Delete":
Gtk.TreePath? path = get_current_path();
-
- return (path != null) ? destroy_path(path) : false;
+ handled = (path != null) ? destroy_path(path) : false;
+ break;
}
-
- return base.key_press_event(event);
+ if (!handled) {
+ handled = base.key_press_event(event);
+ }
+ return handled;
}
public bool rename_entry_in_place(Sidebar.Entry entry) {
diff --git a/ui/application-main-window.ui b/ui/application-main-window.ui
index 289c6013..374c14c2 100644
--- a/ui/application-main-window.ui
+++ b/ui/application-main-window.ui
@@ -30,6 +30,8 @@
True
True
over
+
+