summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk/src/callbacks.c26
-rw-r--r--gtk/src/ghb.ui37
-rw-r--r--gtk/src/hb-backend.c6
-rw-r--r--gtk/src/queuehandler.c123
-rw-r--r--gtk/src/queuehandler.h2
5 files changed, 108 insertions, 86 deletions
diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c
index 59c29a3f5..2eddda904 100644
--- a/gtk/src/callbacks.c
+++ b/gtk/src/callbacks.c
@@ -2242,11 +2242,18 @@ ghb_backend_events(signal_user_data_t *ud)
GtkTreeView *treeview;
GtkTreeStore *store;
GtkTreeIter iter;
- static gint working = 0;
- static gboolean work_started = FALSE;
+ static gint prev_scan_state = 0;
+ static gint prev_queue_state = 0;
ghb_track_status();
ghb_get_status(&status);
+ if (prev_scan_state != status.scan.state ||
+ prev_queue_state != status.queue.state)
+ {
+ ghb_queue_buttons_grey(ud);
+ prev_scan_state = status.scan.state;
+ prev_queue_state = status.queue.state;
+ }
progress = GTK_PROGRESS_BAR(GHB_WIDGET (ud->builder, "progressbar"));
work_status = GTK_LABEL(GHB_WIDGET (ud->builder, "work_status"));
if (status.scan.state == GHB_STATE_IDLE &&
@@ -2313,7 +2320,6 @@ ghb_backend_events(signal_user_data_t *ud)
gtk_label_set_text(label, "None");
}
ghb_clear_scan_state(GHB_STATE_SCANDONE);
- ghb_queue_buttons_grey(ud, work_started);
if (ghb_queue_edit_settings)
{
gint jstatus;
@@ -2334,11 +2340,6 @@ ghb_backend_events(signal_user_data_t *ud)
{
// This needs to be in scanning and working since scanning
// happens fast enough that it can be missed
- if (!work_started)
- {
- work_started = TRUE;
- ghb_queue_buttons_grey(ud, TRUE);
- }
gtk_label_set_text (work_status, "Scanning ...");
gtk_progress_bar_set_fraction (progress, 0);
}
@@ -2355,13 +2356,10 @@ ghb_backend_events(signal_user_data_t *ud)
}
else if (status.queue.state & GHB_STATE_WORKING)
{
+ static gint working = 0;
+
// This needs to be in scanning and working since scanning
// happens fast enough that it can be missed
- if (!work_started)
- {
- work_started = TRUE;
- ghb_queue_buttons_grey(ud, TRUE);
- }
index = find_queue_job(ud->queue, status.queue.unique_id, &js);
if (status.queue.unique_id != 0 && index >= 0)
{
@@ -2398,8 +2396,6 @@ ghb_backend_events(signal_user_data_t *ud)
{
gint qstatus;
- work_started = FALSE;
- ghb_queue_buttons_grey(ud, FALSE);
index = find_queue_job(ud->queue, status.queue.unique_id, &js);
treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
diff --git a/gtk/src/ghb.ui b/gtk/src/ghb.ui
index 874e2dd27..420102674 100644
--- a/gtk/src/ghb.ui
+++ b/gtk/src/ghb.ui
@@ -355,15 +355,6 @@
</object>
</child>
<child>
- <object class="GtkAction" id="queue_stop_menu">
- <property name="sensitive">False</property>
- <property name="icon-name">hb-stop</property>
- <property name="name">queue_stop_menu</property>
- <property name="label" translatable="yes">S_top Queue</property>
- <signal handler="queue_stop_clicked_cb" name="activate"/>
- </object>
- </child>
- <child>
<object class="GtkAction" id="menuitem3">
<property name="name">menuitem3</property>
<property name="label" translatable="yes">_View</property>
@@ -447,7 +438,6 @@
<menuitem action="queue_add_menu"/>
<menuitem action="queue_start_menu"/>
<menuitem action="queue_pause_menu"/>
- <menuitem action="queue_stop_menu"/>
</menu>
<menu action="menuitem3">
<menuitem action="hbfd"/>
@@ -525,20 +515,6 @@
</packing>
</child>
<child>
- <object class="GtkToolButton" id="queue_stop1">
- <property name="visible">False</property>
- <property name="sensitive">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip-text" translatable="yes">Stop Encoding</property>
- <property name="label" translatable="yes">Stop</property>
- <property name="icon_name">hb-stop</property>
- <signal handler="queue_stop_clicked_cb" name="clicked"/>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
<object class="GtkToolButton" id="queue_pause1">
<property name="visible">True</property>
<property name="sensitive">False</property>
@@ -4758,19 +4734,6 @@ no-dct-decimate=0:cabac=1</property>
</packing>
</child>
<child>
- <object class="GtkToolButton" id="queue_stop">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">Stop</property>
- <property name="icon_name">hb-stop</property>
- <signal handler="queue_stop_clicked_cb" name="clicked"/>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
<object class="GtkToolButton" id="queue_edit">
<property name="visible">True</property>
<property name="sensitive">False</property>
diff --git a/gtk/src/hb-backend.c b/gtk/src/hb-backend.c
index eca539e56..c37006fa9 100644
--- a/gtk/src/hb-backend.c
+++ b/gtk/src/hb-backend.c
@@ -4491,11 +4491,13 @@ ghb_pause_queue()
if( s.state == HB_STATE_PAUSED )
{
- hb_resume( h_queue );
+ hb_status.queue.state &= ~GHB_STATE_PAUSED;
+ hb_resume( h_queue );
}
else
{
- hb_pause( h_queue );
+ hb_status.queue.state |= GHB_STATE_PAUSED;
+ hb_pause( h_queue );
}
}
diff --git a/gtk/src/queuehandler.c b/gtk/src/queuehandler.c
index 6f6e0cbaa..f3640a9e7 100644
--- a/gtk/src/queuehandler.c
+++ b/gtk/src/queuehandler.c
@@ -1017,47 +1017,108 @@ queue_drag_cb(
}
void
-ghb_queue_buttons_grey(signal_user_data_t *ud, gboolean working)
+ghb_queue_buttons_grey(signal_user_data_t *ud)
{
GtkWidget *widget;
GtkAction *action;
gint queue_count;
gint titleindex;
- gboolean title_ok;
+ gint queue_state, scan_state;
+ gboolean show_start, show_stop, paused;
queue_count = ghb_array_len(ud->queue);
titleindex = ghb_settings_combo_int(ud->settings, "title");
- title_ok = (titleindex >= 0);
+
+ queue_state = ghb_get_queue_state();
+ scan_state = ghb_get_scan_state();
+
+ show_stop = queue_state &
+ (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING);
+ show_start = !(scan_state & GHB_STATE_SCANNING) &&
+ (titleindex >= 0 || queue_count > 0);
+
+
+ paused = queue_state & GHB_STATE_PAUSED;
widget = GHB_WIDGET (ud->builder, "queue_start1");
- gtk_widget_set_sensitive (widget, !working && (title_ok || queue_count));
- if (working)
+ if (show_stop)
{
- gtk_widget_hide (widget);
- widget = GHB_WIDGET (ud->builder, "queue_stop1");
- gtk_widget_show (widget);
+ gtk_widget_set_sensitive (widget, TRUE);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-stop");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Stop");
}
else
{
- widget = GHB_WIDGET (ud->builder, "queue_stop1");
- gtk_widget_hide (widget);
- widget = GHB_WIDGET (ud->builder, "queue_start1");
- gtk_widget_show (widget);
+ gtk_widget_set_sensitive (widget, show_start);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Start");
}
widget = GHB_WIDGET (ud->builder, "queue_start2");
- gtk_widget_set_sensitive (widget, !working && (title_ok || queue_count));
- action = GHB_ACTION (ud->builder, "queue_start_menu");
- gtk_action_set_sensitive (action, !working && (title_ok || queue_count));
+ if (show_stop)
+ {
+ gtk_widget_set_sensitive (widget, TRUE);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-stop");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Stop");
+ }
+ else
+ {
+ gtk_widget_set_sensitive (widget, show_start);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Start");
+ }
widget = GHB_WIDGET (ud->builder, "queue_pause1");
- gtk_widget_set_sensitive (widget, working);
+ if (paused)
+ {
+ gtk_widget_set_sensitive (widget, show_stop);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Resume");
+ }
+ else
+ {
+ gtk_widget_set_sensitive (widget, show_stop);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-pause");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Pause");
+ }
widget = GHB_WIDGET (ud->builder, "queue_pause2");
- gtk_widget_set_sensitive (widget, working);
+ if (paused)
+ {
+ gtk_widget_set_sensitive (widget, show_stop);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Resume");
+ }
+ else
+ {
+ gtk_widget_set_sensitive (widget, show_stop);
+ gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-pause");
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Pause");
+ }
+
+ action = GHB_ACTION (ud->builder, "queue_start_menu");
+ if (show_stop)
+ {
+ gtk_action_set_sensitive (action, TRUE);
+ gtk_action_set_icon_name(action, "hb-stop");
+ gtk_action_set_label(action, "S_top Queue");
+ }
+ else
+ {
+ gtk_action_set_sensitive (action, show_start);
+ gtk_action_set_icon_name(action, "hb-play");
+ gtk_action_set_label(action, "_Start Queue");
+ }
action = GHB_ACTION (ud->builder, "queue_pause_menu");
- gtk_action_set_sensitive (action, working);
- widget = GHB_WIDGET (ud->builder, "queue_stop");
- gtk_widget_set_sensitive (widget, working);
- action = GHB_ACTION (ud->builder, "queue_stop_menu");
- gtk_action_set_sensitive (action, working);
+ if (paused)
+ {
+ gtk_action_set_sensitive (action, show_start);
+ gtk_action_set_icon_name(action, "hb-play");
+ gtk_action_set_label(action, "_Resume Queue");
+ }
+ else
+ {
+ gtk_action_set_sensitive (action, show_stop);
+ gtk_action_set_icon_name(action, "hb-pause");
+ gtk_action_set_label(action, "_Pause Queue");
+ }
}
G_MODULE_EXPORT void
@@ -1084,6 +1145,14 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
gint status;
gint state;
+ state = ghb_get_queue_state();
+ if (state & (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING))
+ {
+ ud->cancel_encode = TRUE;
+ ghb_cancel_encode(NULL);
+ return;
+ }
+
count = ghb_array_len(ud->queue);
for (ii = 0; ii < count; ii++)
{
@@ -1103,7 +1172,6 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
if (!queue_add(ud))
return;
}
- state = ghb_get_queue_state();
if (state == GHB_STATE_IDLE)
{
// Add the first pending queue item and start
@@ -1112,13 +1180,6 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
}
G_MODULE_EXPORT void
-queue_stop_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
-{
- ud->cancel_encode = TRUE;
- ghb_cancel_encode(NULL);
-}
-
-G_MODULE_EXPORT void
queue_pause_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
{
ghb_pause_queue();
@@ -1182,7 +1243,7 @@ ghb_reload_queue(signal_user_data_t *ud)
ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
add_to_queue_list(ud, settings, NULL);
}
- ghb_queue_buttons_grey(ud, FALSE);
+ ghb_queue_buttons_grey(ud);
}
else
{
diff --git a/gtk/src/queuehandler.h b/gtk/src/queuehandler.h
index bf1677baf..8ff454af5 100644
--- a/gtk/src/queuehandler.h
+++ b/gtk/src/queuehandler.h
@@ -28,7 +28,7 @@
#include <gtk/gtk.h>
#include "settings.h"
-void ghb_queue_buttons_grey(signal_user_data_t *ud, gboolean working);
+void ghb_queue_buttons_grey(signal_user_data_t *ud);
gboolean ghb_reload_queue(signal_user_data_t *ud);
#endif // _QUEUEHANDLER_H_