#if !defined(_WIN32)
#include <poll.h>
-#include <libhal-storage.h>
+#define G_UDEV_API_IS_SUBJECT_TO_CHANGE 1
+#include <gudev/gudev.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>
#include <netinet/in.h>
#include <netdb.h>
+
+#if !defined(_NO_UPDATE_CHECK)
#if defined(_OLD_WEBKIT)
#include <webkit.h>
#else
#include <webkit/webkit.h>
#endif
+#endif
+
#include <libnotify/notify.h>
#include <gdk/gdkx.h>
#else
type = GTK_WIDGET_TYPE(widget);
if (type == GTK_TYPE_COMBO_BOX || type == GTK_TYPE_COMBO_BOX_ENTRY)
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) < 0) return;
- name = gtk_widget_get_name(widget);
+ name = ghb_get_setting_key(widget);
}
else
name = alt_name;
{
gint state = ghb_get_queue_state();
g_debug("on_quit1_activate ()");
- if (state & GHB_STATE_WORKING)
+ if (state & (GHB_STATE_WORKING|GHB_STATE_SEARCHING))
{
if (ghb_cancel_encode2(ud, "Closing HandBrake will terminate encoding.\n"))
{
title = ghb_settings_combo_int(ud->settings, "title");
g_string_append_printf(str, " - %d", title+1);
}
- if (ghb_settings_get_boolean(
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0 &&
+ ghb_settings_get_boolean(
ud->settings, "chapters_in_destination"))
{
gint start, end;
{
g_string_append_printf(str, " -");
}
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
if (start == end)
g_string_append_printf(str, " Ch %d", start);
else
gchar *sourcename;
sourcename = ghb_settings_get_string(ud->settings, "scan_source");
- filename = gtk_action_get_name(action);
+ filename = gtk_buildable_get_name(GTK_BUILDABLE(action));
ghb_do_scan(ud, filename, 0, TRUE);
if (strcmp(sourcename, filename) != 0)
{
{
gint state = ghb_get_queue_state();
g_debug("window_delete_event_cb ()");
- if (state & GHB_STATE_WORKING)
+ if (state & (GHB_STATE_WORKING|GHB_STATE_SEARCHING))
{
if (ghb_cancel_encode2(ud, "Closing HandBrake will terminate encoding.\n"))
{
ti = ghb_settings_combo_int(ud->settings, "title");
widget = GHB_WIDGET (ud->builder, "title_duration");
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- ghb_part_duration(ti, start, end, &hh, &mm, &ss);
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ ghb_part_duration(ti, start, end, &hh, &mm, &ss);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ {
+ gint duration;
+
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ duration = end - start;
+ hh = duration / (60*60);
+ mm = (duration / 60) % 60;
+ ss = duration % 60;
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ {
+ ghb_title_info_t tinfo;
+
+ if (ghb_get_title_info (&tinfo, ti))
+ {
+ gint64 frames;
+ gint duration;
+
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ frames = end - start + 1;
+ duration = frames * tinfo.rate_base / tinfo.rate;
+ hh = duration / (60*60);
+ mm = (duration / 60) % 60;
+ ss = duration % 60;
+ }
+ else
+ {
+ hh = mm = ss = 0;
+ }
+ }
text = g_strdup_printf("%02d:%02d:%02d", hh, mm, ss);
gtk_label_set_text (GTK_LABEL(widget), text);
g_free(text);
gtk_label_set_text (GTK_LABEL(widget), text);
g_free(text);
- g_debug("setting max end chapter %d", tinfo->num_chapters);
- widget = GHB_WIDGET (ud->builder, "end_chapter");
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), tinfo->num_chapters);
- widget = GHB_WIDGET (ud->builder, "start_chapter");
- gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
- gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
+
+ gint duration = tinfo->duration / 90000;
+
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), tinfo->num_chapters);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ {
+
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, duration-1);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 0);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, duration);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), duration);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ {
+ gdouble max_frames = (gdouble)duration * tinfo->rate / tinfo->rate_base;
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), max_frames);
+ }
widget = GHB_WIDGET (ud->builder, "angle");
gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo->angle_count);
+ ghb_settings_set_int(ud->settings, "angle_count", tinfo->angle_count);
ud->dont_clear_presets = FALSE;
}
g_debug("title_changed_cb ()");
ghb_widget_to_setting(ud->settings, widget);
- ghb_check_dependency(ud, widget, NULL);
titleindex = ghb_settings_combo_int(ud->settings, "title");
ghb_update_ui_combo_box (ud, "AudioTrack", titleindex, FALSE);
{
show_title_info(ud, &tinfo);
}
+ ghb_check_dependency(ud, widget, NULL);
update_chapter_list (ud);
ghb_adjust_audio_rate_combos(ud);
ghb_set_pref_audio(titleindex, ud);
gint end;
widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
gtk_widget_set_sensitive(widget, TRUE);
- end = ghb_settings_get_int(ud->settings, "end_chapter");
+ end = ghb_settings_get_int(ud->settings, "end_point");
if (1 == end)
{
ud->dont_clear_presets = TRUE;
}
G_MODULE_EXPORT void
+ptop_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ gint ti;
+ ghb_title_info_t tinfo;
+
+ ghb_widget_to_setting(ud->settings, widget);
+ ghb_check_dependency(ud, widget, NULL);
+ ghb_live_reset(ud);
+
+ ti = ghb_settings_combo_int(ud->settings, "title");
+ if (!ghb_get_title_info (&tinfo, ti))
+ return;
+
+ gint duration = tinfo.duration / 90000;
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo.num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, tinfo.num_chapters);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), tinfo.num_chapters);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
+ {
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 0, duration-1);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 0);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, duration);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), duration);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
+ {
+ gdouble max_frames = (gdouble)duration * tinfo.rate / tinfo.rate_base;
+ widget = GHB_WIDGET (ud->builder, "start_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), 1);
+
+ widget = GHB_WIDGET (ud->builder, "end_point");
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON(widget), 1, max_frames);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON(widget), max_frames);
+ }
+}
+
+G_MODULE_EXPORT void
setting_widget_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
ghb_widget_to_setting(ud->settings, widget);
G_MODULE_EXPORT void
target_size_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
g_debug("target_size_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
}
G_MODULE_EXPORT void
-start_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+start_point_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
gint start, end;
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
- g_debug("start_chapter_changed_cb () %s", name);
+ g_debug("start_point_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- if (start > end)
- ghb_ui_update(ud, "end_chapter", ghb_int_value(start));
- ghb_check_dependency(ud, widget, NULL);
- if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "end_point", ghb_int_value(start));
+ ghb_check_dependency(ud, widget, NULL);
+ if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ {
+ set_destination(ud);
+ }
+ widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
+ gtk_widget_set_sensitive(widget, TRUE);
+ // End may have been changed above, get it again
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start == end)
+ {
+ ud->dont_clear_presets = TRUE;
+ ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
+ ud->dont_clear_presets = FALSE;
+ gtk_widget_set_sensitive(widget, FALSE);
+ }
+ update_title_duration(ud);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
{
- set_destination(ud);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start >= end)
+ ghb_ui_update(ud, "end_point", ghb_int_value(start+1));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
- // End may have been changed above, get it again
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- if (start == end)
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
- gtk_widget_set_sensitive(widget, FALSE);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "end_point", ghb_int_value(start));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- update_title_duration(ud);
}
G_MODULE_EXPORT void
-end_chapter_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
+end_point_changed_cb(GtkWidget *widget, signal_user_data_t *ud)
{
gint start, end;
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
- g_debug("end_chapter_changed_cb () %s", name);
+ g_debug("end_point_changed_cb () %s", name);
ghb_widget_to_setting(ud->settings, widget);
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- end = ghb_settings_get_int(ud->settings, "end_chapter");
- if (start > end)
- ghb_ui_update(ud, "start_chapter", ghb_int_value(end));
- ghb_check_dependency(ud, widget, NULL);
- if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ if (ghb_settings_combo_int(ud->settings, "PtoPType") == 0)
+ {
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "start_point", ghb_int_value(end));
+ ghb_check_dependency(ud, widget, NULL);
+ if (ghb_settings_get_boolean(ud->settings, "chapters_in_destination"))
+ {
+ set_destination(ud);
+ }
+ widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
+ gtk_widget_set_sensitive(widget, TRUE);
+ // Start may have been changed above, get it again
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ if (start == end)
+ {
+ ud->dont_clear_presets = TRUE;
+ ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
+ ud->dont_clear_presets = FALSE;
+ gtk_widget_set_sensitive(widget, FALSE);
+ }
+ update_title_duration(ud);
+ }
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 1)
{
- set_destination(ud);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start >= end)
+ ghb_ui_update(ud, "start_point", ghb_int_value(end-1));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- widget = GHB_WIDGET (ud->builder, "ChapterMarkers");
- gtk_widget_set_sensitive(widget, TRUE);
- // Start may have been changed above, get it again
- start = ghb_settings_get_int(ud->settings, "start_chapter");
- if (start == end)
+ else if (ghb_settings_combo_int(ud->settings, "PtoPType") == 2)
{
- ud->dont_clear_presets = TRUE;
- ghb_ui_update(ud, "ChapterMarkers", ghb_boolean_value(FALSE));
- ud->dont_clear_presets = FALSE;
- gtk_widget_set_sensitive(widget, FALSE);
+ start = ghb_settings_get_int(ud->settings, "start_point");
+ end = ghb_settings_get_int(ud->settings, "end_point");
+ if (start > end)
+ ghb_ui_update(ud, "start_point", ghb_int_value(end));
+ ghb_check_dependency(ud, widget, NULL);
+ update_title_duration(ud);
}
- update_title_duration(ud);
}
G_MODULE_EXPORT void
return status_str;
}
+gchar*
+searching_status_string(signal_user_data_t *ud, ghb_instance_status_t *status)
+{
+ gchar *task_str, *job_str, *status_str;
+ gint qcount;
+ gint index;
+ GValue *js;
+
+ qcount = ghb_array_len(ud->queue);
+ index = find_queue_job(ud->queue, status->unique_id, &js);
+ if (qcount > 1)
+ {
+ job_str = g_strdup_printf("job %d of %d, ", index+1, qcount);
+ }
+ else
+ {
+ job_str = g_strdup("");
+ }
+ task_str = g_strdup_printf("Searching for start time, ");
+ if(status->seconds > -1)
+ {
+ status_str= g_strdup_printf(
+ "Encoding: %s%s%.2f %%"
+ " (ETA %02dh%02dm%02ds)",
+ job_str, task_str,
+ 100.0 * status->progress,
+ status->hours, status->minutes, status->seconds );
+ }
+ else
+ {
+ status_str= g_strdup_printf(
+ "Encoding: %s%s%.2f %%",
+ job_str, task_str,
+ 100.0 * status->progress );
+ }
+ g_free(task_str);
+ g_free(job_str);
+ return status_str;
+}
+
static void
ghb_backend_events(signal_user_data_t *ud)
{
{
gtk_label_set_text (work_status, "Paused");
}
+ else if (status.queue.state & GHB_STATE_SEARCHING)
+ {
+ static gint working = 0;
+
+ // This needs to be in scanning and working since scanning
+ // happens fast enough that it can be missed
+ index = find_queue_job(ud->queue, status.queue.unique_id, &js);
+ if (status.queue.unique_id != 0 && index >= 0)
+ {
+ gchar working_icon[] = "hb-working0";
+ working_icon[10] = '0' + working;
+ working = (working+1) % 6;
+ treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
+ store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
+ gchar *path = g_strdup_printf ("%d", index);
+ if (gtk_tree_model_get_iter_from_string(
+ GTK_TREE_MODEL(store), &iter, path))
+ {
+ gtk_tree_store_set(store, &iter, 0, working_icon, -1);
+ }
+ g_free(path);
+ }
+ GtkLabel *label;
+ gchar *status_str;
+
+ status_str = searching_status_string(ud, &status.queue);
+ label = GTK_LABEL(GHB_WIDGET(ud->builder, "queue_status"));
+ gtk_label_set_text (label, status_str);
+#if !GTK_CHECK_VERSION(2, 16, 0)
+ GtkStatusIcon *si;
+
+ si = GTK_STATUS_ICON(GHB_OBJECT(ud->builder, "hb_status"));
+ gtk_status_icon_set_tooltip(si, status_str);
+#endif
+ gtk_label_set_text (work_status, status_str);
+ gtk_progress_bar_set_fraction (progress, status.queue.progress);
+ g_free(status_str);
+ }
else if (status.queue.state & GHB_STATE_WORKING)
{
static gint working = 0;
ghb_get_status(&status);
if (status.queue.state & GHB_STATE_WORKING)
status_str = working_status_string(ud, &status.queue);
+ else if (status.queue.state & GHB_STATE_SEARCHING)
+ status_str = searching_status_string(ud, &status.queue);
else if (status.queue.state & GHB_STATE_WORKDONE)
status_str = g_strdup("Encode Complete");
else
update_preview = FALSE;
}
+#if !defined(_NO_UPDATE_CHECK)
if (!appcast_busy)
{
gchar *updates;
}
}
}
+#endif
return TRUE;
}
g_debug("pref_changed_cb");
ghb_widget_to_setting (ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
}
g_debug("use_m4v_changed_cb");
ghb_widget_to_setting (ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
ghb_update_destination_extension(ud);
}
g_debug("show_status_cb");
ghb_widget_to_setting (ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
GtkStatusIcon *si;
ghb_widget_to_setting (ud->settings, widget);
ghb_check_dependency(ud, widget, NULL);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
gdouble vqmin, vqmax, step, page;
{
g_debug("tweaks_changed_cb");
ghb_widget_to_setting (ud->settings, widget);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
}
{
g_debug("hbfd_feature_changed_cb");
ghb_widget_to_setting (ud->settings, widget);
- const gchar *name = gtk_widget_get_name(widget);
+ const gchar *name = ghb_get_setting_key(widget);
ghb_pref_save(ud->settings, name);
gboolean hbfd = ghb_settings_get_boolean(ud->settings, "hbfd_feature");
}
#if !defined(_WIN32)
-static LibHalContext *hal_ctx = NULL;
+static GUdevClient *udev_ctx = NULL;
#endif
gboolean
{
#if !defined(_WIN32)
gchar *device;
- LibHalDrive *halDrive;
- LibHalDriveType dtype;
+ GUdevDevice *udd;
- if (hal_ctx == NULL)
+ if (udev_ctx == NULL)
return FALSE;
device = g_drive_get_identifier(gd, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);
if (device == NULL)
return FALSE;
- halDrive = libhal_drive_from_device_file (hal_ctx, device);
+
+ udd = g_udev_client_query_by_device_file(udev_ctx, device);
g_free(device);
- if (halDrive == NULL)
+
+ if (udd == NULL)
+ {
+ g_message("udev: Failed to lookup device %s", device);
return FALSE;
- dtype = libhal_drive_get_type(halDrive);
- libhal_drive_free(halDrive);
- return (dtype == LIBHAL_DRIVE_TYPE_CDROM);
+ }
+
+ gint val;
+ val = g_udev_device_get_property_as_int(udd, "ID_CDROM_DVD");
+ if (val == 1)
+ return TRUE;
+
+ return FALSE;
#else
return FALSE;
#endif
}
+void
+ghb_udev_init()
+{
+#if !defined(_WIN32)
+ udev_ctx = g_udev_client_new(NULL);
+#endif
+}
+
#if defined(_WIN32)
static void
handle_media_change(const gchar *device, gboolean insert, signal_user_data_t *ud)
#endif
#if !defined(_WIN32)
-static void
-dbus_init (void)
-{
- dbus_g_thread_init();
-}
-
#define GPM_DBUS_PM_SERVICE "org.freedesktop.PowerManagement"
#define GPM_DBUS_PM_PATH "/org/freedesktop/PowerManagement"
#define GPM_DBUS_PM_INTERFACE "org.freedesktop.PowerManagement"
#endif
}
+#if !defined(_WIN32)
static gboolean
ghb_can_shutdown_gpm()
{
gboolean can_shutdown = FALSE;
-#if !defined(_WIN32)
DBusGConnection *conn;
DBusGProxy *proxy;
GError *error = NULL;
}
g_object_unref(G_OBJECT(proxy));
dbus_g_connection_unref(conn);
-#endif
return can_shutdown;
}
+#endif
+#if !defined(_WIN32)
static void
ghb_shutdown_gpm()
{
-#if !defined(_WIN32)
DBusGConnection *conn;
DBusGProxy *proxy;
GError *error = NULL;
}
g_object_unref(G_OBJECT(proxy));
dbus_g_connection_unref(conn);
-#endif
}
+#endif
void
ghb_inhibit_gpm()
#endif
}
-void
-ghb_hal_init()
-{
-#if !defined(_WIN32)
- DBusGConnection *gconn;
- DBusConnection *conn;
- GError *gerror = NULL;
- DBusError error;
- char **devices;
- int nr;
-
- dbus_init ();
-
- if (!(hal_ctx = libhal_ctx_new ())) {
- g_warning ("failed to create a HAL context!");
- return;
- }
-
- gconn = dbus_g_bus_get(DBUS_BUS_SYSTEM, &gerror);
- if (gerror != NULL)
- {
- g_warning("DBUS cannot connect: %s", gerror->message);
- g_error_free(gerror);
- return;
- }
- conn = dbus_g_connection_get_connection(gconn);
- libhal_ctx_set_dbus_connection (hal_ctx, conn);
- dbus_error_init (&error);
- if (!libhal_ctx_init (hal_ctx, &error)) {
- g_warning ("libhal_ctx_init failed: %s", error.message ? error.message : "unknown");
- dbus_error_free (&error);
- libhal_ctx_free (hal_ctx);
- dbus_g_connection_unref(gconn);
- hal_ctx = NULL;
- return;
- }
-
- /*
- * Do something to ping the HAL daemon - the above functions will
- * succeed even if hald is not running, so long as DBUS is. But we
- * want to exit silently if hald is not running, to behave on
- * pre-2.6 systems.
- */
- if (!(devices = libhal_get_all_devices (hal_ctx, &nr, &error))) {
- g_warning ("seems that HAL is not running: %s", error.message ? error.message : "unknown");
- dbus_error_free (&error);
-
- libhal_ctx_shutdown (hal_ctx, NULL);
- libhal_ctx_free (hal_ctx);
- hal_ctx = NULL;
- dbus_g_connection_unref(gconn);
- return;
- }
-
- libhal_free_string_array (devices);
- dbus_g_connection_unref(gconn);
-#endif
-}
-
G_MODULE_EXPORT gboolean
tweak_setting_cb(
GtkWidget *widget,
GtkResponseType response;
gchar *tweak = NULL;
- name = gtk_widget_get_name(widget);
+ name = ghb_get_setting_key(widget);
if (g_str_has_prefix(name, "tweak_"))
{
tweak_name = g_strdup(name);
G_MODULE_EXPORT gchar*
format_vquality_cb(GtkScale *scale, gdouble val, signal_user_data_t *ud)
{
- gdouble percent;
-
gint vcodec = ghb_settings_combo_int(ud->settings, "VideoEncoder");
switch (vcodec)
{
case HB_VCODEC_X264:
{
- percent = 100. * (51 - val) / 51.;
- return g_strdup_printf("RF: %.4g (%.0f%%)", val, percent);
+ return g_strdup_printf("RF: %.4g", val);
} break;
case HB_VCODEC_FFMPEG:
{
- percent = 100. * (30 - (val - 1)) / 30.;
- return g_strdup_printf("QP: %d (%.0f%%)", (int)val, percent);
+ return g_strdup_printf("QP: %d", (int)val);
} break;
case HB_VCODEC_THEORA:
{
- percent = 100. * val / 63.;
- return g_strdup_printf("QP: %d (%.0f%%)", (int)val, percent);
+ return g_strdup_printf("QP: %d", (int)val);
} break;
default:
{
- percent = 0;
} break;
}
- return g_strdup_printf("QP: %.1f / %.1f%%", val, percent);
+ return g_strdup_printf("QP: %.4g", val);
}
static void
gtk_label_set_text(GTK_LABEL(label), msg);
#if !defined(_WIN32)
+#if !defined(_NO_UPDATE_CHECK)
if (html == NULL)
{
html = webkit_web_view_new();
}
webkit_web_view_open(WEBKIT_WEB_VIEW(html), description);
#endif
+#endif
dialog = GHB_WIDGET(ud->builder, "update_dialog");
response = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_hide(dialog);
}
if (status == G_IO_STATUS_EOF)
{
- ud->appcast[ud->appcast_len] = 0;
+ if ( ud->appcast != NULL )
+ {
+ ud->appcast[ud->appcast_len] = 0;
+ }
ghb_net_close(ioc);
process_appcast(ud);
return FALSE;