diff options
-rw-r--r-- | defaults/defaults | 2 | ||||
-rw-r--r-- | mcs-plugin/Makefile.am | 40 | ||||
-rw-r--r-- | mcs-plugin/wmtweak_plugin.c | 547 | ||||
-rw-r--r-- | mcs-plugin/xfce-wmtweaks-settings.desktop.in | 12 | ||||
-rw-r--r-- | mcs-plugin/xfwm4_plugin.c | 2 | ||||
-rw-r--r-- | po/POTFILES.in | 2 | ||||
-rw-r--r-- | src/settings.c | 14 |
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) { |