[easytag] Make run program on directory window a GtkDialog



commit 6609e87048ab303d444d497b7be9a9d1a9d88bdc
Author: David King <amigadave amigadave com>
Date:   Thu May 2 23:13:45 2013 +0100

    Make run program on directory window a GtkDialog

 src/browser.c |  108 ++++++++++++++++++++++++--------------------------------
 1 files changed, 46 insertions(+), 62 deletions(-)
---
diff --git a/src/browser.c b/src/browser.c
index a547a81..862b286 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -189,8 +189,6 @@ static void Rename_Directory_With_Mask_Toggled (void);
 
 /* For window to run a program with the directory */
 static void Destroy_Run_Program_Tree_Window (void);
-static gboolean Run_Program_Tree_Window_Key_Press (GtkWidget *window,
-                                                   GdkEvent *event);
 static void Run_Program_With_Directory (GtkWidget *combobox);
 
 /* For window to run a program with the file */
@@ -204,6 +202,9 @@ static gboolean Run_Program (const gchar *program_name, GList *args_list);
 static void et_rename_directory_on_response (GtkDialog *dialog,
                                              gint response_id,
                                              gpointer user_data);
+static void et_run_program_tree_on_response (GtkDialog *dialog,
+                                             gint response_id,
+                                             gpointer user_data);
 
 
 /*************
@@ -3625,7 +3626,7 @@ void Browser_Open_Rename_Directory_Window (void)
     Attach_Popup_Menu_To_Tag_Entries(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameDirectoryCombo))));
 
     /* Rename directory : check box + combo box + Status icon */
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
+    HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
     gtk_box_pack_start(GTK_BOX(VBox),HBox,TRUE,TRUE,0);
 
     RenameDirectoryWithMask = gtk_check_button_new_with_label(_("Use mask:"));
@@ -3985,14 +3986,11 @@ Rename_Directory_With_Mask_Toggled (void)
  */
 void Browser_Open_Run_Program_Tree_Window (void)
 {
-    GtkWidget *Frame;
     GtkWidget *VBox;
     GtkWidget *HBox;
     GtkWidget *Label;
     GtkWidget *RunProgramComboBox;
-    GtkWidget *ButtonBox;
     GtkWidget *Button;
-    GtkWidget *Separator;
     gchar *current_directory = NULL;
 
     if (RunProgramTreeWindow != NULL)
@@ -4006,31 +4004,26 @@ void Browser_Open_Run_Program_Tree_Window (void)
     if (!current_directory || strlen(current_directory)==0)
         return;
 
-    RunProgramTreeWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_title(GTK_WINDOW(RunProgramTreeWindow),_("Browse Directory with…"));
-    gtk_window_set_transient_for(GTK_WINDOW(RunProgramTreeWindow),GTK_WINDOW(MainWindow));
-    g_signal_connect(G_OBJECT(RunProgramTreeWindow),"destroy", 
G_CALLBACK(Destroy_Run_Program_Tree_Window),NULL);
-    g_signal_connect(G_OBJECT(RunProgramTreeWindow),"delete_event", 
G_CALLBACK(Destroy_Run_Program_Tree_Window),NULL);
-    g_signal_connect(G_OBJECT(RunProgramTreeWindow),"key_press_event", 
G_CALLBACK(Run_Program_Tree_Window_Key_Press),NULL);
-
-    // Just center it over mainwindow
-    gtk_window_set_position(GTK_WINDOW(RunProgramTreeWindow), GTK_WIN_POS_CENTER_ON_PARENT);
-
-    Frame = gtk_frame_new(NULL);
-    gtk_container_add(GTK_CONTAINER(RunProgramTreeWindow),Frame);
-    gtk_container_set_border_width(GTK_CONTAINER(Frame),2);
-
-    VBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,4);
-    gtk_container_add(GTK_CONTAINER(Frame),VBox);
-    gtk_container_set_border_width(GTK_CONTAINER(VBox), 4);
+    RunProgramTreeWindow = gtk_dialog_new_with_buttons (_("Browse Directory with…"),
+                                                        GTK_WINDOW (MainWindow),
+                                                        GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                        GTK_STOCK_CANCEL,
+                                                        GTK_RESPONSE_CANCEL,
+                                                        GTK_STOCK_EXECUTE,
+                                                        GTK_RESPONSE_OK, NULL);
+
+    g_signal_connect (RunProgramTreeWindow, "response",
+                      G_CALLBACK (et_run_program_tree_on_response), NULL);
+    VBox = gtk_dialog_get_content_area (GTK_DIALOG (RunProgramTreeWindow));
+    gtk_container_set_border_width (GTK_CONTAINER (RunProgramTreeWindow),
+                                    BOX_SPACING);
 
     Label = gtk_label_new(_("Program to run:"));
     gtk_box_pack_start(GTK_BOX(VBox),Label,TRUE,FALSE,0);
     gtk_label_set_line_wrap(GTK_LABEL(Label),TRUE);
 
