[gnome-latex: 132/205] Some various improvements



commit 917887f2dff699f254d2a8b42000251b93a3ef0d
Author: Sébastien Wilmet <sebastien wilmet gmail com>
Date:   Mon Dec 7 00:49:22 2009 +0100

    Some various improvements
    
    First, for the entries of go to line and find, when there is an error
    the background and text colors change. There is an error in the go to
    line if the line specified is to high. There is an error in find when
    the phrase is not found.
    
    The main() function was too long, so it is splitted into some init_*
    functions.
    
    Bug correction: there was a segfault if we ran latexila like this:
    $ latexila --new-document /a/file
    (strcmp() can not compare a NULL value)
    
    Maybe other little things without importance ;)

 src/callbacks.c |  62 +++++++++--
 src/main.c      | 311 +++++++++++++++++++++++++++++++-------------------------
 src/main.h      |  47 +++++----
 3 files changed, 254 insertions(+), 166 deletions(-)
---
diff --git a/src/callbacks.c b/src/callbacks.c
index ab407ce..72f2f58 100644
--- a/src/callbacks.c
+++ b/src/callbacks.c
@@ -55,6 +55,7 @@ static gboolean find_next_match (const gchar *what, GtkSourceSearchFlags flags,
                gboolean backward, GtkTextIter *match_start, GtkTextIter *match_end);
 static void free_latexila (void);
 static void delete_auxiliaries_files (const gchar *filename);
+static void set_entry_background (GtkWidget *entry, gboolean error);
 
 static gboolean save_list_opened_docs = FALSE;
 
@@ -348,14 +349,14 @@ cb_find (void)
        if (latexila.active_doc == NULL)
                return;
 
-       gtk_widget_show_all (latexila.find);
-       gtk_widget_grab_focus (latexila.find_entry);
+       gtk_widget_show_all (latexila.under_source_view.find);
+       gtk_widget_grab_focus (latexila.under_source_view.find_entry);
 }
 
 void
 cb_close_find (GtkWidget *widget, gpointer user_data)
 {
-       gtk_widget_hide (latexila.find);
+       gtk_widget_hide (latexila.under_source_view.find);
 
        guint context_id = gtk_statusbar_get_context_id (latexila.statusbar, "find");
        gtk_statusbar_pop (latexila.statusbar, context_id);
@@ -545,14 +546,17 @@ cb_go_to_line (void)
        if (latexila.active_doc == NULL)
                return;
 
-       gtk_widget_show_all (latexila.go_to_line);
-       gtk_widget_grab_focus (latexila.go_to_line_entry);
+       // reset the background color
+       set_entry_background (latexila.under_source_view.go_to_line_entry, FALSE);
+
+       gtk_widget_show_all (latexila.under_source_view.go_to_line);
+       gtk_widget_grab_focus (latexila.under_source_view.go_to_line_entry);
 }
 
 void
 cb_close_go_to_line (GtkWidget *widget, gpointer user_data)
 {
-       gtk_widget_hide (latexila.go_to_line);
+       gtk_widget_hide (latexila.under_source_view.go_to_line);
        
        if (latexila.active_doc == NULL)
                return;
@@ -570,6 +574,14 @@ cb_go_to_line_entry (GtkEntry *entry, gpointer user_data)
        gint num = strtol (txt, NULL, 10);
        GtkTextIter iter;
        GtkTextBuffer *buffer = GTK_TEXT_BUFFER (latexila.active_doc->source_buffer);
+       gint nb_lines = gtk_text_buffer_get_line_count (buffer);
+       
+       if (nb_lines < num)
+       {
+               set_entry_background (GTK_WIDGET (entry), TRUE);
+               return;
+       }
+       
        gtk_text_buffer_get_iter_at_line (buffer, &iter, --num);
        gtk_text_buffer_place_cursor (buffer, &iter);
        scroll_to_cursor ();
@@ -912,7 +924,8 @@ open_new_document (const gchar *filename, const gchar *uri)
                document_t *current_doc = g_list_nth_data (current, 0);
 
                // if the filename is the same, just go to that tab on the notebook
-               if (strcmp (filename, current_doc->path) == 0)
+               if (current_doc->path != NULL &&
+                               strcmp (filename, current_doc->path) == 0)
                {
                        gtk_notebook_set_current_page (latexila.notebook, n);
                        return;
@@ -1401,9 +1414,9 @@ find (gboolean backward)
 
        guint context_id = gtk_statusbar_get_context_id (latexila.statusbar, "find");
 
-       const gchar *what = gtk_entry_get_text (GTK_ENTRY (latexila.find_entry));
+       const gchar *what = gtk_entry_get_text (GTK_ENTRY (latexila.under_source_view.find_entry));
        gboolean tmp = gtk_toggle_button_get_active (
-                       GTK_TOGGLE_BUTTON (latexila.find_match_case));
+                       GTK_TOGGLE_BUTTON (latexila.under_source_view.find_match_case));
        GtkSourceSearchFlags flags = tmp ? 0 : GTK_SOURCE_SEARCH_CASE_INSENSITIVE;
 
        GtkTextIter match_start, match_end;
@@ -1413,6 +1426,18 @@ find (gboolean backward)
                gtk_statusbar_pop (latexila.statusbar, context_id);
                gtk_statusbar_push (latexila.statusbar, context_id,
                                _("Phrase not found"));
+
+               // red background
+               set_entry_background (latexila.under_source_view.find_entry, TRUE);
+       }
+
+       else
+       {
+               // we can possibly print a message, anyway we must pop the last message
+               gtk_statusbar_pop (latexila.statusbar, context_id);
+
+               // normal background
+               set_entry_background (latexila.under_source_view.find_entry, FALSE);
        }
 }
 
