Implement focused widget saving between iconify/deiconify events in
[claws.git] / src / plugins / notification / notification_trayicon.c
index 584d5153c63fd2ac4a9a4756abc2de7af9df2ede..68029584b4a6330834099db15c2925966208b4e1 100644 (file)
@@ -41,7 +41,7 @@
 #include "prefs_common.h"
 #include "alertpanel.h"
 #include "gtk/menu.h"
-#ifndef USE_NEW_ADDRBOOK
+#ifndef USE_ALT_ADDRBOOK
     #include "addressbook.h"
     #include "addrindex.h"
 #else
@@ -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" },
@@ -269,11 +270,8 @@ void notification_update_trayicon()
   buf = g_strdup_printf(_("New %d, Unread: %d, Total: %d"),
                        count.new_msgs, count.unread_msgs,
                        count.total_msgs);
-#if GTK_CHECK_VERSION(2,16,0)
   gtk_status_icon_set_tooltip_text(trayicon, buf);
-#else
-  gtk_status_icon_set_tooltip(trayicon, buf);
-#endif
+
   g_free(buf);
 
   /* Pixmap */
@@ -313,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;
@@ -420,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,
@@ -443,14 +451,8 @@ static void notification_trayicon_on_popup_menu(GtkStatusIcon *status_icon,
 
   updating_menu = FALSE;
 
-#ifndef G_OS_WIN32
   gtk_menu_popup(GTK_MENU(traymenu_popup), NULL, NULL, NULL, NULL,
                 button, activate_time);
-#else
-  /* http://bugzilla.gnome.org/show_bug.cgi?id=552642 */
-  gtk_menu_popup(GTK_MENU(traymenu_popup), NULL, NULL, NULL, NULL,
-                0, activate_time);
-#endif
 }
 
 static gboolean notification_trayicon_on_size_changed(GtkStatusIcon *icon,
@@ -481,7 +483,7 @@ static void trayicon_compose_acc_cb(GtkMenuItem *menuitem, gpointer data)
 
 static void trayicon_addressbook_cb(GtkAction *action, gpointer data)
 {
-#ifndef USE_NEW_ADDRBOOK
+#ifndef USE_ALT_ADDRBOOK
     addressbook_open(NULL);
 #else
     GError* error = NULL;
@@ -657,7 +659,7 @@ static gboolean notification_trayicon_popup_create(MsgInfo *msginfo,
 
   /* Icon */
   pixbuf = NULL;
-#ifndef USE_NEW_ADDRBOOK
+#ifndef USE_ALT_ADDRBOOK
   if(msginfo && msginfo->from) {
     gchar *icon_path;
     icon_path = addrindex_get_picture_file(msginfo->from);