}
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
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)
<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>
<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>
</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>
<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>
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",
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 ();
preview_t *preview;
gchar *appcast;
gint appcast_len;
+ GdkVisibilityState hb_visibility;
} signal_user_data_t;
enum