@@ -1533,3 +1558,22 @@ delete_auxiliaries_files (const gchar *filename)
        g_free (filename_without_ext);
        cb_file_browser_refresh (NULL, NULL);
 }
+
+static void
+set_entry_background (GtkWidget *entry, gboolean error)
+{
+       if (error)
+       {
+               GdkColor red, white;
+               gdk_color_parse ("#FF6666", &red);
+               gdk_color_parse ("white", &white);
+               gtk_widget_modify_base (entry, GTK_STATE_NORMAL, &red);
+               gtk_widget_modify_text (entry, GTK_STATE_NORMAL, &white);
+       }
+
+       else
+       {
+               gtk_widget_modify_base (entry, GTK_STATE_NORMAL, NULL);
+               gtk_widget_modify_text (entry, GTK_STATE_NORMAL, NULL);
+       }
+}
diff --git a/src/main.c b/src/main.c
index 954dfd7..7a589c5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -37,6 +37,13 @@
 
 static gboolean option_version (const gchar *option_name, const gchar *value,
                gpointer data, GError **error);
+static void init_main_window (void);
+static void init_side_pane (void);
+static void init_source_view (GtkWidget *vbox_source_view);
+static void init_go_to_line (GtkWidget *vbox_source_view);
+static void init_find (GtkWidget *vbox_source_view);
+static void init_log_zone (void);
+static void init_statusbar (GtkWidget *main_vbox);
 
 latexila_t latexila = {NULL};
 
@@ -70,74 +77,9 @@ option_version (const gchar *option_name, const gchar *value, gpointer data,
        return TRUE;
 }
 
