From: John Stebbins Date: Wed, 13 Sep 2017 15:24:18 +0000 (-0700) Subject: LinGui: Split presets list out into separate window X-Git-Tag: 1.1.0~335 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7a59d58cbaa5f08792dbb97c48065fdadbe4414;p=handbrake LinGui: Split presets list out into separate window --- diff --git a/gtk/src/callbacks.c b/gtk/src/callbacks.c index 649e7d227..5ac796680 100644 --- a/gtk/src/callbacks.c +++ b/gtk/src/callbacks.c @@ -4082,6 +4082,15 @@ show_activity_menu_toggled_cb(GtkWidget *widget, signal_user_data_t *ud) gtk_toggle_tool_button_set_active(button, active); } +G_MODULE_EXPORT gboolean +presets_window_delete_cb(GtkWidget *xwidget, GdkEvent *event, signal_user_data_t *ud) +{ + gtk_widget_set_visible(xwidget, FALSE); + GtkWidget *widget = GHB_WIDGET(ud->builder, "show_presets"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), FALSE); + return TRUE; +} + G_MODULE_EXPORT gboolean activity_window_delete_cb(GtkWidget *xwidget, GdkEvent *event, signal_user_data_t *ud) { @@ -4250,25 +4259,47 @@ show_queue_menu_toggled_cb(GtkWidget *widget, signal_user_data_t *ud) gtk_toggle_tool_button_set_active(button, active); } -G_MODULE_EXPORT void -show_presets_toggled_cb(GtkWidget *widget, signal_user_data_t *ud) +static void +presets_window_set_visible(signal_user_data_t *ud, gboolean visible) { - GtkWidget *frame; - GtkWindow *hb_window; + GtkWidget * presets_window; + GtkWidget * hb_window; + int x, y; - g_debug("show_presets_clicked_cb ()"); - frame = GHB_WIDGET (ud->builder, "presets_frame"); - ghb_widget_to_setting(ud->prefs, widget); - if (ghb_dict_get_bool(ud->prefs, "show_presets")) + hb_window = GHB_WIDGET(ud->builder, "hb_window"); + if (!gtk_widget_is_visible(hb_window)) { - gtk_widget_show_now(frame); + return; } - else + + presets_window = GHB_WIDGET(ud->builder, "presets_window"); + gtk_widget_set_visible(presets_window, visible); + if (visible) { - gtk_widget_hide(frame); - hb_window = GTK_WINDOW(GHB_WIDGET (ud->builder, "hb_window")); - gtk_window_resize(hb_window, 16, 16); + int w, h; + w = ghb_dict_get_int(ud->prefs, "presets_window_width"); + h = ghb_dict_get_int(ud->prefs, "presets_window_height"); + if (w > 200 && h > 200) + { + gtk_window_resize(GTK_WINDOW(presets_window), w, h); + } + gtk_window_get_position(GTK_WINDOW(hb_window), &x, &y); + x -= w + 10; + if (x < 0) + { + gtk_window_move(GTK_WINDOW(hb_window), w + 10, y); + x = 0; + } + gtk_window_move(GTK_WINDOW(presets_window), x, y); } +} + +G_MODULE_EXPORT void +show_presets_toggled_cb(GtkWidget *widget, signal_user_data_t *ud) +{ + ghb_widget_to_setting(ud->prefs, widget); + presets_window_set_visible(ud, ghb_dict_get_bool(ud->prefs, + "show_presets")); ghb_pref_save(ud->prefs, "show_presets"); } @@ -5782,13 +5813,47 @@ ghb_notify_done(signal_user_data_t *ud) } } +G_MODULE_EXPORT gboolean +window_map_cb( + GtkWidget *widget, + GdkEventAny *event, + signal_user_data_t *ud) +{ + presets_window_set_visible(ud, ghb_dict_get_bool(ud->prefs, + "show_presets")); + return FALSE; +} + +G_MODULE_EXPORT gboolean +presets_window_configure_cb( + GtkWidget *widget, + GdkEventConfigure *event, + signal_user_data_t *ud) +{ + if (gtk_widget_get_visible(widget)) + { + gint w, h; + w = ghb_dict_get_int(ud->prefs, "presets_window_width"); + h = ghb_dict_get_int(ud->prefs, "presets_window_height"); + + if ( w != event->width || h != event->height ) + { + ghb_dict_set_int(ud->prefs, "presets_window_width", event->width); + ghb_dict_set_int(ud->prefs, "presets_window_height", event->height); + ghb_pref_set(ud->prefs, "presets_window_width"); + ghb_pref_set(ud->prefs, "presets_window_height"); + ghb_prefs_store(); + } + } + return FALSE; +} + G_MODULE_EXPORT gboolean window_configure_cb( GtkWidget *widget, GdkEventConfigure *event, signal_user_data_t *ud) { - //g_message("preview_configure_cb()"); if (gtk_widget_get_visible(widget)) { gint w, h; diff --git a/gtk/src/ghb.m4 b/gtk/src/ghb.m4 index adf68c136..67a76a3b6 100644 --- a/gtk/src/ghb.m4 +++ b/gtk/src/ghb.m4 @@ -87,6 +87,165 @@ conjunction with the "Forced" option. <b>Track</b> True + + + False + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + utility + True + True + hb_window + 300 + 600 + + + + + vertical + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + False + + + True + False + _Presets + True + + + True + False + + + _Save + True + False + True + + + + + + _Delete + True + False + True + + + + + + _Make Default + True + False + True + + + + + + _New Folder + True + False + True + + + + + + _Export + True + False + True + + + + + + _Import + True + False + True + + + + + + _Reload Built-in Presets + True + False + True + + + + + + + + + + False + True + 0 + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + none + 6 + 6 + 6 + 6 + + + True + False + etched-in + 6 + 200 + + + 206 + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + + + + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + <b>Presets List</b> + True + + + + + True + True + 1 + + + + + + False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -594,6 +753,7 @@ libx264 authors: 500 400 hb-icon + @@ -1410,51 +1570,6 @@ This is often the feature title of a DVD. 0 - - - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 - none - 6 - 6 - - - True - False - etched-in - 6 - 200 - - - 206 - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - - - - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - <b>Presets List</b> - True - - - - - True - True - 1 - - False diff --git a/gtk/src/internal_defaults.json b/gtk/src/internal_defaults.json index 7d70db5fa..be47bfbc4 100644 --- a/gtk/src/internal_defaults.json +++ b/gtk/src/internal_defaults.json @@ -105,6 +105,8 @@ "WhenComplete": "notify", "SrtDir": "", "window_width": 1, - "window_height": 1 + "window_height": 1, + "preset_window_width": 1, + "preset_window_height": 1 } } diff --git a/gtk/src/presets.c b/gtk/src/presets.c index a4d736fe0..cc80434bd 100644 --- a/gtk/src/presets.c +++ b/gtk/src/presets.c @@ -1871,16 +1871,26 @@ preset_export_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) GtkResponseType response; const gchar *exportDir; gchar *filename; + GhbValue *dict; path = get_selected_path(ud); if (path == NULL || path->depth <= 0) { + char * new_name; + + free(path); + dict = ghb_settings_to_preset(ud->settings); + name = ghb_dict_get_string(dict, "PresetName"); + new_name = g_strdup_printf("%s (modified)", name); + ghb_dict_set_string(dict, "PresetName", new_name); + free(new_name); + } + else + { + dict = hb_value_dup(hb_preset_get(path)); free(path); - return; } - GhbValue *dict = hb_preset_get(path); - free(path); if (dict == NULL) { return; @@ -1925,6 +1935,7 @@ preset_export_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud) g_free(filename); } gtk_widget_destroy(dialog); + hb_value_free(&dict); } G_MODULE_EXPORT void