Kaydet (Commit) dd4c851c authored tarafından Colomban Wendling's avatar Colomban Wendling

Fix focusing the Terminal tab in the message window

Use more generic code to not fall into the same issue next time layout
changes, and to potentially support plugin tabs in the message window.

Fixes #1198.
üst 095d8895
......@@ -1738,14 +1738,43 @@ static void focus_sidebar(void)
}
static GtkWidget *find_focus_widget(GtkWidget *widget)
{
GtkWidget *focus = NULL;
if (GTK_IS_BIN(widget)) /* optimized simple case */
focus = find_focus_widget(gtk_bin_get_child(GTK_BIN(widget)));
else if (GTK_IS_CONTAINER(widget))
{
GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
GList *node;
for (node = children; node && ! focus; node = node->next)
focus = find_focus_widget(node->data);
g_list_free(children);
}
/* Some containers handled above might not have children and be what we want to focus
* (e.g. GtkTreeView), so focus that if possible and we don't have anything better */
if (! focus && gtk_widget_get_can_focus(widget))
focus = widget;
return focus;
}
static void focus_msgwindow(void)
{
if (ui_prefs.msgwindow_visible)
{
gint page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(msgwindow.notebook));
GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(msgwindow.notebook), page_num);
GtkWidget *widget = gtk_notebook_get_nth_page(GTK_NOTEBOOK(msgwindow.notebook), page_num);
gtk_widget_grab_focus(gtk_bin_get_child(GTK_BIN(page)));
widget = find_focus_widget(widget);
if (widget)
gtk_widget_grab_focus(widget);
else
utils_beep();
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment