summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <fourdan.olivier@wanadoo.fr>2006-01-20 22:27:22 +0000
committerOlivier Fourdan <fourdan.olivier@wanadoo.fr>2006-01-20 22:27:22 +0000
commited6b1d76d0fb151bf9ec42d6d84c0a77ca5910ef (patch)
tree280ff0ac6c64113838fa8640b36d1bd20df170aa
parent271bd540db3e440278a9e5a31bca69976fcbb4ab (diff)
downloadxfwm4-ed6b1d76d0fb151bf9ec42d6d84c0a77ca5910ef.tar.gz
Add the long awaited wm tweaks plugin.
(Old svn revision: 19513)
-rw-r--r--defaults/defaults2
-rw-r--r--mcs-plugin/Makefile.am40
-rw-r--r--mcs-plugin/wmtweak_plugin.c547
-rw-r--r--mcs-plugin/xfce-wmtweaks-settings.desktop.in12
-rw-r--r--mcs-plugin/xfwm4_plugin.c2
-rw-r--r--po/POTFILES.in2
-rw-r--r--src/settings.c14
7 files changed, 617 insertions, 2 deletions
diff --git a/defaults/defaults b/defaults/defaults
index 77ab73f50..e03b2eeca 100644
--- a/defaults/defaults
+++ b/defaults/defaults
@@ -49,3 +49,5 @@ wrap_workspaces=false
show_app_icon=false
show_frame_shadow=true
show_popup_shadow=true
+active_opacity=100
+inactive_opacity=80
diff --git a/mcs-plugin/Makefile.am b/mcs-plugin/Makefile.am
index 95ec15cd3..63bd7a2c9 100644
--- a/mcs-plugin/Makefile.am
+++ b/mcs-plugin/Makefile.am
@@ -85,6 +85,45 @@ workspaces_plugin_la_LIBADD += \
@LIBX11_LIBS@
endif
+wmtweak_plugindir = $(libdir)/xfce4/mcs-plugins
+
+wmtweak_plugin_LTLIBRARIES = wmtweak_plugin.la
+
+wmtweak_plugin_la_LDFLAGS = \
+ -avoid-version \
+ -module
+
+if HAVE_CYGWIN
+wmtweak_plugin_la_LDFLAGS += \
+ -no-undefined \
+ -export-symbols $(datadir)/xfce4/devel/mcs-manager.def
+endif
+
+wmtweak_plugin_la_SOURCES = \
+ wmtweak_plugin.c \
+ monitor-icon.h
+
+wmtweak_plugin_la_CFLAGS = \
+ @LIBX11_CFLAGS@ \
+ @LIBXFCE4MCS_MANAGER_CFLAGS@ \
+ @LIBXFCEGUI4_CFLAGS@ \
+ @XFCE_MCS_MANAGER_CFLAGS@ \
+ -I$(top_builddir)/common \
+ -DPACKAGE_LOCALE_DIR=\""$(localedir)"\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DDATADIR=\"$(pkgdatadir)\"
+
+wmtweak_plugin_la_LIBADD = \
+ @LIBXFCEGUI4_LIBS@ \
+ @LIBXFCE4MCS_MANAGER_LIBS@ \
+ @LIBS@
+
+if HAVE_CYGWIN
+wmtweak_plugin_la_LIBADD += \
+ @LIBX11_LIBS@
+endif
+
+
noinst_DATA = \
monitor-icon.h \
monitor-icon.png
@@ -97,6 +136,7 @@ monitor-icon.h: $(srcdir)/monitor-icon.png
desktopdir = $(datadir)/applications
desktop_in_files = \
xfce-wm-settings.desktop.in \
+ xfce-wmtweaks-settings.desktop.in \
xfce-workspaces-settings.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
diff --git a/mcs-plugin/wmtweak_plugin.c b/mcs-plugin/wmtweak_plugin.c
new file mode 100644
index 000000000..3cc2018b3
--- /dev/null
+++ b/mcs-plugin/wmtweak_plugin.c
@@ -0,0 +1,547 @@
+/* $Id$
+
+ This program 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, or (at your option)
+ any later version.
+
+ This program 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.
+
+ xfce4 mcs plugin - (c) 2005 Olivier Fourdan
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+
+#include <libxfce4mcs/mcs-common.h>
+#include <libxfce4mcs/mcs-manager.h>
+#include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
+#include <xfce-mcs-manager/manager-plugin.h>
+
+#define RCDIR "mcs_settings"
+#define OLDRCDIR "settings"
+#define RCFILE "wmtweaks.xml"
+#define CHANNEL "wmtweaks"
+#define PLUGIN_NAME "wmtweaks"
+#define BORDER 5
+
+static void xfwm4_create_channel (McsPlugin * mcs_plugin);
+static void run_dialog (McsPlugin * mcs_plugin);
+
+static gboolean is_running = FALSE;
+
+static gboolean cycle_minimum = TRUE;
+static gboolean cycle_hidden = TRUE;
+static gboolean cycle_workspaces = FALSE;
+static gboolean easy_click = TRUE;
+static gboolean focus_hint = TRUE;
+static gboolean show_frame_shadow = TRUE;
+static gboolean show_popup_shadow = TRUE;
+static gboolean prevent_focus_stealing = FALSE;
+static gboolean raise_with_any_button = FALSE;
+static gboolean restore_on_move = TRUE;
+static gboolean scroll_workspaces = TRUE;
+static gboolean toggle_workspaces = TRUE;
+static gboolean wrap_layout = FALSE;
+static gboolean wrap_cycle = FALSE;
+
+static int placement_ratio = 25;
+static int move_opacity = 100;
+static int resize_opacity = 100;
+static int popup_opacity = 100;
+
+
+/*
+ "Xfwm/CycleMinimum"
+ "Xfwm/CycleHidden"
+ "Xfwm/CycleWorkspaces"
+ "Xfwm/EasyClick"
+ "Xfwm/FocusHint"
+ "Xfwm/MoveOpacity"
+ "Xfwm/ResizeOpacity"
+ "Xfwm/PopupOpacity"
+ "Xfwm/PlacementRatio"
+ "Xfwm/ShowFrameShadow"
+ "Xfwm/ShowPopupShadow"
+ "Xfwm/PreventFocusStealing"
+ "Xfwm/RaiseWithAnyButton"
+ "Xfwm/RestoreOnMove"
+ "Xfwm/ScrollWorkspaces"
+ "Xfwm/ToggleWorkspaces"
+ "Xfwm/WrapLayout"
+ "Xfwm/WrapCycle"
+ */
+
+typedef struct _Itf Itf;
+struct _Itf
+{
+ McsPlugin *mcs_plugin;
+ GtkWidget *tweak_dialog;
+};
+
+static gboolean
+write_options (McsPlugin * mcs_plugin)
+{
+ gchar *rcfile, *path;
+ gboolean result = FALSE;
+
+ path = g_build_filename ("xfce4", "mcs_settings", RCFILE, NULL);
+ rcfile = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, path, TRUE);
+ if (G_LIKELY (rcfile != NULL))
+ {
+ result = mcs_manager_save_channel_to_file (mcs_plugin->manager, CHANNEL, rcfile);
+ g_free (rcfile);
+ }
+ g_free (path);
+
+ return result;
+}
+
+static void
+cb_gboolean_changed (GtkWidget * widget, gpointer user_data)
+{
+ gboolean *value = (gboolean *) user_data;
+ gchar *setting_name = NULL;
+ McsPlugin *mcs_plugin = NULL;
+
+ *value = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ setting_name = (gchar *) g_object_get_data (G_OBJECT (widget), "setting-name");
+ mcs_plugin = (McsPlugin *) g_object_get_data (G_OBJECT (widget), "mcs-plugin");
+
+ g_assert (setting_name);
+ g_assert (mcs_plugin);
+
+ mcs_manager_set_int (mcs_plugin->manager, setting_name, CHANNEL, *value ? 1 : 0);
+ mcs_manager_notify (mcs_plugin->manager, CHANNEL);
+ write_options (mcs_plugin);
+}
+
+static void
+cb_gint_changed (GtkWidget * widget, gpointer user_data)
+{
+ int *value = (int *) user_data;
+ gchar *setting_name = NULL;
+ McsPlugin *mcs_plugin = NULL;
+
+ *value = (int) gtk_range_get_value (GTK_RANGE (widget));
+ setting_name = (gchar *) g_object_get_data (G_OBJECT (widget), "setting-name");
+ mcs_plugin = (McsPlugin *) g_object_get_data (G_OBJECT (widget), "mcs-plugin");
+
+ g_assert (setting_name);
+ g_assert (mcs_plugin);
+
+ mcs_manager_set_int (mcs_plugin->manager, setting_name, CHANNEL, *value);
+ mcs_manager_notify (mcs_plugin->manager, CHANNEL);
+ write_options (mcs_plugin);
+}
+
+static GtkWidget *
+create_gboolean_button (McsPlugin * mcs_plugin, gchar *label, gchar *setting_name, gboolean *value)
+{
+ GtkWidget *check_button;
+
+ check_button =
+ gtk_check_button_new_with_mnemonic (label);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), *value);
+ g_object_set_data (G_OBJECT (check_button), "setting-name", setting_name);
+ g_object_set_data (G_OBJECT (check_button), "mcs-plugin", mcs_plugin);
+ g_signal_connect (G_OBJECT (check_button), "toggled", G_CALLBACK (cb_gboolean_changed), value);
+
+ return check_button;
+}
+
+static GtkWidget *
+create_int_range (McsPlugin * mcs_plugin, gchar *label, gchar *min_label, gchar *max_label,
+ gchar *setting_name, gint min, gint max, gint step, int *value)
+{
+ GtkObject *adjustment;
+ GtkWidget *scale;
+ GtkWidget *table;
+ GtkWidget *label_widget;
+
+ table = gtk_table_new (2, 3, FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER (table), BORDER);
+
+ label_widget = gtk_label_new (label);
+ gtk_table_attach (GTK_TABLE (table), label_widget, 0, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (label_widget), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (label_widget), 0, 0.5);
+ gtk_widget_show (label_widget);
+
+ label_widget = xfce_create_small_label (min_label);
+ gtk_table_attach (GTK_TABLE (table), label_widget, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (label_widget), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (label_widget), 1, 0.5);
+ gtk_widget_show (label_widget);
+
+ label_widget = xfce_create_small_label (max_label);
+ gtk_table_attach (GTK_TABLE (table), label_widget, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (label_widget), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (label_widget), 0, 0.5);
+ gtk_widget_show (label_widget);
+
+ adjustment = gtk_adjustment_new ((gdouble) *value, (gdouble) min, (gdouble) max, (gdouble) step, 0.0, 0.0);
+ scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
+ gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+ gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
+ gtk_scale_set_digits (GTK_SCALE (scale), 0);
+ gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DISCONTINUOUS);
+ gtk_widget_show (scale);
+
+ g_object_set_data (G_OBJECT (scale), "setting-name", setting_name);
+ g_object_set_data (G_OBJECT (scale), "mcs-plugin", mcs_plugin);
+ g_signal_connect (G_OBJECT (scale), "value_changed", G_CALLBACK (cb_gint_changed), value);
+
+ return table;
+}
+
+static void
+cb_dialog_response (GtkWidget * dialog, gint response_id)
+{
+ if (response_id == GTK_RESPONSE_HELP)
+ {
+ GError *error = NULL;
+ xfce_exec ("xfhelp4 xfwm4.html", FALSE, FALSE, &error);
+ if (error)
+ {
+ char *msg = g_strcompress (error->message);
+ xfce_warn ("%s", msg);
+ g_free (msg);
+ g_error_free (error);
+ }
+ }
+ else
+ {
+ is_running = FALSE;
+ gtk_widget_destroy (dialog);
+ }
+}
+
+static Itf *
+create_dialog (McsPlugin * mcs_plugin)
+{
+ static GdkAtom composite = (GdkAtom) 0;
+ Itf *dialog;
+ GtkWidget *dialog_vbox;
+ GtkWidget *dialog_header;
+ GtkWidget *notebook;
+ GtkWidget *hbox;
+ GtkWidget *frame;
+ GtkWidget *label;
+ GtkWidget *vbox;
+ GtkWidget *vbox1;
+ GtkWidget *check_button;
+ GtkWidget *range;
+ GtkWidget *action_area;
+ GtkWidget *button;
+
+ dialog = g_new (Itf, 1);
+
+ dialog->mcs_plugin = mcs_plugin;
+
+ dialog->tweak_dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog->tweak_dialog), _("Window Manager Tweaks"));
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog->tweak_dialog), FALSE);
+
+ gtk_window_set_icon (GTK_WINDOW (dialog->tweak_dialog), mcs_plugin->icon);
+
+ dialog_vbox = GTK_DIALOG (dialog->tweak_dialog)->vbox;
+ gtk_widget_show (dialog_vbox);
+
+ dialog_header = xfce_create_header (mcs_plugin->icon, _("Window Manager Advanced Configuration"));
+ gtk_widget_show (dialog_header);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox), dialog_header, FALSE, TRUE, 0);
+
+ notebook = gtk_notebook_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (notebook), BORDER + 1);
+ gtk_widget_show (notebook);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox), notebook, TRUE, TRUE, 0);
+
+ vbox1 = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (notebook), vbox1);
+
+ frame = xfce_framebox_new (_("Window cycling"), TRUE);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox1), frame, FALSE, FALSE, 0);
+
+ vbox = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox);
+ xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Include windows that have \"skip pager\" or\n\"skip taskbar\" properties set."),
+ "Xfwm/CycleMinimum", &cycle_minimum);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Include hidden (ie iconified) windows."),
+ "Xfwm/CycleHidden", &cycle_hidden);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Cycle through windows from all workspaces."),
+ "Xfwm/CycleWorkspaces", &cycle_workspaces);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ frame = xfce_framebox_new (_("Focus"), TRUE);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox1), frame, TRUE, FALSE, 0);
+
+ vbox = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox);
+ xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Activate focus stealing prevention."),
+ "Xfwm/PreventFocusStealing", &prevent_focus_stealing);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Honor the standard ICCCM focus hint."),
+ "Xfwm/FocusHint", &focus_hint);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ frame = xfce_framebox_new (_("Accessibility"), TRUE);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox1), frame, TRUE, FALSE, 0);
+
+ vbox = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox);
+ xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Activate the ALT key to grab and move windows."),
+ "Xfwm/EasyClick", &easy_click);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Raise windows when any mouse button is pressed."),
+ "Xfwm/RaiseWithAnyButton", &raise_with_any_button);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Restore original size of maximized windows when moving."),
+ "Xfwm/RestoreOnMove", &restore_on_move);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ frame = xfce_framebox_new (_("Workspaces"), TRUE);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox1), frame, TRUE, FALSE, 0);
+
+ vbox = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox);
+ xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Switch workspaces using the mouse wheel over the desktop."),
+ "Xfwm/ScrollWorkspaces", &scroll_workspaces);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Remember and recall previous workspace when switching."),
+ "Xfwm/ToggleWorkspaces", &toggle_workspaces);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Wrap workspaces depending on the actual desktop layout."),
+ "Xfwm/WrapLayout", &wrap_layout);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Wrap workspaces when the first or last workspace is reached."),
+ "Xfwm/WrapCycle", &wrap_cycle);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ frame = xfce_framebox_new (_("Smart placement"), TRUE);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox1), frame, TRUE, FALSE, 0);
+
+ vbox = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox);
+ xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
+
+ range =
+ create_int_range (mcs_plugin, _("Size of windows for smart placement"), _("Small"), _("Large"),
+ "Xfwm/PlacementRatio", 0, 100, 5, &placement_ratio);
+ gtk_box_pack_start (GTK_BOX (vbox), range, TRUE, FALSE, 0);
+ gtk_widget_show (range);
+
+ label = gtk_label_new (_("Tweaks"));
+ gtk_widget_show (label);
+ gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0), label);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+
+ if (G_UNLIKELY (!composite))
+ {
+ composite = gdk_atom_intern ("COMPOSITING_MANAGER", FALSE);
+ }
+
+ if (gdk_selection_owner_get (composite))
+ {
+ vbox1 = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (notebook), vbox1);
+
+ frame = xfce_framebox_new (_("Compositing"), TRUE);
+ gtk_widget_show (frame);
+ gtk_box_pack_start (GTK_BOX (vbox1), frame, FALSE, FALSE, 0);
+
+ vbox = gtk_vbox_new (FALSE, BORDER);
+ gtk_widget_show (vbox);
+ xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Show shadow under regular windows."),
+ "Xfwm/ShowFrameShadow", &show_frame_shadow);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ check_button =
+ create_gboolean_button (mcs_plugin, _("Show shadow under popup windows."),
+ "Xfwm/ShowPopupShadow", &show_popup_shadow);
+ gtk_box_pack_start (GTK_BOX (vbox), check_button, TRUE, FALSE, 0);
+ gtk_widget_show (check_button);
+
+ range =
+ create_int_range (mcs_plugin, _("Opacity of windows during move"), _("Transparent"), _("Opaque"),
+ "Xfwm/MoveOpacity", 0, 100, 5, &move_opacity);
+ gtk_box_pack_start (GTK_BOX (vbox), range, TRUE, FALSE, 0);
+ gtk_widget_show (range);
+
+ range =
+ create_int_range (mcs_plugin, _("Opacity of windows during resize"), _("Transparent"), _("Opaque"),
+ "Xfwm/ResizeOpacity", 0, 100, 5, &resize_opacity);
+ gtk_box_pack_start (GTK_BOX (vbox), range, TRUE, FALSE, 0);
+ gtk_widget_show (range);
+
+ range =
+ create_int_range (mcs_plugin, _("Opacity popup windows"), _("Transparent"), _("Opaque"),
+ "Xfwm/PopupOpacity", 0, 100, 5, &popup_opacity);
+ gtk_box_pack_start (GTK_BOX (vbox), range, TRUE, FALSE, 0);
+ gtk_widget_show (range);
+
+ label = gtk_label_new (_("Compositor"));
+ gtk_widget_show (label);
+ gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1), label);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+ }
+
+ action_area = GTK_DIALOG (dialog->tweak_dialog)->action_area;
+ gtk_widget_show (action_area);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (action_area), GTK_BUTTONBOX_END);
+
+ button = gtk_button_new_from_stock ("gtk-close");
+ gtk_widget_show (button);
+ gtk_dialog_add_action_widget (GTK_DIALOG (dialog->tweak_dialog), button, GTK_RESPONSE_CLOSE);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+
+ gtk_widget_grab_focus (button);
+ gtk_widget_grab_default (button);
+ g_signal_connect (G_OBJECT (dialog->tweak_dialog), "response", G_CALLBACK (cb_dialog_response), dialog->mcs_plugin);
+
+ return dialog;
+}
+
+static void
+setup_dialog (Itf * itf)
+{
+ xfce_gtk_window_center_on_monitor_with_pointer (GTK_WINDOW (itf->tweak_dialog));
+ gtk_widget_show (itf->tweak_dialog);
+}
+
+McsPluginInitResult
+mcs_plugin_init (McsPlugin * mcs_plugin)
+{
+ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+ xfwm4_create_channel (mcs_plugin);
+ mcs_plugin->plugin_name = g_strdup (PLUGIN_NAME);
+ mcs_plugin->caption = g_strdup (_("Window Manager Tweak"));
+ mcs_plugin->run_dialog = run_dialog;
+ mcs_plugin->icon = xfce_themed_icon_load ("xfwm4", 48);
+ mcs_manager_notify (mcs_plugin->manager, CHANNEL);
+
+ return (MCS_PLUGIN_INIT_OK);
+}
+
+static void
+xfwm4_create_channel (McsPlugin * mcs_plugin)
+{
+ McsSetting *setting;
+ gchar *rcfile, *path;
+
+ path = g_build_filename ("xfce4", RCDIR, RCFILE, NULL);
+ rcfile = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, path);
+ g_free (path);
+
+ if (!rcfile)
+ rcfile = xfce_get_userfile (OLDRCDIR, RCFILE, NULL);
+
+ if (g_file_test (rcfile, G_FILE_TEST_EXISTS))
+ {
+ mcs_manager_add_channel_from_file (mcs_plugin->manager, CHANNEL, rcfile);
+ }
+ else
+ {
+ mcs_manager_add_channel (mcs_plugin->manager, CHANNEL);
+ }
+ g_free (rcfile);
+}
+
+static void
+run_dialog (McsPlugin * mcs_plugin)
+{
+ Itf *dialog;
+
+ if (is_running)
+ return;
+
+ xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+ is_running = TRUE;
+ dialog = create_dialog (mcs_plugin);
+ setup_dialog (dialog);
+}
+
+/* macro defined in manager-plugin.h */
+MCS_PLUGIN_CHECK_INIT
diff --git a/mcs-plugin/xfce-wmtweaks-settings.desktop.in b/mcs-plugin/xfce-wmtweaks-settings.desktop.in
new file mode 100644
index 000000000..b01495427
--- /dev/null
+++ b/mcs-plugin/xfce-wmtweaks-settings.desktop.in
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+_Name=Xfce 4 Window Manager Tweaks
+_Comment=Advanced Configuration
+Exec=xfce-setting-show wmtweaks
+Icon=xfwm4
+Terminal=false
+Type=Application
+Categories=X-XFCE;Settings;DesktopSettings;
+OnlyShowIn=XFCE;
+_GenericName=Window Manager Advanced Configuration
diff --git a/mcs-plugin/xfwm4_plugin.c b/mcs-plugin/xfwm4_plugin.c
index 3854ccbeb..4a4114f8a 100644
--- a/mcs-plugin/xfwm4_plugin.c
+++ b/mcs-plugin/xfwm4_plugin.c
@@ -1373,7 +1373,7 @@ cb_dialog_response (GtkWidget * dialog, gint response_id)
}
}
-Itf *
+static Itf *
create_dialog (McsPlugin * mcs_plugin)
{
Itf *dialog;
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ce7bd8f5b..e2f3bf7e2 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -2,6 +2,7 @@
mcs-plugin/margins.c
mcs-plugin/plugin.c
+mcs-plugin/wmtweak_plugin.c
mcs-plugin/workspaces.c
mcs-plugin/xfwm4_plugin.c
mcs-plugin/xfwm4_shortcuteditor.c
@@ -12,4 +13,5 @@ src/tabwin.c
# files added by intltool-prepare.
mcs-plugin/xfce-wm-settings.desktop.in
+mcs-plugin/xfce-wmtweaks-settings.desktop.in
mcs-plugin/xfce-workspaces-settings.desktop.in
diff --git a/src/settings.c b/src/settings.c
index 59b7b539a..6cc62ba64 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -43,7 +43,7 @@
#define CHANNEL2 "margins"
#define CHANNEL3 "workspaces"
#define CHANNEL4 "xfwm4_keys"
-#define CHANNEL5 "wm_tweaks"
+#define CHANNEL5 "wmtweaks"
#define DEFAULT_KEYTHEME "Default"
#define KEYTHEMERC "keythemerc"
@@ -395,6 +395,11 @@ notify_cb (const char *name, const char *channel_name, McsAction action, McsSett
screen_info->params->raise_with_any_button = setting->data.v_int;
check_for_grabs (screen_info);
}
+ else if (!strcmp (name, "Xfwm/RestoreOnMove"))
+ {
+ screen_info->params->restore_on_move = setting->data.v_int;
+ check_for_grabs (screen_info);
+ }
else if (!strcmp (name, "Xfwm/ScrollWorkspaces"))
{
screen_info->params->scroll_workspaces = setting->data.v_int;
@@ -739,6 +744,13 @@ loadMcsData (ScreenInfo *screen_info, Settings *rc)
check_for_grabs (screen_info);
mcs_setting_free (setting);
}
+ if (mcs_client_get_setting (screen_info->mcs_client, "Xfwm/RestoreOnMove", CHANNEL5,
+ &setting) == MCS_SUCCESS)
+ {
+ setBooleanValueFromInt ("restore_on_move", setting->data.v_int, rc);
+ check_for_grabs (screen_info);
+ mcs_setting_free (setting);
+ }
if (mcs_client_get_setting (screen_info->mcs_client, "Xfwm/ScrollWorkspaces", CHANNEL5,
&setting) == MCS_SUCCESS)
{