-int
-main (int argc, char *argv[])
+static void
+init_main_window (void)
 {
-       GError *error = NULL;
-       GtkWidget *scrollbar;
-       GtkCellRenderer *renderer;
-       GtkTreeViewColumn *column;
-
-       /* command line options */
-       gboolean option_new_document = FALSE;
-
-       gchar *latexila_nls_package = NULL;
-#ifdef LATEXILA_NLS_ENABLED
-       latexila_nls_package = LATEXILA_NLS_PACKAGE;
-#endif
-
-       GOptionEntry options[] = {
-               { "version", 'v', G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_NO_ARG,
-                       G_OPTION_ARG_CALLBACK, (gpointer) option_version,
-                       N_("Display version informations"), NULL },
-               { "new-document", 'n', G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_NO_ARG,
-                       G_OPTION_ARG_NONE, &option_new_document,
-                       N_("Create new document"), NULL },
-               {NULL}
-       };
-
-       GOptionContext *context = g_option_context_new ("[FILES]");
-       g_option_context_add_main_entries (context, options, latexila_nls_package);
-       g_option_context_add_group (context, gtk_get_option_group (TRUE));
-
-       // TODO with valgrind there are a lot of memory leaks with this, can we do
-       // something?
-       if (! g_option_context_parse (context, &argc, &argv, &error))
-               print_error ("option parsing failed: %s\n", error->message);
-
-       gtk_init_with_args (&argc, &argv, NULL, options, latexila_nls_package,
-                       &error);
-       if (error != NULL)
-               print_error ("%s", error->message);
-
-       g_option_context_free (context);
-
-       /* localisation */
-#ifdef LATEXILA_NLS_ENABLED
-       setlocale (LC_ALL, "");
-       bindtextdomain (LATEXILA_NLS_PACKAGE, LATEXILA_NLS_LOCALEDIR);
-       bind_textdomain_codeset (LATEXILA_NLS_PACKAGE, "UTF-8");
-       textdomain (LATEXILA_NLS_PACKAGE);
-#endif
-
-       /* preferences */
-       load_preferences (&latexila.prefs);
-
-       /* personal style */
-       // make the close buttons in tabs smaller
-       // we use gtk_widget_set_name (widget, "my-close-button") to apply this
-       // style
-       gtk_rc_parse_string (
-               "style \"my-button-style\"\n"
-               "{\n"
-               "  GtkWidget::focus-padding = 0\n"
-               "  GtkWidget::focus-line-width = 0\n"
-               "  xthickness = 0\n"
-               "  ythickness = 0\n"
-               "}\n"
-               "widget \"*.my-close-button\" style \"my-button-style\"");
-
-       /* main window */
        GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        latexila.main_window = GTK_WINDOW (window);
        g_signal_connect (G_OBJECT (window), "delete_event",
@@ -149,29 +91,15 @@ main (int argc, char *argv[])
 
        if (latexila.prefs.window_maximised)
                gtk_window_maximize (GTK_WINDOW (window));
+}
 
-
-       /* menubar and toolbar */
-       GtkWidget *main_vbox = gtk_vbox_new (FALSE, 0);
-       gtk_container_add (GTK_CONTAINER (window), main_vbox);
-
-       init_ui (main_vbox);
-       
-       /* horizontal pane
-        * left: side pane (symbol tables and the file browser)
-        * right: the source view and the log zone
-        */
-       GtkWidget *main_hpaned = gtk_hpaned_new ();
-       latexila.main_hpaned = GTK_PANED (main_hpaned);
-       gtk_paned_set_position (GTK_PANED (main_hpaned),
-                       latexila.prefs.main_hpaned_pos);
-       gtk_box_pack_start (GTK_BOX (main_vbox), main_hpaned, TRUE, TRUE, 0);
-
-       /* side pane */
+static void
+init_side_pane (void)
+{
        GtkWidget *side_pane_notebook = gtk_notebook_new ();
        latexila.side_pane = side_pane_notebook;
        gtk_notebook_set_scrollable (GTK_NOTEBOOK (side_pane_notebook), TRUE);
-       gtk_paned_add1 (GTK_PANED (main_hpaned), side_pane_notebook);
+       gtk_paned_add1 (latexila.main_hpaned, side_pane_notebook);
 
        // symbol tables
        GtkWidget *vbox_symbols = gtk_vbox_new (FALSE, 0);
@@ -203,20 +131,11 @@ main (int argc, char *argv[])
        gtk_notebook_append_page (GTK_NOTEBOOK (side_pane_notebook),
                        vbox_file_browser, tab_label);
        init_file_browser ();
+}
 
-       /* vertical pane
-        * top: source view, go to line, search and replace
-        * bottom: log zone
-        */
-       GtkWidget *vpaned = gtk_vpaned_new ();
-       latexila.vpaned = GTK_PANED (vpaned);
-       gtk_paned_set_position (GTK_PANED (vpaned), latexila.prefs.vpaned_pos);
-       gtk_paned_add2 (GTK_PANED (main_hpaned), vpaned);
-
-       GtkWidget *vbox_source_view = gtk_vbox_new (FALSE, 2);
-       gtk_paned_add1 (GTK_PANED (vpaned), vbox_source_view);
-
-       /* source view with tabs */
+static void
+init_source_view (GtkWidget *vbox_source_view)
+{
        GtkWidget *notebook = gtk_notebook_new ();
        latexila.notebook = GTK_NOTEBOOK (notebook);
        gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
@@ -225,25 +144,29 @@ main (int argc, char *argv[])
        g_signal_connect (G_OBJECT (notebook), "page-reordered",
                        G_CALLBACK (cb_page_reordered), NULL);
        gtk_box_pack_start (GTK_BOX (vbox_source_view), notebook, TRUE, TRUE, 0);
+}
 
-       /* go to line */
+static void
+init_go_to_line (GtkWidget *vbox_source_view)
+{
        GtkWidget *go_to_line = gtk_hbox_new (FALSE, 3);
-       latexila.go_to_line = go_to_line;
+       latexila.under_source_view.go_to_line = go_to_line;
        gtk_box_pack_start (GTK_BOX (vbox_source_view), go_to_line, FALSE, FALSE, 0);
 
        GtkWidget *close_button = gtk_button_new ();
        gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
-       image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
+       GtkWidget *image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
+                       GTK_ICON_SIZE_MENU);
        gtk_container_add (GTK_CONTAINER (close_button), image);
        g_signal_connect (G_OBJECT (close_button), "clicked",
                        G_CALLBACK (cb_close_go_to_line), NULL);
        gtk_box_pack_start (GTK_BOX (go_to_line), close_button, FALSE, FALSE, 0);
        
-       label = gtk_label_new (_("Go to Line:"));
+       GtkWidget *label = gtk_label_new (_("Go to Line:"));
        gtk_box_pack_start (GTK_BOX (go_to_line), label, FALSE, FALSE, 2);
 
        GtkWidget *entry_go_to_line = gtk_entry_new ();
-       latexila.go_to_line_entry = entry_go_to_line;
+       latexila.under_source_view.go_to_line_entry = entry_go_to_line;
        gtk_entry_set_icon_from_stock (GTK_ENTRY (entry_go_to_line),
                        GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_JUMP_TO);
        gtk_widget_set_tooltip_text (entry_go_to_line,
@@ -251,25 +174,28 @@ main (int argc, char *argv[])
        g_signal_connect (G_OBJECT (entry_go_to_line), "activate",
                        G_CALLBACK (cb_go_to_line_entry), NULL);
        gtk_box_pack_start (GTK_BOX (go_to_line), entry_go_to_line, FALSE, FALSE, 0);
+}
 
-       /* find */
+static void
+init_find (GtkWidget *vbox_source_view)
+{
        GtkWidget *find = gtk_hbox_new (FALSE, 3);
-       latexila.find = find;
+       latexila.under_source_view.find = find;
        gtk_box_pack_start (GTK_BOX (vbox_source_view), find, FALSE, FALSE, 0);
 
-       close_button = gtk_button_new ();
+       GtkWidget *close_button = gtk_button_new ();
        gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
-       image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
+       GtkWidget *image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
        gtk_container_add (GTK_CONTAINER (close_button), image);
        g_signal_connect (G_OBJECT (close_button), "clicked",
                        G_CALLBACK (cb_close_find), NULL);
        gtk_box_pack_start (GTK_BOX (find), close_button, FALSE, FALSE, 0);
        
-       label = gtk_label_new (_("Find:"));
+       GtkWidget *label = gtk_label_new (_("Find:"));
        gtk_box_pack_start (GTK_BOX (find), label, FALSE, FALSE, 2);
 
        GtkWidget *find_entry = gtk_entry_new ();
-       latexila.find_entry = find_entry;
+       latexila.under_source_view.find_entry = find_entry;
        g_signal_connect (G_OBJECT (find_entry), "activate",
                        G_CALLBACK (cb_find_entry), NULL);
        gtk_box_pack_start (GTK_BOX (find), find_entry, FALSE, FALSE, 0);
@@ -291,18 +217,13 @@ main (int argc, char *argv[])
        gtk_box_pack_start (GTK_BOX (find), next_button, FALSE, FALSE, 0);
 
        GtkWidget *match_case = gtk_check_button_new_with_label (_("Match case"));
-       latexila.find_match_case = match_case;
+       latexila.under_source_view.find_match_case = match_case;
        gtk_box_pack_start (GTK_BOX (find), match_case, FALSE, FALSE, 0);
+}
 
-       /* log zone */
-       // horizontal pane:
-       // left: action history
-       // right: details
-       GtkWidget *hpaned = gtk_hpaned_new ();
-       latexila.log_hpaned = GTK_PANED (hpaned);
-       gtk_paned_set_position (GTK_PANED (hpaned), latexila.prefs.log_hpaned_pos);
-       gtk_paned_add2 (GTK_PANED (vpaned), hpaned);
-
+static void
+init_log_zone (void)
+{
        // action history
        GtkListStore *list_store = gtk_list_store_new (N_COLUMNS_ACTION,
                        G_TYPE_STRING, G_TYPE_POINTER);
@@ -311,14 +232,11 @@ main (int argc, char *argv[])
        GtkWidget *list_view = gtk_tree_view_new_with_model (
                        GTK_TREE_MODEL (list_store));
        latexila.action_log.list_view = GTK_TREE_VIEW (list_view);
-       renderer = gtk_cell_renderer_text_new ();
-       column = gtk_tree_view_column_new_with_attributes (
+       GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
+       GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes (
                        _("Action history"), renderer, "text", COLUMN_ACTION_TITLE, NULL);      
        gtk_tree_view_append_column (latexila.action_log.list_view, column);
        
-       // hide "Action history"
-       //gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list_view), FALSE);
-
        GtkTreeSelection *select =
                gtk_tree_view_get_selection (latexila.action_log.list_view);
        latexila.action_log.list_selection = select;
@@ -327,10 +245,10 @@ main (int argc, char *argv[])
                        G_CALLBACK (cb_action_list_changed), NULL);
 
        // with a scrollbar
-       scrollbar = gtk_scrolled_window_new (NULL, NULL);
+       GtkWidget *scrollbar = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollbar),
                        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-       gtk_paned_add1 (GTK_PANED (hpaned), scrollbar);
+       gtk_paned_add1 (GTK_PANED (latexila.log_hpaned), scrollbar);
        gtk_container_add (GTK_CONTAINER (scrollbar), list_view);
        
        // log details
@@ -348,7 +266,7 @@ main (int argc, char *argv[])
        scrollbar = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollbar),
                        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-       gtk_paned_add2 (GTK_PANED (hpaned), scrollbar);
