diff options
| author | Stefano Karapetsas <[email protected]> | 2012-04-27 17:35:23 +0200 | 
|---|---|---|
| committer | Stefano Karapetsas <[email protected]> | 2012-04-27 17:35:23 +0200 | 
| commit | 416237607d4985738feaede3b7e1b49cae9be149 (patch) | |
| tree | 5d652a86e5f737d2fcb99a0917083b9d11028e32 | |
| parent | aaf4c05d9a382b18eb2eced119eff8fbf0f4c763 (diff) | |
| download | caja-416237607d4985738feaede3b7e1b49cae9be149.tar.bz2 caja-416237607d4985738feaede3b7e1b49cae9be149.tar.xz  | |
restore location toggle button
patch from http://git.gnome.org/browse/nautilus/commit/?id=4b49aab5aa6a9ef9ab288ff2ce463affca1eacf2
| -rw-r--r-- | src/caja-navigation-window-pane.c | 75 | ||||
| -rw-r--r-- | src/caja-navigation-window-pane.h | 1 | 
2 files changed, 76 insertions, 0 deletions
diff --git a/src/caja-navigation-window-pane.c b/src/caja-navigation-window-pane.c index 021a1798..f70c1c78 100644 --- a/src/caja-navigation-window-pane.c +++ b/src/caja-navigation-window-pane.c @@ -64,6 +64,9 @@ real_set_active (CajaWindowPane *pane, gboolean is_active)      /* navigation bar (manual entry) */      caja_location_bar_set_active (CAJA_LOCATION_BAR (nav_pane->navigation_bar), is_active); +     +    /* location button */ +    gtk_widget_set_sensitive (gtk_bin_get_child (GTK_BIN (pane->location_button)), is_active);  }  static gboolean @@ -214,6 +217,51 @@ path_bar_location_changed_callback (GtkWidget *widget,  }  static gboolean +location_button_should_be_active (CajaNavigationWindowPane *pane) +{ +    return eel_preferences_get_boolean (CAJA_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY); +} + +static void +location_button_toggled_cb (GtkToggleButton *toggle, +                            CajaNavigationWindowPane *pane) +{ +    gboolean is_active; + +    is_active = gtk_toggle_button_get_active (toggle); +    eel_preferences_set_boolean (CAJA_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY, is_active); + +    if (is_active) { +        caja_navigation_bar_activate (CAJA_NAVIGATION_BAR (pane->navigation_bar)); +    } + +    caja_window_set_active_pane (CAJA_WINDOW_PANE (pane)->window, CAJA_WINDOW_PANE (pane)); +} + +static GtkWidget * +location_button_create (CajaNavigationWindowPane *pane) +{ +    GtkWidget *image; +    GtkWidget *button; + +    image = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_BUTTON); +    gtk_widget_show (image); + +    button = g_object_new (GTK_TYPE_TOGGLE_BUTTON, +                   "image", image, +                   "focus-on-click", FALSE, +                   "active", location_button_should_be_active (pane), +                   NULL); + +    gtk_widget_set_tooltip_text (button, +                     _("Toggle between button and text-based location bar")); + +    g_signal_connect (button, "toggled", +              G_CALLBACK (location_button_toggled_cb), pane); +    return button; +} + +static gboolean  path_bar_button_pressed_callback (GtkWidget *widget,                                    GdkEventButton *event,                                    CajaNavigationWindowPane *pane) @@ -647,6 +695,14 @@ caja_navigation_window_pane_always_use_location_entry (CajaNavigationWindowPane      {          caja_navigation_window_pane_set_bar_mode (pane, CAJA_BAR_PATH);      } +     +    g_signal_handlers_block_by_func (pane->location_button, +                                     G_CALLBACK (location_button_toggled_cb), +                                     pane); +    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pane->location_button), use_entry); +    g_signal_handlers_unblock_by_func (pane->location_button, +                                       G_CALLBACK (location_button_toggled_cb), +                                       pane);  }  void @@ -667,6 +723,11 @@ caja_navigation_window_pane_setup (CajaNavigationWindowPane *pane)      header_size_group = CAJA_NAVIGATION_WINDOW (CAJA_WINDOW_PANE (pane)->window)->details->header_size_group; +    pane->location_button = location_button_create (pane); +    gtk_size_group_add_widget (pane->navigation_group, pane->location_button); +    gtk_box_pack_start (GTK_BOX (hbox), pane->location_button, FALSE, FALSE, 0); +    gtk_widget_show (pane->location_button); +      pane->path_bar = g_object_new (CAJA_TYPE_PATH_BAR, NULL);      gtk_size_group_add_widget (header_size_group, pane->path_bar);      gtk_widget_show (pane->path_bar); @@ -776,6 +837,7 @@ void  caja_navigation_window_pane_set_bar_mode (CajaNavigationWindowPane *pane,          CajaBarMode mode)  { +    gboolean use_entry;      GtkWidget *focus_widget;      CajaNavigationWindow *window; @@ -800,6 +862,19 @@ caja_navigation_window_pane_set_bar_mode (CajaNavigationWindowPane *pane,          gtk_widget_hide (pane->navigation_bar);          break;      } +     +    if (mode == CAJA_BAR_NAVIGATION || mode == CAJA_BAR_PATH) { +        use_entry = (mode == CAJA_BAR_NAVIGATION); + +        g_signal_handlers_block_by_func (pane->location_button, +                         G_CALLBACK (location_button_toggled_cb), +                         pane); +        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pane->location_button), +                          use_entry); +        g_signal_handlers_unblock_by_func (pane->location_button, +                           G_CALLBACK (location_button_toggled_cb), +                           pane); +    }      window = CAJA_NAVIGATION_WINDOW (CAJA_WINDOW_PANE (pane)->window);      focus_widget = gtk_window_get_focus (GTK_WINDOW (window)); diff --git a/src/caja-navigation-window-pane.h b/src/caja-navigation-window-pane.h index 87e4ae5d..8824332f 100644 --- a/src/caja-navigation-window-pane.h +++ b/src/caja-navigation-window-pane.h @@ -51,6 +51,7 @@ struct _CajaNavigationWindowPane      /* location bar */      GtkWidget *location_bar; +    GtkWidget *location_button;      GtkWidget *navigation_bar;      GtkWidget *path_bar;      GtkWidget *search_bar;  | 
