Merge pull request #1200 from b4n/terminal-focus
Fix focusing the Terminal tab in the message window
This commit is contained in:
commit
21845805c6
@ -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)
|
static void focus_msgwindow(void)
|
||||||
{
|
{
|
||||||
if (ui_prefs.msgwindow_visible)
|
if (ui_prefs.msgwindow_visible)
|
||||||
{
|
{
|
||||||
gint page_num = gtk_notebook_get_current_page(GTK_NOTEBOOK(msgwindow.notebook));
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user