commit aafdc441c2f5ad81fe5a65cb5a63a97977581c2c
parent 3fa7a0c630a66c1c33eab441221b212d775e6027
Author: Pawel Pekala <c0rn@o2.pl>
Date: Thu, 9 Jun 2016 20:59:37 +0200
Implement focused widget saving between iconify/deiconify events in
trayicon notification. Without this focus is lost on deiconify and this
can be painful to keyboard users. This is similar to my old work on
trayicon plugin I've done in the past.
Diffstat:
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/plugins/notification/notification_trayicon.c b/src/plugins/notification/notification_trayicon.c
@@ -108,6 +108,7 @@ G_LOCK_DEFINE_STATIC(trayicon_popup);
static GtkStatusIcon *trayicon;
static gboolean updating_menu = FALSE;
static GtkWidget *traymenu_popup;
+static GtkWidget *focused_widget = NULL;
static GtkActionEntry trayicon_popup_menu_entries[] = {
{"SysTrayiconPopup", NULL, "SysTrayiconPopup" },
@@ -310,8 +311,10 @@ gboolean notification_trayicon_main_window_close(gpointer source, gpointer data)
MainWindow *mainwin = mainwindow_get_mainwindow();
*close_allowed = FALSE;
- if(mainwin && gtk_widget_get_visible(GTK_WIDGET(mainwin->window)))
+ if(mainwin && gtk_widget_get_visible(GTK_WIDGET(mainwin->window))) {
+ focused_widget = gtk_window_get_focus(GTK_WINDOW(mainwin->window));
main_window_hide(mainwin);
+ }
}
}
return FALSE;
@@ -417,7 +420,15 @@ static GdkPixbuf* notification_trayicon_create(void)
void notification_trayicon_on_activate(GtkStatusIcon *status_icon, gpointer user_data)
{
+ MainWindow *mainwin = mainwindow_get_mainwindow();
+
+ if(mainwin && gtk_widget_get_visible(GTK_WIDGET(mainwin->window)) == TRUE)
+ focused_widget = gtk_window_get_focus(GTK_WINDOW(mainwin->window));
+
notification_toggle_hide_show_window();
+
+ if(mainwin && gtk_widget_get_visible(GTK_WIDGET(mainwin->window)) == TRUE)
+ gtk_window_set_focus(GTK_WINDOW(mainwin->window), focused_widget);
}
static void notification_trayicon_on_popup_menu(GtkStatusIcon *status_icon,