]> granicus.if.org Git - handbrake/commitdiff
LinGui: modify behavior of system tray icon
authorjstebbins <jstebbins.hb@gmail.com>
Fri, 26 Jun 2009 04:31:01 +0000 (04:31 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Fri, 26 Jun 2009 04:31:01 +0000 (04:31 +0000)
- clicking raises hb if iconified or obscured, iconifies if hb unobscured
- when hb is iconified via the system tray icon, remove it from taskbar
- preference option now enables/disables system tray icon

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2624 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/callbacks.c
gtk/src/ghb.ui
gtk/src/internal_defaults.xml
gtk/src/main.c
gtk/src/settings.h

index 4d2ad09263fee39162f969e6806b7011d73f0c1c..ae30c9ab0c373e3fe27357c034d8191c9d54d7ba 100644 (file)
@@ -2932,18 +2932,19 @@ use_m4v_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
 }
 
 G_MODULE_EXPORT void
-skip_taskbar_cb(GtkWidget *widget, signal_user_data_t *ud)
+show_status_cb(GtkWidget *widget, signal_user_data_t *ud)
 {
-       g_debug("pref_changed_cb");
+       g_debug("show_status_cb");
        ghb_widget_to_setting (ud->settings, widget);
        ghb_check_dependency(ud, widget);
        const gchar *name = gtk_widget_get_name(widget);
        ghb_pref_save(ud->settings, name);
 
-       GtkWindow *window;
-       window = GTK_WINDOW(GHB_WIDGET (ud->builder, "hb_window"));
-       gtk_window_set_skip_taskbar_hint(window, 
-                       ghb_settings_get_boolean(ud->settings, "skip_taskbar"));
+       GtkStatusIcon *si;
+
+       si = GTK_STATUS_ICON(GHB_OBJECT (ud->builder, "hb_status"));
+       gtk_status_icon_set_visible(si,
+                       ghb_settings_get_boolean(ud->settings, "show_status"));
 }
 
 G_MODULE_EXPORT void
@@ -3801,13 +3802,35 @@ ghb_check_update(signal_user_data_t *ud)
        return NULL;
 }
 
+G_MODULE_EXPORT gboolean
+hb_visibility_event_cb(
+       GtkWidget *widget, 
+       GdkEventVisibility *vs, 
+       signal_user_data_t *ud)
+{
+       ud->hb_visibility = vs->state;
+       return FALSE;
+}
+
 G_MODULE_EXPORT void
 status_activate_cb(GtkStatusIcon *si, signal_user_data_t *ud)
 {
        GtkWindow *window;
+       GdkWindowState state;
 
        window = GTK_WINDOW(GHB_WIDGET(ud->builder, "hb_window"));
-       gtk_window_present(window);
+       state = gdk_window_get_state(GTK_WIDGET(window)->window);
+       if ((state & GDK_WINDOW_STATE_ICONIFIED) ||
+               (ud->hb_visibility != GDK_VISIBILITY_UNOBSCURED))
+       {
+               gtk_window_present(window);
+               gtk_window_set_skip_taskbar_hint(window, FALSE);
+       }
+       else
+       {
+               gtk_window_set_skip_taskbar_hint(window, TRUE);
+               gtk_window_iconify(window);
+       }
 }
 
 #if !defined(_WIN32)
index 520db9556d1005e2606be75a4e6999eb2adc1b0f..2faec4d7dd84102dd23f25d53c1a1b3202213c6f 100644 (file)
     <property name="default_width">500</property>
     <property name="default_height">400</property>
     <property name="icon_name">hb-icon</property>
+    <property name="events">GDK_VISIBILITY_NOTIFY_MASK</property>
+    <signal handler="hb_visibility_event_cb" name="visibility_notify_event"/>
     <signal handler="window_destroy_event_cb" name="destroy_event"/>
     <signal handler="window_delete_event_cb" name="delete_event"/>
     <child>
@@ -3608,13 +3610,13 @@ no-dct-decimate=0:cabac=1</property>
                             <property name="bottom_padding">6</property>
                             <property name="left_padding">12</property>
                             <child>
-                              <object class="GtkCheckButton" id="skip_taskbar">
-                                <property name="label" translatable="yes">Minimize to System Tray</property>
+                              <object class="GtkCheckButton" id="show_status">
+                                <property name="label" translatable="yes">Show system tray icon</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
                                 <property name="draw_indicator">True</property>
-                                <signal name="toggled" handler="skip_taskbar_cb"/>
+                                <signal name="toggled" handler="show_status_cb"/>
                               </object>
                             </child>
                           </object>
@@ -5969,6 +5971,7 @@ libx264 authors:
     </child>
   </object>
   <object class="GtkStatusIcon" id="hb_status">
+    <property name="visible">False</property>
     <property name="icon_name">hb-icon</property>
     <signal handler="status_activate_cb" name="activate"/>
   </object>
index 27017ef046b3700e4b77a62358b3f16f9bfe6997..6f1cde11b8cf1ceff1aa88fa317c25ce6a242478 100644 (file)
        <dict>
                <key>EncodeLogLocation</key>
                <false />
-               <key>skip_taskbar</key>
-               <false />
+               <key>show_status</key>
+               <true />
                <key>allow_tweaks</key>
                <false />
                <key>title_no_in_destination</key>
index 9058bd43c2d62535a0fb61e05d2d19aae04a2609..34d3c149dcbaa84b4372b57d23a48fa3bc7921cb 100644 (file)
@@ -800,6 +800,9 @@ main (int argc, char *argv[])
        GtkStatusIcon *si;
        si = GTK_STATUS_ICON(GHB_OBJECT(ud->builder, "hb_status"));
 
+       gtk_status_icon_set_visible(si,
+                       ghb_settings_get_boolean(ud->settings, "show_status"));
+
 #if GTK_CHECK_VERSION(2, 16, 0)
        gtk_status_icon_set_has_tooltip(si, TRUE);
        g_signal_connect(si, "query-tooltip", 
@@ -808,11 +811,6 @@ main (int argc, char *argv[])
        gtk_status_icon_set_tooltip(si, "HandBrake");
 #endif
 
-       GtkWindow *window;
-       window = GTK_WINDOW(GHB_WIDGET (ud->builder, "hb_window"));
-       gtk_window_set_skip_taskbar_hint(window, 
-                       ghb_settings_get_boolean(ud->settings, "skip_taskbar"));
-
        // Everything should be go-to-go.  Lets rock!
 
        gtk_main ();
index 072baf07a88786c179c4c994b2f5a5442f51d875..e974c09416b0a237a4be84f02be0a4c17db0ae1b 100644 (file)
@@ -53,6 +53,7 @@ typedef struct
        preview_t *preview;
        gchar *appcast;
        gint appcast_len;
+       GdkVisibilityState hb_visibility;
 } signal_user_data_t;
 
 enum