summaryrefslogtreecommitdiff
path: root/src/caja-zoom-action.c
diff options
context:
space:
mode:
authorPerberos <[email protected]>2011-12-01 22:24:23 -0300
committerPerberos <[email protected]>2011-12-01 22:24:23 -0300
commit0e004c696b0e68b2cff37a4c3315b022a35eaf43 (patch)
tree43261e815529cb9518ed7be37af13b846af8b26b /src/caja-zoom-action.c
downloadcaja-0e004c696b0e68b2cff37a4c3315b022a35eaf43.tar.bz2
caja-0e004c696b0e68b2cff37a4c3315b022a35eaf43.tar.xz
moving from https://github.com/perberos/mate-desktop-environment
Diffstat (limited to 'src/caja-zoom-action.c')
-rw-r--r--src/caja-zoom-action.c211
1 files changed, 211 insertions, 0 deletions
diff --git a/src/caja-zoom-action.c b/src/caja-zoom-action.c
new file mode 100644
index 00000000..690042e0
--- /dev/null
+++ b/src/caja-zoom-action.c
@@ -0,0 +1,211 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
+/*
+ * Caja
+ *
+ * Copyright (C) 2009 Red Hat, Inc.
+ *
+ * Caja is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * Caja is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Authors: Alexander Larsson <[email protected]>
+ *
+ */
+
+#include <config.h>
+
+#include "caja-zoom-action.h"
+#include "caja-zoom-control.h"
+#include "caja-navigation-window.h"
+#include "caja-window-private.h"
+#include "caja-navigation-window-slot.h"
+#include <gtk/gtk.h>
+#include <eel/eel-gtk-extensions.h>
+
+G_DEFINE_TYPE (CajaZoomAction, caja_zoom_action, GTK_TYPE_ACTION)
+
+static void caja_zoom_action_init (CajaZoomAction *action);
+static void caja_zoom_action_class_init (CajaZoomActionClass *class);
+
+static GObjectClass *parent_class = NULL;
+
+#define CAJA_ZOOM_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), CAJA_TYPE_ZOOM_ACTION, CajaZoomActionPrivate))
+
+struct CajaZoomActionPrivate
+{
+ CajaNavigationWindow *window;
+};
+
+enum
+{
+ PROP_0,
+ PROP_WINDOW
+};
+
+static void
+zoom_changed_callback (CajaWindow *window,
+ CajaZoomLevel zoom_level,
+ gboolean supports_zooming,
+ gboolean can_zoom,
+ gboolean can_zoom_in,
+ gboolean can_zoom_out,
+ GtkWidget *zoom_control)
+{
+ if (supports_zooming)
+ {
+ gtk_widget_set_sensitive (zoom_control, can_zoom);
+ gtk_widget_show (zoom_control);
+ if (can_zoom)
+ {
+ caja_zoom_control_set_zoom_level (CAJA_ZOOM_CONTROL (zoom_control),
+ zoom_level);
+ }
+ }
+ else
+ {
+ gtk_widget_hide (zoom_control);
+ }
+}
+
+static void
+connect_proxy (GtkAction *action,
+ GtkWidget *proxy)
+{
+ if (GTK_IS_TOOL_ITEM (proxy))
+ {
+ GtkToolItem *item = GTK_TOOL_ITEM (proxy);
+ CajaZoomAction *zaction = CAJA_ZOOM_ACTION (action);
+ CajaNavigationWindow *window = zaction->priv->window;
+ GtkWidget *zoom_control;
+
+ zoom_control = caja_zoom_control_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (item), 4);
+ gtk_container_add (GTK_CONTAINER (item), zoom_control);
+ gtk_widget_show (zoom_control);
+
+ g_signal_connect_object (zoom_control, "zoom_in",
+ G_CALLBACK (caja_window_zoom_in),
+ window, G_CONNECT_SWAPPED);
+ g_signal_connect_object (zoom_control, "zoom_out",
+ G_CALLBACK (caja_window_zoom_out),
+ window, G_CONNECT_SWAPPED);
+ g_signal_connect_object (zoom_control, "zoom_to_level",
+ G_CALLBACK (caja_window_zoom_to_level),
+ window, G_CONNECT_SWAPPED);
+ g_signal_connect_object (zoom_control, "zoom_to_default",
+ G_CALLBACK (caja_window_zoom_to_default),
+ window, G_CONNECT_SWAPPED);
+
+ g_signal_connect (window, "zoom-changed",
+ G_CALLBACK (zoom_changed_callback),
+ zoom_control);
+ }
+
+ (* GTK_ACTION_CLASS (parent_class)->connect_proxy) (action, proxy);
+}
+
+static void
+disconnect_proxy (GtkAction *action,
+ GtkWidget *proxy)
+{
+ if (GTK_IS_TOOL_ITEM (proxy))
+ {
+ GtkToolItem *item = GTK_TOOL_ITEM (proxy);
+ CajaZoomAction *zaction = CAJA_ZOOM_ACTION (action);
+ CajaNavigationWindow *window = zaction->priv->window;
+ GtkWidget *child;
+
+ child = gtk_bin_get_child (GTK_BIN (item));
+
+ g_signal_handlers_disconnect_by_func (window, G_CALLBACK (zoom_changed_callback), child);
+
+ }
+
+ (* GTK_ACTION_CLASS (parent_class)->disconnect_proxy) (action, proxy);
+}
+
+static void
+caja_zoom_action_finalize (GObject *object)
+{
+ (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+}
+
+static void
+caja_zoom_action_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CajaZoomAction *zoom;
+
+ zoom = CAJA_ZOOM_ACTION (object);
+
+ switch (prop_id)
+ {
+ case PROP_WINDOW:
+ zoom->priv->window = CAJA_NAVIGATION_WINDOW (g_value_get_object (value));
+ break;
+ }
+}
+
+static void
+caja_zoom_action_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CajaZoomAction *zoom;
+
+ zoom = CAJA_ZOOM_ACTION (object);
+
+ switch (prop_id)
+ {
+ case PROP_WINDOW:
+ g_value_set_object (value, zoom->priv->window);
+ break;
+ }
+}
+
+static void
+caja_zoom_action_class_init (CajaZoomActionClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkActionClass *action_class = GTK_ACTION_CLASS (class);
+
+ object_class->finalize = caja_zoom_action_finalize;
+ object_class->set_property = caja_zoom_action_set_property;
+ object_class->get_property = caja_zoom_action_get_property;
+
+ parent_class = g_type_class_peek_parent (class);
+
+ action_class->toolbar_item_type = GTK_TYPE_TOOL_ITEM;
+ action_class->connect_proxy = connect_proxy;
+ action_class->disconnect_proxy = disconnect_proxy;
+
+ g_object_class_install_property (object_class,
+ PROP_WINDOW,
+ g_param_spec_object ("window",
+ "Window",
+ "The navigation window",
+ G_TYPE_OBJECT,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof(CajaZoomActionPrivate));
+}
+
+static void
+caja_zoom_action_init (CajaZoomAction *action)
+{
+ action->priv = CAJA_ZOOM_ACTION_GET_PRIVATE (action);
+}