+       gtk_paned_add2 (GTK_PANED (latexila.log_hpaned), scrollbar);
        gtk_container_add (GTK_CONTAINER (scrollbar), log_view);
 
        // tags
@@ -359,8 +277,11 @@ main (int argc, char *argv[])
                        "foreground", "red",
                        NULL);
        latexila.action_log.tag_table = gtk_text_buffer_get_tag_table (log_buffer);
+}
 
-       /* statusbar */
+static void
+init_statusbar (GtkWidget *main_vbox)
+{
        GtkWidget *statusbar = gtk_statusbar_new ();
        latexila.statusbar = GTK_STATUSBAR (statusbar);
        gtk_box_pack_start (GTK_BOX (main_vbox), statusbar, FALSE, FALSE, 0);
@@ -372,10 +293,127 @@ main (int argc, char *argv[])
        gtk_widget_set_size_request (cursor_position_statusbar, 150, -1);
        gtk_box_pack_end (GTK_BOX (statusbar), cursor_position_statusbar,
                        FALSE, TRUE, 0);
+}
+
+int
+main (int argc, char *argv[])
+{
+       GError *error = NULL;
+
+       /* command line options */
+       gboolean option_new_document = FALSE;
+
+       gchar *latexila_nls_package = NULL;
+#ifdef LATEXILA_NLS_ENABLED
+       latexila_nls_package = LATEXILA_NLS_PACKAGE;
+#endif
+
+       GOptionEntry options[] = {
+               { "version", 'v', G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_NO_ARG,
+                       G_OPTION_ARG_CALLBACK, (gpointer) option_version,
+                       N_("Display version informations"), NULL },
+               { "new-document", 'n', G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_NO_ARG,
+                       G_OPTION_ARG_NONE, &option_new_document,
+                       N_("Create new document"), NULL },
+               {NULL}
+       };
+
+       GOptionContext *context = g_option_context_new ("[FILES]");
+       g_option_context_add_main_entries (context, options, latexila_nls_package);
+       g_option_context_add_group (context, gtk_get_option_group (TRUE));
+
+       // TODO with valgrind there are a lot of memory leaks with this, can we do
+       // something?
+       if (! g_option_context_parse (context, &argc, &argv, &error))
+               print_error ("option parsing failed: %s\n", error->message);
+
+       gtk_init_with_args (&argc, &argv, NULL, options, latexila_nls_package,
+                       &error);
+       if (error != NULL)
+               print_error ("%s", error->message);
+
+       g_option_context_free (context);
+
+       /* localisation */
+#ifdef LATEXILA_NLS_ENABLED
+       setlocale (LC_ALL, "");
+       bindtextdomain (LATEXILA_NLS_PACKAGE, LATEXILA_NLS_LOCALEDIR);
+       bind_textdomain_codeset (LATEXILA_NLS_PACKAGE, "UTF-8");
+       textdomain (LATEXILA_NLS_PACKAGE);
+#endif
+
+       /* preferences */
+       load_preferences (&latexila.prefs);
+
+       /* personal style */
+       // make the close buttons in tabs smaller
+       // we use gtk_widget_set_name (widget, "my-close-button") to apply this
+       // style
+       gtk_rc_parse_string (
+               "style \"my-button-style\"\n"
+               "{\n"
+               "  GtkWidget::focus-padding = 0\n"
+               "  GtkWidget::focus-line-width = 0\n"
+               "  xthickness = 0\n"
+               "  ythickness = 0\n"
+               "}\n"
+               "widget \"*.my-close-button\" style \"my-button-style\"");
+
+       /* main window */
+       init_main_window ();
+
+       /* menubar and toolbar */
+       GtkWidget *main_vbox = gtk_vbox_new (FALSE, 0);
+       gtk_container_add (GTK_CONTAINER (latexila.main_window), main_vbox);
+
+       init_ui (main_vbox);
+       
+       /* horizontal pane
+        * left: side pane (symbol tables and the file browser)
+        * right: the source view and the log zone
+        */
+       GtkWidget *main_hpaned = gtk_hpaned_new ();
+       latexila.main_hpaned = GTK_PANED (main_hpaned);
+       gtk_paned_set_position (GTK_PANED (main_hpaned),
+                       latexila.prefs.main_hpaned_pos);
+       gtk_box_pack_start (GTK_BOX (main_vbox), main_hpaned, TRUE, TRUE, 0);
 
+       /* side pane */
+       init_side_pane ();
+
+       /* vertical pane
+        * top: source view, go to line, search and replace
+        * bottom: log zone
+        */
+       GtkWidget *vpaned = gtk_vpaned_new ();
+       latexila.vpaned = GTK_PANED (vpaned);
+       gtk_paned_set_position (GTK_PANED (vpaned), latexila.prefs.vpaned_pos);
+       gtk_paned_add2 (GTK_PANED (main_hpaned), vpaned);
+
+       // vbox_source_view contains the source view, go to line, search and replace
+       GtkWidget *vbox_source_view = gtk_vbox_new (FALSE, 2);
+       gtk_paned_add1 (GTK_PANED (vpaned), vbox_source_view);
+
+       init_source_view (vbox_source_view);
+       init_go_to_line (vbox_source_view);
+       init_find (vbox_source_view);
+
+       /* log zone */
+       // horizontal pane:
+       // left: action history
+       // right: details
+       GtkWidget *hpaned = gtk_hpaned_new ();
+       latexila.log_hpaned = GTK_PANED (hpaned);
+       gtk_paned_set_position (GTK_PANED (hpaned), latexila.prefs.log_hpaned_pos);
+       gtk_paned_add2 (GTK_PANED (vpaned), hpaned);
+
+       init_log_zone ();
+
+       /* statusbar */
+       init_statusbar (main_vbox);
 
        /* show the window */
-       gtk_widget_show_all (window);
+       gtk_widget_show_all (GTK_WIDGET (latexila.main_window));
 
        if (! latexila.prefs.show_side_pane)
                gtk_widget_hide (latexila.side_pane);
@@ -383,8 +421,8 @@ main (int argc, char *argv[])
        if (! latexila.prefs.show_edit_toolbar)
                gtk_widget_hide (latexila.edit_toolbar);
 
-       gtk_widget_hide (latexila.go_to_line);
-       gtk_widget_hide (latexila.find);
+       gtk_widget_hide (latexila.under_source_view.go_to_line);
+       gtk_widget_hide (latexila.under_source_view.find);
 
        /* reopen files on startup */
        gchar ** list_opened_docs = (gchar **) latexila.prefs.list_opened_docs->pdata;
@@ -396,10 +434,6 @@ main (int argc, char *argv[])
        g_ptr_array_free (latexila.prefs.list_opened_docs, TRUE);
        latexila.prefs.list_opened_docs = g_ptr_array_new ();
 
-       /* if --new-document option is used */
-       if (option_new_document)
-               cb_new ();
-
        /* open documents given in arguments */
        for (int i = 1 ; i < argc ; i++)
        {
@@ -417,6 +451,11 @@ main (int argc, char *argv[])
                g_free (path);
        }
 
+       /* if --new-document option is used */
+       if (option_new_document)
+               cb_new ();
+
+
        gtk_main ();
 
        return EXIT_SUCCESS;
diff --git a/src/main.h b/src/main.h
index 59d3e35..9e24b81 100644
--- a/src/main.h
+++ b/src/main.h
@@ -113,27 +113,32 @@ typedef struct
 
 typedef struct
 {
-       GList                   *all_docs;
-       document_t              *active_doc;
-       action_log_t    action_log;
-       symbols_t               symbols;
-       file_browser_t  file_browser;
-       preferences_t   prefs;
-       actions_t               actions;
-       GtkWindow               *main_window;
-       GtkNotebook             *notebook;
-       GtkStatusbar    *statusbar;
-       GtkStatusbar    *cursor_position;
-       GtkPaned                *main_hpaned;
-       GtkPaned                *vpaned;
-       GtkPaned                *log_hpaned;
-       GtkWidget               *edit_toolbar;
-       GtkWidget               *side_pane;
-       GtkWidget               *go_to_line;
-       GtkWidget               *go_to_line_entry;
-       GtkWidget               *find;
-       GtkWidget               *find_entry;
-       GtkWidget               *find_match_case;
+       GtkWidget       *go_to_line;
+       GtkWidget       *go_to_line_entry;
+       GtkWidget       *find;
+       GtkWidget       *find_entry;
+       GtkWidget       *find_match_case;
+} under_source_view_t;
+
+typedef struct
+{
+       GList                           *all_docs;
+       document_t                      *active_doc;
+       action_log_t            action_log;
+       symbols_t                       symbols;
+       file_browser_t          file_browser;
+       preferences_t           prefs;
+       actions_t                       actions;
+       under_source_view_t under_source_view;
+       GtkWindow                       *main_window;
+       GtkNotebook                     *notebook;
+       GtkStatusbar            *statusbar;
+       GtkStatusbar            *cursor_position;
+       GtkPaned                        *main_hpaned;
+       GtkPaned                        *vpaned;
+       GtkPaned                        *log_hpaned;
+       GtkWidget                       *edit_toolbar;
+       GtkWidget                       *side_pane;
 } latexila_t;
 
 // a lot of things are accessible by the "latexila" variable everywhere in the


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