-    HBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,4);
+    HBox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
     gtk_box_pack_start(GTK_BOX(VBox),HBox,FALSE,FALSE,2);
-    gtk_container_set_border_width(GTK_CONTAINER(HBox), 2);
 
     /* The combobox to enter the program to run */
     RunProgramComboBox = gtk_combo_box_new_with_model_and_entry(GTK_TREE_MODEL(RunProgramModel));
@@ -4055,26 +4048,9 @@ void Browser_Open_Run_Program_Tree_Window (void)
     /* We attach useful data to the combobox (into Run_Program_With_Directory) */
     g_object_set_data(G_OBJECT(RunProgramComboBox), "Current_Directory", current_directory);
 
-    /* Separator line */
-    Separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(VBox),Separator,FALSE,FALSE,0);
-
-    ButtonBox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
-    gtk_box_pack_start(GTK_BOX(VBox),ButtonBox,FALSE,FALSE,0);
-    gtk_button_box_set_layout(GTK_BUTTON_BOX(ButtonBox),GTK_BUTTONBOX_END);
-    gtk_box_set_spacing(GTK_BOX(ButtonBox), 10);
-
-    /* Button to cancel */
-    Button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
-    gtk_container_add(GTK_CONTAINER(ButtonBox),Button);
-    gtk_widget_set_can_default(Button,TRUE);
-    gtk_widget_grab_default(Button);
-    g_signal_connect(G_OBJECT(Button),"clicked", G_CALLBACK(Destroy_Run_Program_Tree_Window),NULL);
-
     /* Button to execute */
-    Button = gtk_button_new_from_stock(GTK_STOCK_EXECUTE);
-    gtk_container_add(GTK_CONTAINER(ButtonBox),Button);
-    gtk_widget_set_can_default(Button,TRUE);
+    Button = gtk_dialog_get_widget_for_response (GTK_DIALOG (RunProgramTreeWindow),
+                                                 GTK_RESPONSE_OK);
     g_signal_connect_swapped(G_OBJECT(Button),"clicked", 
G_CALLBACK(Run_Program_With_Directory),G_OBJECT(RunProgramComboBox));
     g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),"changed", 
G_CALLBACK(Entry_Changed_Disable_Object),G_OBJECT(Button));
     
g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RunProgramComboBox)))),"changed",NULL);
@@ -4092,24 +4068,6 @@ Destroy_Run_Program_Tree_Window (void)
     }
 }
 
-static gboolean
-Run_Program_Tree_Window_Key_Press (GtkWidget *window, GdkEvent *event)
-{
-    GdkEventKey *kevent;
-
-    if (event && event->type == GDK_KEY_PRESS)
-    {
-        kevent = (GdkEventKey *)event;
-        switch(kevent->keyval)
-        {
-            case GDK_KEY_Escape:
-                Destroy_Run_Program_Tree_Window();
-                break;
-        }
-    }
-    return FALSE;
-}
-
 void Run_Program_With_Directory (GtkWidget *combobox)
 {
     gchar *program_name;
@@ -4515,3 +4473,29 @@ et_rename_directory_on_response (GtkDialog *dialog, gint response_id,
             g_assert_not_reached ();
     }
 }
+
+/*
+ * et_run_program_tree_on_response:
+ * @dialog: the dialog which emitted the response signal
+ * @response_id: the response ID
+ * @user_data: user data set when the signal was connected
+ *
+ * Signal handler for the run program on directory tree dialog.
+ */
+static void
+et_run_program_tree_on_response (GtkDialog *dialog, gint response_id,
+                                 gpointer user_data)
+{
+    switch (response_id)
+    {
+        case GTK_RESPONSE_OK:
+            /* FIXME: Ignored for now. */
+            break;
+        case GTK_RESPONSE_CANCEL:
+        case GTK_RESPONSE_DELETE_EVENT:
+            Destroy_Run_Program_Tree_Window ();
+            break;
+        default:
+            g_assert_not_reached ();
+    }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]