summaryrefslogtreecommitdiff
path: root/mate-panel
diff options
context:
space:
mode:
authorPerberos <[email protected]>2011-12-01 22:56:10 -0300
committerPerberos <[email protected]>2011-12-01 22:56:10 -0300
commitc51ef797a707f4e2c6f9688d4378f2b0e9898a66 (patch)
tree019ae92bb53c19b30077545cb14743cbd1b57aef /mate-panel
downloadmate-panel-c51ef797a707f4e2c6f9688d4378f2b0e9898a66.tar.bz2
mate-panel-c51ef797a707f4e2c6f9688d4378f2b0e9898a66.tar.xz
moving from https://github.com/perberos/mate-desktop-environment
Diffstat (limited to 'mate-panel')
-rw-r--r--mate-panel/Makefile.am290
-rw-r--r--mate-panel/Makefile.in2222
-rw-r--r--mate-panel/applet.c1449
-rw-r--r--mate-panel/applet.h119
-rw-r--r--mate-panel/button-widget.c902
-rw-r--r--mate-panel/button-widget.h60
-rw-r--r--mate-panel/drawer.c806
-rw-r--r--mate-panel/drawer.h52
-rw-r--r--mate-panel/launcher.c1114
-rw-r--r--mate-panel/launcher.h80
-rw-r--r--mate-panel/libegg/Makefile.am25
-rw-r--r--mate-panel/libegg/Makefile.in622
-rw-r--r--mate-panel/libegg/eggdesktopfile.c1510
-rw-r--r--mate-panel/libegg/eggdesktopfile.h164
-rw-r--r--mate-panel/libegg/eggsmclient-private.h57
-rw-r--r--mate-panel/libegg/eggsmclient-xsmp.c1370
-rw-r--r--mate-panel/libegg/eggsmclient.c604
-rw-r--r--mate-panel/libegg/eggsmclient.h121
-rw-r--r--mate-panel/libmate-panel-applet-private/Makefile.am34
-rw-r--r--mate-panel/libmate-panel-applet-private/Makefile.in644
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applet-container.c790
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applet-container.h118
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applet-frame-dbus.c468
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applet-frame-dbus.h65
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applet-mini.c5
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applets-manager-dbus.c604
-rw-r--r--mate-panel/libmate-panel-applet-private/mate-panel-applets-manager-dbus.h60
-rw-r--r--mate-panel/libpanel-util/Makefile.am39
-rw-r--r--mate-panel/libpanel-util/Makefile.in647
-rw-r--r--mate-panel/libpanel-util/panel-cleanup.c110
-rw-r--r--mate-panel/libpanel-util/panel-cleanup.h51
-rw-r--r--mate-panel/libpanel-util/panel-dbus-service.c307
-rw-r--r--mate-panel/libpanel-util/panel-dbus-service.h78
-rw-r--r--mate-panel/libpanel-util/panel-error.c96
-rw-r--r--mate-panel/libpanel-util/panel-error.h49
-rw-r--r--mate-panel/libpanel-util/panel-glib.c164
-rw-r--r--mate-panel/libpanel-util/panel-glib.h46
-rw-r--r--mate-panel/libpanel-util/panel-gtk.c83
-rw-r--r--mate-panel/libpanel-util/panel-gtk.h42
-rw-r--r--mate-panel/libpanel-util/panel-icon-chooser.c555
-rw-r--r--mate-panel/libpanel-util/panel-icon-chooser.h79
-rw-r--r--mate-panel/libpanel-util/panel-keyfile.c363
-rw-r--r--mate-panel/libpanel-util/panel-keyfile.h79
-rw-r--r--mate-panel/libpanel-util/panel-launch.c234
-rw-r--r--mate-panel/libpanel-util/panel-launch.h65
-rw-r--r--mate-panel/libpanel-util/panel-list.c212
-rw-r--r--mate-panel/libpanel-util/panel-list.h56
-rw-r--r--mate-panel/libpanel-util/panel-session-manager.c192
-rw-r--r--mate-panel/libpanel-util/panel-session-manager.h75
-rw-r--r--mate-panel/libpanel-util/panel-show.c283
-rw-r--r--mate-panel/libpanel-util/panel-show.h54
-rw-r--r--mate-panel/libpanel-util/panel-xdg.c152
-rw-r--r--mate-panel/libpanel-util/panel-xdg.h43
-rw-r--r--mate-panel/main.c153
-rw-r--r--mate-panel/mate-desktop-item-edit.c225
-rw-r--r--mate-panel/mate-panel-add.in325
-rw-r--r--mate-panel/mate-panel-applet-frame.c1002
-rw-r--r--mate-panel/mate-panel-applet-frame.h146
-rw-r--r--mate-panel/mate-panel-applet-info.c113
-rw-r--r--mate-panel/mate-panel-applet-info.h51
-rw-r--r--mate-panel/mate-panel-applets-manager.c201
-rw-r--r--mate-panel/mate-panel-applets-manager.h94
-rw-r--r--mate-panel/mate-panel.desktop.in.in19
-rw-r--r--mate-panel/mate-panelrc4
-rw-r--r--mate-panel/menu.c1914
-rw-r--r--mate-panel/menu.h80
-rw-r--r--mate-panel/nothing.cP1568
-rw-r--r--mate-panel/nothing.h22
-rw-r--r--mate-panel/panel-a11y.c135
-rw-r--r--mate-panel/panel-a11y.h43
-rw-r--r--mate-panel/panel-action-button.c907
-rw-r--r--mate-panel/panel-action-button.h103
-rw-r--r--mate-panel/panel-action-protocol.c158
-rw-r--r--mate-panel/panel-action-protocol.h40
-rw-r--r--mate-panel/panel-addto.c1428
-rw-r--r--mate-panel/panel-addto.h39
-rw-r--r--mate-panel/panel-background-monitor.c440
-rw-r--r--mate-panel/panel-background-monitor.h60
-rw-r--r--mate-panel/panel-background.c1156
-rw-r--r--mate-panel/panel-background.h133
-rw-r--r--mate-panel/panel-bindings.c303
-rw-r--r--mate-panel/panel-bindings.h42
-rw-r--r--mate-panel/panel-compatibility.c1167
-rw-r--r--mate-panel/panel-compatibility.h48
-rw-r--r--mate-panel/panel-compatibility.schemas546
-rw-r--r--mate-panel/panel-config-global.c153
-rw-r--r--mate-panel/panel-config-global.h47
-rw-r--r--mate-panel/panel-context-menu.c307
-rw-r--r--mate-panel/panel-context-menu.h33
-rw-r--r--mate-panel/panel-default-setup.entries657
-rw-r--r--mate-panel/panel-ditem-editor.c1804
-rw-r--r--mate-panel/panel-ditem-editor.h115
-rw-r--r--mate-panel/panel-enums.h110
-rw-r--r--mate-panel/panel-force-quit.c316
-rw-r--r--mate-panel/panel-force-quit.h41
-rw-r--r--mate-panel/panel-frame.c328
-rw-r--r--mate-panel/panel-frame.h69
-rw-r--r--mate-panel/panel-general.schemas.in127
-rw-r--r--mate-panel/panel-global.schemas.in276
-rw-r--r--mate-panel/panel-globals.h41
-rw-r--r--mate-panel/panel-icon-names.h40
-rw-r--r--mate-panel/panel-lockdown.c442
-rw-r--r--mate-panel/panel-lockdown.h55
-rw-r--r--mate-panel/panel-marshal.list3
-rw-r--r--mate-panel/panel-mateconf.c351
-rw-r--r--mate-panel/panel-mateconf.h76
-rw-r--r--mate-panel/panel-menu-bar.c474
-rw-r--r--mate-panel/panel-menu-bar.h83
-rw-r--r--mate-panel/panel-menu-button.c1194
-rw-r--r--mate-panel/panel-menu-button.h98
-rw-r--r--mate-panel/panel-menu-items.c1618
-rw-r--r--mate-panel/panel-menu-items.h99
-rw-r--r--mate-panel/panel-modules.c86
-rw-r--r--mate-panel/panel-modules.h30
-rw-r--r--mate-panel/panel-multiscreen.c784
-rw-r--r--mate-panel/panel-multiscreen.h58
-rw-r--r--mate-panel/panel-object.schemas.in247
-rw-r--r--mate-panel/panel-profile.c2647
-rw-r--r--mate-panel/panel-profile.h188
-rw-r--r--mate-panel/panel-properties-dialog.c999
-rw-r--r--mate-panel/panel-properties-dialog.h40
-rw-r--r--mate-panel/panel-properties-dialog.ui769
-rw-r--r--mate-panel/panel-recent.c243
-rw-r--r--mate-panel/panel-recent.h41
-rw-r--r--mate-panel/panel-reset.c46
-rw-r--r--mate-panel/panel-reset.h37
-rw-r--r--mate-panel/panel-run-dialog.c2041
-rw-r--r--mate-panel/panel-run-dialog.h41
-rw-r--r--mate-panel/panel-run-dialog.ui270
-rw-r--r--mate-panel/panel-separator.c250
-rw-r--r--mate-panel/panel-separator.h71
-rw-r--r--mate-panel/panel-session.c80
-rw-r--r--mate-panel/panel-session.h39
-rw-r--r--mate-panel/panel-shell.c164
-rw-r--r--mate-panel/panel-shell.h37
-rw-r--r--mate-panel/panel-stock-icons.c141
-rw-r--r--mate-panel/panel-stock-icons.h60
-rw-r--r--mate-panel/panel-struts.c516
-rw-r--r--mate-panel/panel-struts.h56
-rw-r--r--mate-panel/panel-test-applets.c388
-rw-r--r--mate-panel/panel-test-applets.ui203
-rw-r--r--mate-panel/panel-toplevel.c5298
-rw-r--r--mate-panel/panel-toplevel.h179
-rw-r--r--mate-panel/panel-toplevel.schemas.in434
-rw-r--r--mate-panel/panel-types.h19
-rw-r--r--mate-panel/panel-util.c1210
-rw-r--r--mate-panel/panel-util.h72
-rw-r--r--mate-panel/panel-widget.c3010
-rw-r--r--mate-panel/panel-widget.h242
-rw-r--r--mate-panel/panel-xutils.c258
-rw-r--r--mate-panel/panel-xutils.h64
-rw-r--r--mate-panel/panel.c1403
-rw-r--r--mate-panel/panel.h57
-rw-r--r--mate-panel/xstuff.c736
-rw-r--r--mate-panel/xstuff.h39
155 files changed, 63724 insertions, 0 deletions
diff --git a/mate-panel/Makefile.am b/mate-panel/Makefile.am
new file mode 100644
index 00000000..e72925ad
--- /dev/null
+++ b/mate-panel/Makefile.am
@@ -0,0 +1,290 @@
+SUBDIRS = libegg libmate-panel-applet-private libpanel-util
+
+bin_PROGRAMS = \
+ mate-panel \
+ mate-desktop-item-edit \
+ mate-panel-test-applets
+libexec_SCRIPTS = mate-panel-add
+
+AM_CPPFLAGS = \
+ $(PANEL_CFLAGS) \
+ -I. \
+ -I$(srcdir) \
+ -I$(top_builddir)/mate-panel \
+ -I$(top_builddir)/mate-panel/libpanel-util \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DBUILDERDIR=\""$(uidir)"\" \
+ -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+panel_sources = \
+ panel-typebuiltins.c \
+ panel-typebuiltins.h \
+ panel-marshal.c \
+ panel-marshal.h \
+ main.c \
+ panel-widget.c \
+ button-widget.c \
+ xstuff.c \
+ panel-session.c \
+ panel-compatibility.c \
+ panel.c \
+ applet.c \
+ drawer.c \
+ panel-config-global.c \
+ panel-util.c \
+ panel-mateconf.c \
+ panel-properties-dialog.c \
+ panel-run-dialog.c \
+ menu.c \
+ panel-context-menu.c \
+ launcher.c \
+ mate-panel-applet-frame.c \
+ mate-panel-applets-manager.c \
+ panel-shell.c \
+ panel-background.c \
+ panel-background-monitor.c \
+ panel-stock-icons.c \
+ panel-action-button.c \
+ panel-menu-bar.c \
+ panel-menu-button.c \
+ panel-menu-items.c \
+ panel-separator.c \
+ panel-recent.c \
+ panel-action-protocol.c \
+ panel-toplevel.c \
+ panel-struts.c \
+ panel-frame.c \
+ panel-xutils.c \
+ panel-multiscreen.c \
+ panel-a11y.c \
+ panel-bindings.c \
+ panel-profile.c \
+ panel-force-quit.c \
+ panel-lockdown.c \
+ panel-addto.c \
+ panel-ditem-editor.c \
+ panel-modules.c \
+ mate-panel-applet-info.c \
+ panel-reset.c
+
+panel_headers = \
+ panel-types.h \
+ panel-widget.h \
+ panel-globals.h \
+ button-widget.h \
+ xstuff.h \
+ panel-session.h \
+ panel-compatibility.h \
+ panel.h \
+ applet.h \
+ drawer.h \
+ panel-util.h \
+ panel-properties-dialog.h \
+ panel-config-global.h \
+ panel-mateconf.h \
+ panel-run-dialog.h \
+ menu.h \
+ panel-context-menu.h \
+ launcher.h \
+ mate-panel-applet-frame.h \
+ mate-panel-applets-manager.h \
+ panel-shell.h \
+ panel-background.h \
+ panel-background-monitor.h \
+ panel-stock-icons.h \
+ panel-action-button.h \
+ panel-menu-bar.h \
+ panel-menu-button.h \
+ panel-menu-items.h \
+ panel-separator.h \
+ panel-recent.h \
+ panel-action-protocol.h \
+ panel-toplevel.h \
+ panel-struts.h \
+ panel-frame.h \
+ panel-xutils.h \
+ panel-multiscreen.h \
+ panel-a11y.h \
+ panel-bindings.h \
+ panel-profile.h \
+ panel-enums.h \
+ panel-force-quit.h \
+ panel-lockdown.h \
+ panel-addto.h \
+ panel-ditem-editor.h \
+ panel-icon-names.h \
+ panel-modules.h \
+ mate-panel-applet-info.h \
+ panel-reset.h
+
+mate_panel_SOURCES = \
+ $(panel_sources) \
+ $(panel_headers)
+
+mate_panel_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(XRANDR_CFLAGS) \
+ -DPANEL_MODULES_DIR=\"$(modulesdir)\" \
+ -DMATEMENU_I_KNOW_THIS_IS_UNSTABLE
+
+mate_panel_LDADD = \
+ $(top_builddir)/mate-panel/libegg/libegg.la \
+ $(top_builddir)/mate-panel/libmate-panel-applet-private/libmate-panel-applet-private.la \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(PANEL_LIBS) \
+ $(XRANDR_LIBS) \
+ $(X_LIBS)
+
+mate_panel_LDFLAGS = -export-dynamic
+
+mate_desktop_item_edit_SOURCES = \
+ mate-desktop-item-edit.c \
+ panel-ditem-editor.c \
+ panel-marshal.c \
+ panel-util.c \
+ xstuff.c
+
+mate_desktop_item_edit_LDADD = \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(PANEL_LIBS)
+
+mate_panel_test_applets_SOURCES = \
+ panel-modules.c \
+ mate-panel-applet-info.c \
+ mate-panel-applets-manager.c \
+ panel-marshal.c \
+ panel-test-applets.c
+
+mate_panel_test_applets_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DPANEL_MODULES_DIR=\"$(modulesdir)\" \
+ -DMATE_PANEL_APPLETS_DIR=\"$(appletsdir)\"
+
+mate_panel_test_applets_LDADD = \
+ $(top_builddir)/mate-panel/libmate-panel-applet-private/libmate-panel-applet-private-mini.la \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(PANEL_LIBS)
+
+mate_panel_test_applets_LDFLAGS = -export-dynamic
+
+mate-panel-add: mate-panel-add.in Makefile
+ $(AM_V_GEN)sed \
+ -e s!\@PYTHON\@[email protected]@! \
+ -e s!\@MATE_PANEL_APPLETS_DIR\@!$(appletsdir)! \
+ $(AM_V_at)chmod a+x [email protected]
+
+panel_enum_headers = \
+ $(top_srcdir)/mate-panel/panel-enums.h \
+ $(top_srcdir)/mate-panel/panel-types.h
+
+panel-marshal.h: panel-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) $< --header --prefix=panel_marshal > [email protected]
+
+panel-marshal.c: panel-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)echo "#include \"panel-marshal.h\"" > [email protected] && \
+ $(GLIB_GENMARSHAL) $< --body --prefix=panel_marshal >> [email protected]
+
+panel-typebuiltins.c: @[email protected] $(panel_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"panel-typebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@[email protected]\" */" \
+ --fprod "\n#include \"@[email protected]\"\n" \
+ --vhead "static const GEnumValue [email protected][email protected]_values[] = {" \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\[email protected][email protected]_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_enum_register_static (\"@[email protected]\", [email protected][email protected]_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(panel_enum_headers) > [email protected]
+
+panel-typebuiltins.h: @[email protected] $(panel_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#ifndef __PANEL_TYPEBUILTINS_H__\n" \
+ --fhead "#define __PANEL_TYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \
+ --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \
+ --ftail "#endif /* __PANEL_TYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @[email protected] --- */" \
+ --eprod "#define [email protected]@ @[email protected]_get_type()\n" \
+ --eprod "GType @[email protected]_get_type (void);\n" \
+ $(panel_enum_headers) > [email protected]
+
+BUILT_SOURCES = \
+ panel-typebuiltins.c \
+ panel-typebuiltins.h \
+ panel-marshal.c \
+ panel-marshal.h
+
+rcdir = $(datadir)
+rc_DATA = mate-panelrc
+
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = \
+ panel-properties-dialog.ui \
+ panel-run-dialog.ui \
+ panel-test-applets.ui
+
+desktopdir = $(datadir)/applications
+desktop_in_files = mate-panel.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+
+
+entriesdir = $(MATECONF_SCHEMA_FILE_DIR)
+entries_DATA = panel-default-setup.entries
+
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = \
+ panel-global.schemas.in \
+ panel-general.schemas.in \
+ panel-toplevel.schemas.in \
+ panel-object.schemas.in
+schemas_DATA = panel-compatibility.schemas $(schemas_in_files:.schemas.in=.schemas)
+
+
+if MATECONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/mate-panel/$$p ; \
+ done ; \
+ $(MATECONFTOOL) --direct --config-source=$(MATECONF_SCHEMA_CONFIG_SOURCE) --load $(srcdir)/panel-default-setup.entries ; \
+ $(MATECONFTOOL) --direct --config-source=$(MATECONF_SCHEMA_CONFIG_SOURCE) --load $(srcdir)/panel-default-setup.entries /apps/panel ; \
+ fi
+uninstall-local:
+ for p in $(schema_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/ngome-panel/$$p ; \
+ done
+endif
+
+EXTRA_DIST = \
+ $(ui_DATA) \
+ nothing.cP \
+ nothing.h \
+ $(schemas_in_files) \
+ panel-compatibility.schemas \
+ panel-marshal.list \
+ mate-panelrc \
+ $(entries_DATA) \
+ $(desktop_in_files) \
+ mate-panel-add.in
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(schemas_in_files:.schemas.in=.schemas) \
+ $(sys_DATA) \
+ $(desktop_DATA) \
+ mate-panel-add
+
+dist-hook:
+ cd $(distdir) ; rm -f $(CLEANFILES)
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-panel/Makefile.in b/mate-panel/Makefile.in
new file mode 100644
index 00000000..1226b501
--- /dev/null
+++ b/mate-panel/Makefile.in
@@ -0,0 +1,2222 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @[email protected]
+host_triplet = @[email protected]
+bin_PROGRAMS = mate-panel$(EXEEXT) mate-desktop-item-edit$(EXEEXT) \
+ mate-panel-test-applets$(EXEEXT)
+subdir = mate-panel
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/mate-panel.desktop.in.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = mate-panel.desktop.in
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" \
+ "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(entriesdir)" \
+ "$(DESTDIR)$(rcdir)" "$(DESTDIR)$(schemasdir)" \
+ "$(DESTDIR)$(uidir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_mate_desktop_item_edit_OBJECTS = mate-desktop-item-edit.$(OBJEXT) \
+ panel-ditem-editor.$(OBJEXT) panel-marshal.$(OBJEXT) \
+ panel-util.$(OBJEXT) xstuff.$(OBJEXT)
+mate_desktop_item_edit_OBJECTS = $(am_mate_desktop_item_edit_OBJECTS)
+am__DEPENDENCIES_1 =
+mate_desktop_item_edit_DEPENDENCIES = \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__objects_1 = mate_panel-panel-typebuiltins.$(OBJEXT) \
+ mate_panel-panel-marshal.$(OBJEXT) mate_panel-main.$(OBJEXT) \
+ mate_panel-panel-widget.$(OBJEXT) \
+ mate_panel-button-widget.$(OBJEXT) mate_panel-xstuff.$(OBJEXT) \
+ mate_panel-panel-session.$(OBJEXT) \
+ mate_panel-panel-compatibility.$(OBJEXT) \
+ mate_panel-panel.$(OBJEXT) mate_panel-applet.$(OBJEXT) \
+ mate_panel-drawer.$(OBJEXT) \
+ mate_panel-panel-config-global.$(OBJEXT) \
+ mate_panel-panel-util.$(OBJEXT) \
+ mate_panel-panel-mateconf.$(OBJEXT) \
+ mate_panel-panel-properties-dialog.$(OBJEXT) \
+ mate_panel-panel-run-dialog.$(OBJEXT) \
+ mate_panel-menu.$(OBJEXT) \
+ mate_panel-panel-context-menu.$(OBJEXT) \
+ mate_panel-launcher.$(OBJEXT) \
+ mate_panel-mate-panel-applet-frame.$(OBJEXT) \
+ mate_panel-mate-panel-applets-manager.$(OBJEXT) \
+ mate_panel-panel-shell.$(OBJEXT) \
+ mate_panel-panel-background.$(OBJEXT) \
+ mate_panel-panel-background-monitor.$(OBJEXT) \
+ mate_panel-panel-stock-icons.$(OBJEXT) \
+ mate_panel-panel-action-button.$(OBJEXT) \
+ mate_panel-panel-menu-bar.$(OBJEXT) \
+ mate_panel-panel-menu-button.$(OBJEXT) \
+ mate_panel-panel-menu-items.$(OBJEXT) \
+ mate_panel-panel-separator.$(OBJEXT) \
+ mate_panel-panel-recent.$(OBJEXT) \
+ mate_panel-panel-action-protocol.$(OBJEXT) \
+ mate_panel-panel-toplevel.$(OBJEXT) \
+ mate_panel-panel-struts.$(OBJEXT) \
+ mate_panel-panel-frame.$(OBJEXT) \
+ mate_panel-panel-xutils.$(OBJEXT) \
+ mate_panel-panel-multiscreen.$(OBJEXT) \
+ mate_panel-panel-a11y.$(OBJEXT) \
+ mate_panel-panel-bindings.$(OBJEXT) \
+ mate_panel-panel-profile.$(OBJEXT) \
+ mate_panel-panel-force-quit.$(OBJEXT) \
+ mate_panel-panel-lockdown.$(OBJEXT) \
+ mate_panel-panel-addto.$(OBJEXT) \
+ mate_panel-panel-ditem-editor.$(OBJEXT) \
+ mate_panel-panel-modules.$(OBJEXT) \
+ mate_panel-mate-panel-applet-info.$(OBJEXT) \
+ mate_panel-panel-reset.$(OBJEXT)
+am__objects_2 =
+am_mate_panel_OBJECTS = $(am__objects_1) $(am__objects_2)
+mate_panel_OBJECTS = $(am_mate_panel_OBJECTS)
+mate_panel_DEPENDENCIES = $(top_builddir)/mate-panel/libegg/libegg.la \
+ $(top_builddir)/mate-panel/libmate-panel-applet-private/libmate-panel-applet-private.la \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+mate_panel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(mate_panel_LDFLAGS) $(LDFLAGS) -o [email protected]
+am_mate_panel_test_applets_OBJECTS = \
+ mate_panel_test_applets-panel-modules.$(OBJEXT) \
+ mate_panel_test_applets-mate-panel-applet-info.$(OBJEXT) \
+ mate_panel_test_applets-mate-panel-applets-manager.$(OBJEXT) \
+ mate_panel_test_applets-panel-marshal.$(OBJEXT) \
+ mate_panel_test_applets-panel-test-applets.$(OBJEXT)
+mate_panel_test_applets_OBJECTS = \
+ $(am_mate_panel_test_applets_OBJECTS)
+mate_panel_test_applets_DEPENDENCIES = $(top_builddir)/mate-panel/libmate-panel-applet-private/libmate-panel-applet-private-mini.la \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(am__DEPENDENCIES_1)
+mate_panel_test_applets_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(mate_panel_test_applets_LDFLAGS) \
+ $(LDFLAGS) -o [email protected]
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+SCRIPTS = $(libexec_SCRIPTS)
+DEFAULT_INCLUDES = [email protected][email protected] -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " [email protected];
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o [email protected]
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " [email protected];
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " [email protected];
+SOURCES = $(mate_desktop_item_edit_SOURCES) $(mate_panel_SOURCES) \
+ $(mate_panel_test_applets_SOURCES)
+DIST_SOURCES = $(mate_desktop_item_edit_SOURCES) $(mate_panel_SOURCES) \
+ $(mate_panel_test_applets_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+DATA = $(desktop_DATA) $(entries_DATA) $(rc_DATA) $(schemas_DATA) \
+ $(ui_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CLOCK_CFLAGS = @[email protected]
+CLOCK_EDS_ICONDIR = @[email protected]
+CLOCK_LIBS = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISABLE_DEPRECATED_CFLAGS = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EGG_SMCLIENT_CFLAGS = @[email protected]
+EGG_SMCLIENT_LIBS = @[email protected]
+FISH_CFLAGS = @[email protected]
+FISH_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GIO_QUERYMODULES = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+INTROSPECTION_CFLAGS = @[email protected]
+INTROSPECTION_COMPILER = @[email protected]
+INTROSPECTION_GENERATE = @[email protected]
+INTROSPECTION_GIRDIR = @[email protected]
+INTROSPECTION_LIBS = @[email protected]
+INTROSPECTION_MAKEFILE = @[email protected]
+INTROSPECTION_SCANNER = @[email protected]
+INTROSPECTION_TYPELIBDIR = @[email protected]
+LDFLAGS = @[email protected]
+LIBMATE_PANEL_APPLET_CFLAGS = @[email protected]
+LIBMATE_PANEL_APPLET_LIBS = @[email protected]
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @[email protected]
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIB_MATE_PANEL_APPLET_LT_VERSION = @[email protected]
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECOMPONENT_ACT_IDLDIR = @[email protected]
+MATECOMPONENT_CFLAGS = @[email protected]
+MATECOMPONENT_IDLDIR = @[email protected]
+MATECOMPONENT_LIBS = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MATECORBA_IDL = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NETWORK_MANAGER_CFLAGS = @[email protected]
+NETWORK_MANAGER_LIBS = @[email protected]
+NOTIFICATION_AREA_CFLAGS = @[email protected]
+NOTIFICATION_AREA_LIBS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PANEL_CFLAGS = @[email protected]
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @[email protected]
+PANEL_LIBS = @[email protected]
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @[email protected]
+PANEL_MODULE_MATECOMPONENT_LIBS = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+REBUILD = @[email protected]
+SET_MAKE = @[email protected]
+TZ_CFLAGS = @[email protected]
+TZ_LIBS = @[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+WNCKLET_CFLAGS = @[email protected]
+WNCKLET_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+XRANDR_CFLAGS = @[email protected]
+XRANDR_LIBS = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+appletsdir = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+modulesdir = @m[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+SUBDIRS = libegg libmate-panel-applet-private libpanel-util
+libexec_SCRIPTS = mate-panel-add
+AM_CPPFLAGS = \
+ $(PANEL_CFLAGS) \
+ -I. \
+ -I$(srcdir) \
+ -I$(top_builddir)/mate-panel \
+ -I$(top_builddir)/mate-panel/libpanel-util \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DBUILDERDIR=\""$(uidir)"\" \
+ -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+panel_sources = \
+ panel-typebuiltins.c \
+ panel-typebuiltins.h \
+ panel-marshal.c \
+ panel-marshal.h \
+ main.c \
+ panel-widget.c \
+ button-widget.c \
+ xstuff.c \
+ panel-session.c \
+ panel-compatibility.c \
+ panel.c \
+ applet.c \
+ drawer.c \
+ panel-config-global.c \
+ panel-util.c \
+ panel-mateconf.c \
+ panel-properties-dialog.c \
+ panel-run-dialog.c \
+ menu.c \
+ panel-context-menu.c \
+ launcher.c \
+ mate-panel-applet-frame.c \
+ mate-panel-applets-manager.c \
+ panel-shell.c \
+ panel-background.c \
+ panel-background-monitor.c \
+ panel-stock-icons.c \
+ panel-action-button.c \
+ panel-menu-bar.c \
+ panel-menu-button.c \
+ panel-menu-items.c \
+ panel-separator.c \
+ panel-recent.c \
+ panel-action-protocol.c \
+ panel-toplevel.c \
+ panel-struts.c \
+ panel-frame.c \
+ panel-xutils.c \
+ panel-multiscreen.c \
+ panel-a11y.c \
+ panel-bindings.c \
+ panel-profile.c \
+ panel-force-quit.c \
+ panel-lockdown.c \
+ panel-addto.c \
+ panel-ditem-editor.c \
+ panel-modules.c \
+ mate-panel-applet-info.c \
+ panel-reset.c
+
+panel_headers = \
+ panel-types.h \
+ panel-widget.h \
+ panel-globals.h \
+ button-widget.h \
+ xstuff.h \
+ panel-session.h \
+ panel-compatibility.h \
+ panel.h \
+ applet.h \
+ drawer.h \
+ panel-util.h \
+ panel-properties-dialog.h \
+ panel-config-global.h \
+ panel-mateconf.h \
+ panel-run-dialog.h \
+ menu.h \
+ panel-context-menu.h \
+ launcher.h \
+ mate-panel-applet-frame.h \
+ mate-panel-applets-manager.h \
+ panel-shell.h \
+ panel-background.h \
+ panel-background-monitor.h \
+ panel-stock-icons.h \
+ panel-action-button.h \
+ panel-menu-bar.h \
+ panel-menu-button.h \
+ panel-menu-items.h \
+ panel-separator.h \
+ panel-recent.h \
+ panel-action-protocol.h \
+ panel-toplevel.h \
+ panel-struts.h \
+ panel-frame.h \
+ panel-xutils.h \
+ panel-multiscreen.h \
+ panel-a11y.h \
+ panel-bindings.h \
+ panel-profile.h \
+ panel-enums.h \
+ panel-force-quit.h \
+ panel-lockdown.h \
+ panel-addto.h \
+ panel-ditem-editor.h \
+ panel-icon-names.h \
+ panel-modules.h \
+ mate-panel-applet-info.h \
+ panel-reset.h
+
+mate_panel_SOURCES = \
+ $(panel_sources) \
+ $(panel_headers)
+
+mate_panel_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(XRANDR_CFLAGS) \
+ -DPANEL_MODULES_DIR=\"$(modulesdir)\" \
+ -DMATEMENU_I_KNOW_THIS_IS_UNSTABLE
+
+mate_panel_LDADD = \
+ $(top_builddir)/mate-panel/libegg/libegg.la \
+ $(top_builddir)/mate-panel/libmate-panel-applet-private/libmate-panel-applet-private.la \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(PANEL_LIBS) \
+ $(XRANDR_LIBS) \
+ $(X_LIBS)
+
+mate_panel_LDFLAGS = -export-dynamic
+mate_desktop_item_edit_SOURCES = \
+ mate-desktop-item-edit.c \
+ panel-ditem-editor.c \
+ panel-marshal.c \
+ panel-util.c \
+ xstuff.c
+
+mate_desktop_item_edit_LDADD = \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(PANEL_LIBS)
+
+mate_panel_test_applets_SOURCES = \
+ panel-modules.c \
+ mate-panel-applet-info.c \
+ mate-panel-applets-manager.c \
+ panel-marshal.c \
+ panel-test-applets.c
+
+mate_panel_test_applets_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ -DPANEL_MODULES_DIR=\"$(modulesdir)\" \
+ -DMATE_PANEL_APPLETS_DIR=\"$(appletsdir)\"
+
+mate_panel_test_applets_LDADD = \
+ $(top_builddir)/mate-panel/libmate-panel-applet-private/libmate-panel-applet-private-mini.la \
+ $(top_builddir)/mate-panel/libpanel-util/libpanel-util.la \
+ $(PANEL_LIBS)
+
+mate_panel_test_applets_LDFLAGS = -export-dynamic
+panel_enum_headers = \
+ $(top_srcdir)/mate-panel/panel-enums.h \
+ $(top_srcdir)/mate-panel/panel-types.h
+
+BUILT_SOURCES = \
+ panel-typebuiltins.c \
+ panel-typebuiltins.h \
+ panel-marshal.c \
+ panel-marshal.h
+
+rcdir = $(datadir)
+rc_DATA = mate-panelrc
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = \
+ panel-properties-dialog.ui \
+ panel-run-dialog.ui \
+ panel-test-applets.ui
+
+desktopdir = $(datadir)/applications
+desktop_in_files = mate-panel.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+entriesdir = $(MATECONF_SCHEMA_FILE_DIR)
+entries_DATA = panel-default-setup.entries
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = \
+ panel-global.schemas.in \
+ panel-general.schemas.in \
+ panel-toplevel.schemas.in \
+ panel-object.schemas.in
+
+schemas_DATA = panel-compatibility.schemas $(schemas_in_files:.schemas.in=.schemas)
+EXTRA_DIST = \
+ $(ui_DATA) \
+ nothing.cP \
+ nothing.h \
+ $(schemas_in_files) \
+ panel-compatibility.schemas \
+ panel-marshal.list \
+ mate-panelrc \
+ $(entries_DATA) \
+ $(desktop_in_files) \
+ mate-panel-add.in
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(schemas_in_files:.schemas.in=.schemas) \
+ $(sys_DATA) \
+ $(desktop_DATA) \
+ mate-panel-add
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @[email protected] $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f [email protected]; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mate-panel/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu mate-panel/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+mate-panel.desktop.in: $(top_builddir)/config.status $(srcdir)/mate-panel.desktop.in.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected]
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+mate-desktop-item-edit$(EXEEXT): $(mate_desktop_item_edit_OBJECTS) $(mate_desktop_item_edit_DEPENDENCIES)
+ @rm -f mate-desktop-item-edit$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mate_desktop_item_edit_OBJECTS) $(mate_desktop_item_edit_LDADD) $(LIBS)
+mate-panel$(EXEEXT): $(mate_panel_OBJECTS) $(mate_panel_DEPENDENCIES)
+ @rm -f mate-panel$(EXEEXT)
+ $(AM_V_CCLD)$(mate_panel_LINK) $(mate_panel_OBJECTS) $(mate_panel_LDADD) $(LIBS)
+mate-panel-test-applets$(EXEEXT): $(mate_panel_test_applets_OBJECTS) $(mate_panel_test_applets_DEPENDENCIES)
+ @rm -f mate-panel-test-applets$(EXEEXT)
+ $(AM_V_CCLD)$(mate_panel_test_applets_LINK) $(mate_panel_test_applets_OBJECTS) $(mate_panel_test_applets_LDADD) $(LIBS)
+install-libexecSCRIPTS: $(libexec_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
+ @list='$(libexec_SCRIPTS)'; test -n "$(libexecdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-libexecSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libexec_SCRIPTS)'; test -n "$(libexecdir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+
+.c.o:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+
+.c.obj:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] `$(CYGPATH_W) '$<'`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
[email protected][email protected] $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
[email protected][email protected] $(AM_V_CC)$(LTCOMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+
+mate_panel-panel-typebuiltins.o: panel-typebuiltins.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-typebuiltins.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-typebuiltins.Tpo -c -o mate_panel-panel-typebuiltins.o `test -f 'panel-typebuiltins.c' || echo '$(srcdir)/'`panel-typebuiltins.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-typebuiltins.Tpo $(DEPDIR)/mate_panel-panel-typebuiltins.Po
[email protected][email protected]@[email protected] source='panel-typebuiltins.c' object='mate_panel-panel-typebuiltins.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-typebuiltins.o `test -f 'panel-typebuiltins.c' || echo '$(srcdir)/'`panel-typebuiltins.c
+
+mate_panel-panel-typebuiltins.obj: panel-typebuiltins.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-typebuiltins.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-typebuiltins.Tpo -c -o mate_panel-panel-typebuiltins.obj `if test -f 'panel-typebuiltins.c'; then $(CYGPATH_W) 'panel-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/panel-typebuiltins.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-typebuiltins.Tpo $(DEPDIR)/mate_panel-panel-typebuiltins.Po
[email protected][email protected]@[email protected] source='panel-typebuiltins.c' object='mate_panel-panel-typebuiltins.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-typebuiltins.obj `if test -f 'panel-typebuiltins.c'; then $(CYGPATH_W) 'panel-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/panel-typebuiltins.c'; fi`
+
+mate_panel-panel-marshal.o: panel-marshal.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-marshal.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-marshal.Tpo -c -o mate_panel-panel-marshal.o `test -f 'panel-marshal.c' || echo '$(srcdir)/'`panel-marshal.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-marshal.Tpo $(DEPDIR)/mate_panel-panel-marshal.Po
[email protected][email protected]@[email protected] source='panel-marshal.c' object='mate_panel-panel-marshal.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-marshal.o `test -f 'panel-marshal.c' || echo '$(srcdir)/'`panel-marshal.c
+
+mate_panel-panel-marshal.obj: panel-marshal.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-marshal.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-marshal.Tpo -c -o mate_panel-panel-marshal.obj `if test -f 'panel-marshal.c'; then $(CYGPATH_W) 'panel-marshal.c'; else $(CYGPATH_W) '$(srcdir)/panel-marshal.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-marshal.Tpo $(DEPDIR)/mate_panel-panel-marshal.Po
[email protected][email protected]@[email protected] source='panel-marshal.c' object='mate_panel-panel-marshal.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-marshal.obj `if test -f 'panel-marshal.c'; then $(CYGPATH_W) 'panel-marshal.c'; else $(CYGPATH_W) '$(srcdir)/panel-marshal.c'; fi`
+
+mate_panel-main.o: main.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-main.o -MD -MP -MF $(DEPDIR)/mate_panel-main.Tpo -c -o mate_panel-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-main.Tpo $(DEPDIR)/mate_panel-main.Po
[email protected][email protected]@[email protected] source='main.c' object='mate_panel-main.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
+
+mate_panel-main.obj: main.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-main.obj -MD -MP -MF $(DEPDIR)/mate_panel-main.Tpo -c -o mate_panel-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-main.Tpo $(DEPDIR)/mate_panel-main.Po
[email protected][email protected]@[email protected] source='main.c' object='mate_panel-main.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
+
+mate_panel-panel-widget.o: panel-widget.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-widget.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-widget.Tpo -c -o mate_panel-panel-widget.o `test -f 'panel-widget.c' || echo '$(srcdir)/'`panel-widget.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-widget.Tpo $(DEPDIR)/mate_panel-panel-widget.Po
[email protected][email protected]@[email protected] source='panel-widget.c' object='mate_panel-panel-widget.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-widget.o `test -f 'panel-widget.c' || echo '$(srcdir)/'`panel-widget.c
+
+mate_panel-panel-widget.obj: panel-widget.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-widget.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-widget.Tpo -c -o mate_panel-panel-widget.obj `if test -f 'panel-widget.c'; then $(CYGPATH_W) 'panel-widget.c'; else $(CYGPATH_W) '$(srcdir)/panel-widget.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-widget.Tpo $(DEPDIR)/mate_panel-panel-widget.Po
[email protected][email protected]@[email protected] source='panel-widget.c' object='mate_panel-panel-widget.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-widget.obj `if test -f 'panel-widget.c'; then $(CYGPATH_W) 'panel-widget.c'; else $(CYGPATH_W) '$(srcdir)/panel-widget.c'; fi`
+
+mate_panel-button-widget.o: button-widget.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-button-widget.o -MD -MP -MF $(DEPDIR)/mate_panel-button-widget.Tpo -c -o mate_panel-button-widget.o `test -f 'button-widget.c' || echo '$(srcdir)/'`button-widget.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-button-widget.Tpo $(DEPDIR)/mate_panel-button-widget.Po
[email protected][email protected]@[email protected] source='button-widget.c' object='mate_panel-button-widget.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-button-widget.o `test -f 'button-widget.c' || echo '$(srcdir)/'`button-widget.c
+
+mate_panel-button-widget.obj: button-widget.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-button-widget.obj -MD -MP -MF $(DEPDIR)/mate_panel-button-widget.Tpo -c -o mate_panel-button-widget.obj `if test -f 'button-widget.c'; then $(CYGPATH_W) 'button-widget.c'; else $(CYGPATH_W) '$(srcdir)/button-widget.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-button-widget.Tpo $(DEPDIR)/mate_panel-button-widget.Po
[email protected][email protected]@[email protected] source='button-widget.c' object='mate_panel-button-widget.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-button-widget.obj `if test -f 'button-widget.c'; then $(CYGPATH_W) 'button-widget.c'; else $(CYGPATH_W) '$(srcdir)/button-widget.c'; fi`
+
+mate_panel-xstuff.o: xstuff.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-xstuff.o -MD -MP -MF $(DEPDIR)/mate_panel-xstuff.Tpo -c -o mate_panel-xstuff.o `test -f 'xstuff.c' || echo '$(srcdir)/'`xstuff.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-xstuff.Tpo $(DEPDIR)/mate_panel-xstuff.Po
[email protected][email protected]@[email protected] source='xstuff.c' object='mate_panel-xstuff.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-xstuff.o `test -f 'xstuff.c' || echo '$(srcdir)/'`xstuff.c
+
+mate_panel-xstuff.obj: xstuff.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-xstuff.obj -MD -MP -MF $(DEPDIR)/mate_panel-xstuff.Tpo -c -o mate_panel-xstuff.obj `if test -f 'xstuff.c'; then $(CYGPATH_W) 'xstuff.c'; else $(CYGPATH_W) '$(srcdir)/xstuff.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-xstuff.Tpo $(DEPDIR)/mate_panel-xstuff.Po
[email protected][email protected]@[email protected] source='xstuff.c' object='mate_panel-xstuff.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-xstuff.obj `if test -f 'xstuff.c'; then $(CYGPATH_W) 'xstuff.c'; else $(CYGPATH_W) '$(srcdir)/xstuff.c'; fi`
+
+mate_panel-panel-session.o: panel-session.c
[email protected]__f[email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-session.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-session.Tpo -c -o mate_panel-panel-session.o `test -f 'panel-session.c' || echo '$(srcdir)/'`panel-session.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-session.Tpo $(DEPDIR)/mate_panel-panel-session.Po
[email protected][email protected]@[email protected] source='panel-session.c' object='mate_panel-panel-session.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-session.o `test -f 'panel-session.c' || echo '$(srcdir)/'`panel-session.c
+
+mate_panel-panel-session.obj: panel-session.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-session.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-session.Tpo -c -o mate_panel-panel-session.obj `if test -f 'panel-session.c'; then $(CYGPATH_W) 'panel-session.c'; else $(CYGPATH_W) '$(srcdir)/panel-session.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-session.Tpo $(DEPDIR)/mate_panel-panel-session.Po
[email protected][email protected]@[email protected] source='panel-session.c' object='mate_panel-panel-session.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-session.obj `if test -f 'panel-session.c'; then $(CYGPATH_W) 'panel-session.c'; else $(CYGPATH_W) '$(srcdir)/panel-session.c'; fi`
+
+mate_panel-panel-compatibility.o: panel-compatibility.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-compatibility.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-compatibility.Tpo -c -o mate_panel-panel-compatibility.o `test -f 'panel-compatibility.c' || echo '$(srcdir)/'`panel-compatibility.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-compatibility.Tpo $(DEPDIR)/mate_panel-panel-compatibility.Po
[email protected][email protected]@[email protected] source='panel-compatibility.c' object='mate_panel-panel-compatibility.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-compatibility.o `test -f 'panel-compatibility.c' || echo '$(srcdir)/'`panel-compatibility.c
+
+mate_panel-panel-compatibility.obj: panel-compatibility.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-compatibility.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-compatibility.Tpo -c -o mate_panel-panel-compatibility.obj `if test -f 'panel-compatibility.c'; then $(CYGPATH_W) 'panel-compatibility.c'; else $(CYGPATH_W) '$(srcdir)/panel-compatibility.c'; fi`
[email protected]__fastde[email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-compatibility.Tpo $(DEPDIR)/mate_panel-panel-compatibility.Po
[email protected][email protected]@[email protected] source='panel-compatibility.c' object='mate_panel-panel-compatibility.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-compatibility.obj `if test -f 'panel-compatibility.c'; then $(CYGPATH_W) 'panel-compatibility.c'; else $(CYGPATH_W) '$(srcdir)/panel-compatibility.c'; fi`
+
+mate_panel-panel.o: panel.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel.o -MD -MP -MF $(DEPDIR)/mate_panel-panel.Tpo -c -o mate_panel-panel.o `test -f 'panel.c' || echo '$(srcdir)/'`panel.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel.Tpo $(DEPDIR)/mate_panel-panel.Po
[email protected][email protected]@[email protected] source='panel.c' object='mate_panel-panel.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel.o `test -f 'panel.c' || echo '$(srcdir)/'`panel.c
+
+mate_panel-panel.obj: panel.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel.Tpo -c -o mate_panel-panel.obj `if test -f 'panel.c'; then $(CYGPATH_W) 'panel.c'; else $(CYGPATH_W) '$(srcdir)/panel.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel.Tpo $(DEPDIR)/mate_panel-panel.Po
[email protected][email protected]@[email protected] source='panel.c' object='mate_panel-panel.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel.obj `if test -f 'panel.c'; then $(CYGPATH_W) 'panel.c'; else $(CYGPATH_W) '$(srcdir)/panel.c'; fi`
+
+mate_panel-applet.o: applet.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-applet.o -MD -MP -MF $(DEPDIR)/mate_panel-applet.Tpo -c -o mate_panel-applet.o `test -f 'applet.c' || echo '$(srcdir)/'`applet.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-applet.Tpo $(DEPDIR)/mate_panel-applet.Po
[email protected][email protected]@[email protected] source='applet.c' object='mate_panel-applet.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-applet.o `test -f 'applet.c' || echo '$(srcdir)/'`applet.c
+
+mate_panel-applet.obj: applet.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-applet.obj -MD -MP -MF $(DEPDIR)/mate_panel-applet.Tpo -c -o mate_panel-applet.obj `if test -f 'applet.c'; then $(CYGPATH_W) 'applet.c'; else $(CYGPATH_W) '$(srcdir)/applet.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-applet.Tpo $(DEPDIR)/mate_panel-applet.Po
[email protected][email protected]@[email protected] source='applet.c' object='mate_panel-applet.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-applet.obj `if test -f 'applet.c'; then $(CYGPATH_W) 'applet.c'; else $(CYGPATH_W) '$(srcdir)/applet.c'; fi`
+
+mate_panel-drawer.o: drawer.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-drawer.o -MD -MP -MF $(DEPDIR)/mate_panel-drawer.Tpo -c -o mate_panel-drawer.o `test -f 'drawer.c' || echo '$(srcdir)/'`drawer.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-drawer.Tpo $(DEPDIR)/mate_panel-drawer.Po
[email protected][email protected]@[email protected] source='drawer.c' object='mate_panel-drawer.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-drawer.o `test -f 'drawer.c' || echo '$(srcdir)/'`drawer.c
+
+mate_panel-drawer.obj: drawer.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-drawer.obj -MD -MP -MF $(DEPDIR)/mate_panel-drawer.Tpo -c -o mate_panel-drawer.obj `if test -f 'drawer.c'; then $(CYGPATH_W) 'drawer.c'; else $(CYGPATH_W) '$(srcdir)/drawer.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-drawer.Tpo $(DEPDIR)/mate_panel-drawer.Po
[email protected][email protected]@[email protected] source='drawer.c' object='mate_panel-drawer.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-drawer.obj `if test -f 'drawer.c'; then $(CYGPATH_W) 'drawer.c'; else $(CYGPATH_W) '$(srcdir)/drawer.c'; fi`
+
+mate_panel-panel-config-global.o: panel-config-global.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-config-global.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-config-global.Tpo -c -o mate_panel-panel-config-global.o `test -f 'panel-config-global.c' || echo '$(srcdir)/'`panel-config-global.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-config-global.Tpo $(DEPDIR)/mate_panel-panel-config-global.Po
[email protected][email protected]@[email protected] source='panel-config-global.c' object='mate_panel-panel-config-global.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-config-global.o `test -f 'panel-config-global.c' || echo '$(srcdir)/'`panel-config-global.c
+
+mate_panel-panel-config-global.obj: panel-config-global.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-config-global.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-config-global.Tpo -c -o mate_panel-panel-config-global.obj `if test -f 'panel-config-global.c'; then $(CYGPATH_W) 'panel-config-global.c'; else $(CYGPATH_W) '$(srcdir)/panel-config-global.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-config-global.Tpo $(DEPDIR)/mate_panel-panel-config-global.Po
[email protected][email protected]@[email protected] source='panel-config-global.c' object='mate_panel-panel-config-global.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-config-global.obj `if test -f 'panel-config-global.c'; then $(CYGPATH_W) 'panel-config-global.c'; else $(CYGPATH_W) '$(srcdir)/panel-config-global.c'; fi`
+
+mate_panel-panel-util.o: panel-util.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-util.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-util.Tpo -c -o mate_panel-panel-util.o `test -f 'panel-util.c' || echo '$(srcdir)/'`panel-util.c
+[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-util.Tpo $(DEPDIR)/mate_panel-panel-util.Po
[email protected][email protected]@[email protected] source='panel-util.c' object='mate_panel-panel-util.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-util.o `test -f 'panel-util.c' || echo '$(srcdir)/'`panel-util.c
+
+mate_panel-panel-util.obj: panel-util.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-util.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-util.Tpo -c -o mate_panel-panel-util.obj `if test -f 'panel-util.c'; then $(CYGPATH_W) 'panel-util.c'; else $(CYGPATH_W) '$(srcdir)/panel-util.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-util.Tpo $(DEPDIR)/mate_panel-panel-util.Po
[email protected][email protected]@[email protected] source='panel-util.c' object='mate_panel-panel-util.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-util.obj `if test -f 'panel-util.c'; then $(CYGPATH_W) 'panel-util.c'; else $(CYGPATH_W) '$(srcdir)/panel-util.c'; fi`
+
+mate_panel-panel-mateconf.o: panel-mateconf.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-mateconf.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-mateconf.Tpo -c -o mate_panel-panel-mateconf.o `test -f 'panel-mateconf.c' || echo '$(srcdir)/'`panel-mateconf.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-mateconf.Tpo $(DEPDIR)/mate_panel-panel-mateconf.Po
[email protected][email protected]@[email protected] source='panel-mateconf.c' object='mate_panel-panel-mateconf.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-mateconf.o `test -f 'panel-mateconf.c' || echo '$(srcdir)/'`panel-mateconf.c
+
+mate_panel-panel-mateconf.obj: panel-mateconf.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-mateconf.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-mateconf.Tpo -c -o mate_panel-panel-mateconf.obj `if test -f 'panel-mateconf.c'; then $(CYGPATH_W) 'panel-mateconf.c'; else $(CYGPATH_W) '$(srcdir)/panel-mateconf.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-mateconf.Tpo $(DEPDIR)/mate_panel-panel-mateconf.Po
[email protected][email protected]@[email protected] source='panel-mateconf.c' object='mate_panel-panel-mateconf.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-mateconf.obj `if test -f 'panel-mateconf.c'; then $(CYGPATH_W) 'panel-mateconf.c'; else $(CYGPATH_W) '$(srcdir)/panel-mateconf.c'; fi`
+
+mate_panel-panel-properties-dialog.o: panel-properties-dialog.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-properties-dialog.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-properties-dialog.Tpo -c -o mate_panel-panel-properties-dialog.o `test -f 'panel-properties-dialog.c' || echo '$(srcdir)/'`panel-properties-dialog.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-properties-dialog.Tpo $(DEPDIR)/mate_panel-panel-properties-dialog.Po
[email protected][email protected]@[email protected] source='panel-properties-dialog.c' object='mate_panel-panel-properties-dialog.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-properties-dialog.o `test -f 'panel-properties-dialog.c' || echo '$(srcdir)/'`panel-properties-dialog.c
+
+mate_panel-panel-properties-dialog.obj: panel-properties-dialog.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-properties-dialog.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-properties-dialog.Tpo -c -o mate_panel-panel-properties-dialog.obj `if test -f 'panel-properties-dialog.c'; then $(CYGPATH_W) 'panel-properties-dialog.c'; else $(CYGPATH_W) '$(srcdir)/panel-properties-dialog.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-properties-dialog.Tpo $(DEPDIR)/mate_panel-panel-properties-dialog.Po
[email protected][email protected]@[email protected] source='panel-properties-dialog.c' object='mate_panel-panel-properties-dialog.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-properties-dialog.obj `if test -f 'panel-properties-dialog.c'; then $(CYGPATH_W) 'panel-properties-dialog.c'; else $(CYGPATH_W) '$(srcdir)/panel-properties-dialog.c'; fi`
+
+mate_panel-panel-run-dialog.o: panel-run-dialog.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-run-dialog.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-run-dialog.Tpo -c -o mate_panel-panel-run-dialog.o `test -f 'panel-run-dialog.c' || echo '$(srcdir)/'`panel-run-dialog.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-run-dialog.Tpo $(DEPDIR)/mate_panel-panel-run-dialog.Po
[email protected][email protected]@[email protected] source='panel-run-dialog.c' object='mate_panel-panel-run-dialog.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-run-dialog.o `test -f 'panel-run-dialog.c' || echo '$(srcdir)/'`panel-run-dialog.c
+
+mate_panel-panel-run-dialog.obj: panel-run-dialog.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-run-dialog.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-run-dialog.Tpo -c -o mate_panel-panel-run-dialog.obj `if test -f 'panel-run-dialog.c'; then $(CYGPATH_W) 'panel-run-dialog.c'; else $(CYGPATH_W) '$(srcdir)/panel-run-dialog.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-run-dialog.Tpo $(DEPDIR)/mate_panel-panel-run-dialog.Po
[email protected][email protected]@[email protected] source='panel-run-dialog.c' object='mate_panel-panel-run-dialog.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-run-dialog.obj `if test -f 'panel-run-dialog.c'; then $(CYGPATH_W) 'panel-run-dialog.c'; else $(CYGPATH_W) '$(srcdir)/panel-run-dialog.c'; fi`
+
+mate_panel-menu.o: menu.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-menu.o -MD -MP -MF $(DEPDIR)/mate_panel-menu.Tpo -c -o mate_panel-menu.o `test -f 'menu.c' || echo '$(srcdir)/'`menu.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-menu.Tpo $(DEPDIR)/mate_panel-menu.Po
[email protected][email protected]@[email protected] source='menu.c' object='mate_panel-menu.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-menu.o `test -f 'menu.c' || echo '$(srcdir)/'`menu.c
+
+mate_panel-menu.obj: menu.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-menu.obj -MD -MP -MF $(DEPDIR)/mate_panel-menu.Tpo -c -o mate_panel-menu.obj `if test -f 'menu.c'; then $(CYGPATH_W) 'menu.c'; else $(CYGPATH_W) '$(srcdir)/menu.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-menu.Tpo $(DEPDIR)/mate_panel-menu.Po
[email protected][email protected]@[email protected] source='menu.c' object='mate_panel-menu.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-menu.obj `if test -f 'menu.c'; then $(CYGPATH_W) 'menu.c'; else $(CYGPATH_W) '$(srcdir)/menu.c'; fi`
+
+mate_panel-panel-context-menu.o: panel-context-menu.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-context-menu.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-context-menu.Tpo -c -o mate_panel-panel-context-menu.o `test -f 'panel-context-menu.c' || echo '$(srcdir)/'`panel-context-menu.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-context-menu.Tpo $(DEPDIR)/mate_panel-panel-context-menu.Po
[email protected][email protected]@[email protected] source='panel-context-menu.c' object='mate_panel-panel-context-menu.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-context-menu.o `test -f 'panel-context-menu.c' || echo '$(srcdir)/'`panel-context-menu.c
+
+mate_panel-panel-context-menu.obj: panel-context-menu.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-context-menu.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-context-menu.Tpo -c -o mate_panel-panel-context-menu.obj `if test -f 'panel-context-menu.c'; then $(CYGPATH_W) 'panel-context-menu.c'; else $(CYGPATH_W) '$(srcdir)/panel-context-menu.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-context-menu.Tpo $(DEPDIR)/mate_panel-panel-context-menu.Po
[email protected][email protected]@[email protected] source='panel-context-menu.c' object='mate_panel-panel-context-menu.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-context-menu.obj `if test -f 'panel-context-menu.c'; then $(CYGPATH_W) 'panel-context-menu.c'; else $(CYGPATH_W) '$(srcdir)/panel-context-menu.c'; fi`
+
+mate_panel-launcher.o: launcher.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-launcher.o -MD -MP -MF $(DEPDIR)/mate_panel-launcher.Tpo -c -o mate_panel-launcher.o `test -f 'launcher.c' || echo '$(srcdir)/'`launcher.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-launcher.Tpo $(DEPDIR)/mate_panel-launcher.Po
[email protected][email protected]@[email protected] source='launcher.c' object='mate_panel-launcher.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-launcher.o `test -f 'launcher.c' || echo '$(srcdir)/'`launcher.c
+
+mate_panel-launcher.obj: launcher.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-launcher.obj -MD -MP -MF $(DEPDIR)/mate_panel-launcher.Tpo -c -o mate_panel-launcher.obj `if test -f 'launcher.c'; then $(CYGPATH_W) 'launcher.c'; else $(CYGPATH_W) '$(srcdir)/launcher.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-launcher.Tpo $(DEPDIR)/mate_panel-launcher.Po
[email protected][email protected]@[email protected] source='launcher.c' object='mate_panel-launcher.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-launcher.obj `if test -f 'launcher.c'; then $(CYGPATH_W) 'launcher.c'; else $(CYGPATH_W) '$(srcdir)/launcher.c'; fi`
+
+mate_panel-mate-panel-applet-frame.o: mate-panel-applet-frame.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-mate-panel-applet-frame.o -MD -MP -MF $(DEPDIR)/mate_panel-mate-panel-applet-frame.Tpo -c -o mate_panel-mate-panel-applet-frame.o `test -f 'mate-panel-applet-frame.c' || echo '$(srcdir)/'`mate-panel-applet-frame.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-mate-panel-applet-frame.Tpo $(DEPDIR)/mate_panel-mate-panel-applet-frame.Po
[email protected][email protected]@[email protected] source='mate-panel-applet-frame.c' object='mate_panel-mate-panel-applet-frame.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-mate-panel-applet-frame.o `test -f 'mate-panel-applet-frame.c' || echo '$(srcdir)/'`mate-panel-applet-frame.c
+
+mate_panel-mate-panel-applet-frame.obj: mate-panel-applet-frame.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-mate-panel-applet-frame.obj -MD -MP -MF $(DEPDIR)/mate_panel-mate-panel-applet-frame.Tpo -c -o mate_panel-mate-panel-applet-frame.obj `if test -f 'mate-panel-applet-frame.c'; then $(CYGPATH_W) 'mate-panel-applet-frame.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applet-frame.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-mate-panel-applet-frame.Tpo $(DEPDIR)/mate_panel-mate-panel-applet-frame.Po
[email protected][email protected]@[email protected] source='mate-panel-applet-frame.c' object='mate_panel-mate-panel-applet-frame.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-mate-panel-applet-frame.obj `if test -f 'mate-panel-applet-frame.c'; then $(CYGPATH_W) 'mate-panel-applet-frame.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applet-frame.c'; fi`
+
+mate_panel-mate-panel-applets-manager.o: mate-panel-applets-manager.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-mate-panel-applets-manager.o -MD -MP -MF $(DEPDIR)/mate_panel-mate-panel-applets-manager.Tpo -c -o mate_panel-mate-panel-applets-manager.o `test -f 'mate-panel-applets-manager.c' || echo '$(srcdir)/'`mate-panel-applets-manager.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-mate-panel-applets-manager.Tpo $(DEPDIR)/mate_panel-mate-panel-applets-manager.Po
[email protected][email protected]@[email protected] source='mate-panel-applets-manager.c' object='mate_panel-mate-panel-applets-manager.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-mate-panel-applets-manager.o `test -f 'mate-panel-applets-manager.c' || echo '$(srcdir)/'`mate-panel-applets-manager.c
+
+mate_panel-mate-panel-applets-manager.obj: mate-panel-applets-manager.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-mate-panel-applets-manager.obj -MD -MP -MF $(DEPDIR)/mate_panel-mate-panel-applets-manager.Tpo -c -o mate_panel-mate-panel-applets-manager.obj `if test -f 'mate-panel-applets-manager.c'; then $(CYGPATH_W) 'mate-panel-applets-manager.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applets-manager.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-mate-panel-applets-manager.Tpo $(DEPDIR)/mate_panel-mate-panel-applets-manager.Po
[email protected][email protected]@[email protected] source='mate-panel-applets-manager.c' object='mate_panel-mate-panel-applets-manager.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-mate-panel-applets-manager.obj `if test -f 'mate-panel-applets-manager.c'; then $(CYGPATH_W) 'mate-panel-applets-manager.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applets-manager.c'; fi`
+
+mate_panel-panel-shell.o: panel-shell.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-shell.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-shell.Tpo -c -o mate_panel-panel-shell.o `test -f 'panel-shell.c' || echo '$(srcdir)/'`panel-shell.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-shell.Tpo $(DEPDIR)/mate_panel-panel-shell.Po
[email protected][email protected]@[email protected] source='panel-shell.c' object='mate_panel-panel-shell.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-shell.o `test -f 'panel-shell.c' || echo '$(srcdir)/'`panel-shell.c
+
+mate_panel-panel-shell.obj: panel-shell.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-shell.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-shell.Tpo -c -o mate_panel-panel-shell.obj `if test -f 'panel-shell.c'; then $(CYGPATH_W) 'panel-shell.c'; else $(CYGPATH_W) '$(srcdir)/panel-shell.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-shell.Tpo $(DEPDIR)/mate_panel-panel-shell.Po
[email protected][email protected]@[email protected] source='panel-shell.c' object='mate_panel-panel-shell.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-shell.obj `if test -f 'panel-shell.c'; then $(CYGPATH_W) 'panel-shell.c'; else $(CYGPATH_W) '$(srcdir)/panel-shell.c'; fi`
+
+mate_panel-panel-background.o: panel-background.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-background.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-background.Tpo -c -o mate_panel-panel-background.o `test -f 'panel-background.c' || echo '$(srcdir)/'`panel-background.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-background.Tpo $(DEPDIR)/mate_panel-panel-background.Po
[email protected][email protected]@[email protected] source='panel-background.c' object='mate_panel-panel-background.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-background.o `test -f 'panel-background.c' || echo '$(srcdir)/'`panel-background.c
+
+mate_panel-panel-background.obj: panel-background.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-background.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-background.Tpo -c -o mate_panel-panel-background.obj `if test -f 'panel-background.c'; then $(CYGPATH_W) 'panel-background.c'; else $(CYGPATH_W) '$(srcdir)/panel-background.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-background.Tpo $(DEPDIR)/mate_panel-panel-background.Po
[email protected][email protected]@[email protected] source='panel-background.c' object='mate_panel-panel-background.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-background.obj `if test -f 'panel-background.c'; then $(CYGPATH_W) 'panel-background.c'; else $(CYGPATH_W) '$(srcdir)/panel-background.c'; fi`
+
+mate_panel-panel-background-monitor.o: panel-background-monitor.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-background-monitor.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-background-monitor.Tpo -c -o mate_panel-panel-background-monitor.o `test -f 'panel-background-monitor.c' || echo '$(srcdir)/'`panel-background-monitor.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-background-monitor.Tpo $(DEPDIR)/mate_panel-panel-background-monitor.Po
[email protected][email protected]@[email protected] source='panel-background-monitor.c' object='mate_panel-panel-background-monitor.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-background-monitor.o `test -f 'panel-background-monitor.c' || echo '$(srcdir)/'`panel-background-monitor.c
+
+mate_panel-panel-background-monitor.obj: panel-background-monitor.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-background-monitor.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-background-monitor.Tpo -c -o mate_panel-panel-background-monitor.obj `if test -f 'panel-background-monitor.c'; then $(CYGPATH_W) 'panel-background-monitor.c'; else $(CYGPATH_W) '$(srcdir)/panel-background-monitor.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-background-monitor.Tpo $(DEPDIR)/mate_panel-panel-background-monitor.Po
[email protected][email protected]@[email protected] source='panel-background-monitor.c' object='mate_panel-panel-background-monitor.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-background-monitor.obj `if test -f 'panel-background-monitor.c'; then $(CYGPATH_W) 'panel-background-monitor.c'; else $(CYGPATH_W) '$(srcdir)/panel-background-monitor.c'; fi`
+
+mate_panel-panel-stock-icons.o: panel-stock-icons.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-stock-icons.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-stock-icons.Tpo -c -o mate_panel-panel-stock-icons.o `test -f 'panel-stock-icons.c' || echo '$(srcdir)/'`panel-stock-icons.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-stock-icons.Tpo $(DEPDIR)/mate_panel-panel-stock-icons.Po
[email protected][email protected]@[email protected] source='panel-stock-icons.c' object='mate_panel-panel-stock-icons.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-stock-icons.o `test -f 'panel-stock-icons.c' || echo '$(srcdir)/'`panel-stock-icons.c
+
+mate_panel-panel-stock-icons.obj: panel-stock-icons.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-stock-icons.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-stock-icons.Tpo -c -o mate_panel-panel-stock-icons.obj `if test -f 'panel-stock-icons.c'; then $(CYGPATH_W) 'panel-stock-icons.c'; else $(CYGPATH_W) '$(srcdir)/panel-stock-icons.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-stock-icons.Tpo $(DEPDIR)/mate_panel-panel-stock-icons.Po
[email protected][email protected]@[email protected] source='panel-stock-icons.c' object='mate_panel-panel-stock-icons.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-stock-icons.obj `if test -f 'panel-stock-icons.c'; then $(CYGPATH_W) 'panel-stock-icons.c'; else $(CYGPATH_W) '$(srcdir)/panel-stock-icons.c'; fi`
+
+mate_panel-panel-action-button.o: panel-action-button.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-action-button.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-action-button.Tpo -c -o mate_panel-panel-action-button.o `test -f 'panel-action-button.c' || echo '$(srcdir)/'`panel-action-button.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-action-button.Tpo $(DEPDIR)/mate_panel-panel-action-button.Po
[email protected][email protected]@[email protected] source='panel-action-button.c' object='mate_panel-panel-action-button.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-action-button.o `test -f 'panel-action-button.c' || echo '$(srcdir)/'`panel-action-button.c
+
+mate_panel-panel-action-button.obj: panel-action-button.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-action-button.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-action-button.Tpo -c -o mate_panel-panel-action-button.obj `if test -f 'panel-action-button.c'; then $(CYGPATH_W) 'panel-action-button.c'; else $(CYGPATH_W) '$(srcdir)/panel-action-button.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-action-button.Tpo $(DEPDIR)/mate_panel-panel-action-button.Po
[email protected][email protected]@[email protected] source='panel-action-button.c' object='mate_panel-panel-action-button.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-action-button.obj `if test -f 'panel-action-button.c'; then $(CYGPATH_W) 'panel-action-button.c'; else $(CYGPATH_W) '$(srcdir)/panel-action-button.c'; fi`
+
+mate_panel-panel-menu-bar.o: panel-menu-bar.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-menu-bar.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-menu-bar.Tpo -c -o mate_panel-panel-menu-bar.o `test -f 'panel-menu-bar.c' || echo '$(srcdir)/'`panel-menu-bar.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-menu-bar.Tpo $(DEPDIR)/mate_panel-panel-menu-bar.Po
[email protected][email protected]@[email protected] source='panel-menu-bar.c' object='mate_panel-panel-menu-bar.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-menu-bar.o `test -f 'panel-menu-bar.c' || echo '$(srcdir)/'`panel-menu-bar.c
+
+mate_panel-panel-menu-bar.obj: panel-menu-bar.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-menu-bar.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-menu-bar.Tpo -c -o mate_panel-panel-menu-bar.obj `if test -f 'panel-menu-bar.c'; then $(CYGPATH_W) 'panel-menu-bar.c'; else $(CYGPATH_W) '$(srcdir)/panel-menu-bar.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-menu-bar.Tpo $(DEPDIR)/mate_panel-panel-menu-bar.Po
[email protected][email protected]@[email protected] source='panel-menu-bar.c' object='mate_panel-panel-menu-bar.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-menu-bar.obj `if test -f 'panel-menu-bar.c'; then $(CYGPATH_W) 'panel-menu-bar.c'; else $(CYGPATH_W) '$(srcdir)/panel-menu-bar.c'; fi`
+
+mate_panel-panel-menu-button.o: panel-menu-button.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-menu-button.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-menu-button.Tpo -c -o mate_panel-panel-menu-button.o `test -f 'panel-menu-button.c' || echo '$(srcdir)/'`panel-menu-button.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-menu-button.Tpo $(DEPDIR)/mate_panel-panel-menu-button.Po
[email protected][email protected]@[email protected] source='panel-menu-button.c' object='mate_panel-panel-menu-button.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-menu-button.o `test -f 'panel-menu-button.c' || echo '$(srcdir)/'`panel-menu-button.c
+
+mate_panel-panel-menu-button.obj: panel-menu-button.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-menu-button.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-menu-button.Tpo -c -o mate_panel-panel-menu-button.obj `if test -f 'panel-menu-button.c'; then $(CYGPATH_W) 'panel-menu-button.c'; else $(CYGPATH_W) '$(srcdir)/panel-menu-button.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-menu-button.Tpo $(DEPDIR)/mate_panel-panel-menu-button.Po
[email protected][email protected]@[email protected] source='panel-menu-button.c' object='mate_panel-panel-menu-button.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-menu-button.obj `if test -f 'panel-menu-button.c'; then $(CYGPATH_W) 'panel-menu-button.c'; else $(CYGPATH_W) '$(srcdir)/panel-menu-button.c'; fi`
+
+mate_panel-panel-menu-items.o: panel-menu-items.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-menu-items.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-menu-items.Tpo -c -o mate_panel-panel-menu-items.o `test -f 'panel-menu-items.c' || echo '$(srcdir)/'`panel-menu-items.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-menu-items.Tpo $(DEPDIR)/mate_panel-panel-menu-items.Po
[email protected][email protected]@[email protected] source='panel-menu-items.c' object='mate_panel-panel-menu-items.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-menu-items.o `test -f 'panel-menu-items.c' || echo '$(srcdir)/'`panel-menu-items.c
+
+mate_panel-panel-menu-items.obj: panel-menu-items.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-menu-items.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-menu-items.Tpo -c -o mate_panel-panel-menu-items.obj `if test -f 'panel-menu-items.c'; then $(CYGPATH_W) 'panel-menu-items.c'; else $(CYGPATH_W) '$(srcdir)/panel-menu-items.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-menu-items.Tpo $(DEPDIR)/mate_panel-panel-menu-items.Po
[email protected][email protected]@[email protected] source='panel-menu-items.c' object='mate_panel-panel-menu-items.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-menu-items.obj `if test -f 'panel-menu-items.c'; then $(CYGPATH_W) 'panel-menu-items.c'; else $(CYGPATH_W) '$(srcdir)/panel-menu-items.c'; fi`
+
+mate_panel-panel-separator.o: panel-separator.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-separator.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-separator.Tpo -c -o mate_panel-panel-separator.o `test -f 'panel-separator.c' || echo '$(srcdir)/'`panel-separator.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-separator.Tpo $(DEPDIR)/mate_panel-panel-separator.Po
[email protected][email protected]@[email protected] source='panel-separator.c' object='mate_panel-panel-separator.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-separator.o `test -f 'panel-separator.c' || echo '$(srcdir)/'`panel-separator.c
+
+mate_panel-panel-separator.obj: panel-separator.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-separator.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-separator.Tpo -c -o mate_panel-panel-separator.obj `if test -f 'panel-separator.c'; then $(CYGPATH_W) 'panel-separator.c'; else $(CYGPATH_W) '$(srcdir)/panel-separator.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-separator.Tpo $(DEPDIR)/mate_panel-panel-separator.Po
[email protected][email protected]@[email protected] source='panel-separator.c' object='mate_panel-panel-separator.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-separator.obj `if test -f 'panel-separator.c'; then $(CYGPATH_W) 'panel-separator.c'; else $(CYGPATH_W) '$(srcdir)/panel-separator.c'; fi`
+
+mate_panel-panel-recent.o: panel-recent.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-recent.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-recent.Tpo -c -o mate_panel-panel-recent.o `test -f 'panel-recent.c' || echo '$(srcdir)/'`panel-recent.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-recent.Tpo $(DEPDIR)/mate_panel-panel-recent.Po
[email protected][email protected]@[email protected] source='panel-recent.c' object='mate_panel-panel-recent.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-recent.o `test -f 'panel-recent.c' || echo '$(srcdir)/'`panel-recent.c
+
+mate_panel-panel-recent.obj: panel-recent.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-recent.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-recent.Tpo -c -o mate_panel-panel-recent.obj `if test -f 'panel-recent.c'; then $(CYGPATH_W) 'panel-recent.c'; else $(CYGPATH_W) '$(srcdir)/panel-recent.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-recent.Tpo $(DEPDIR)/mate_panel-panel-recent.Po
[email protected][email protected]@[email protected] source='panel-recent.c' object='mate_panel-panel-recent.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-recent.obj `if test -f 'panel-recent.c'; then $(CYGPATH_W) 'panel-recent.c'; else $(CYGPATH_W) '$(srcdir)/panel-recent.c'; fi`
+
+mate_panel-panel-action-protocol.o: panel-action-protocol.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-action-protocol.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-action-protocol.Tpo -c -o mate_panel-panel-action-protocol.o `test -f 'panel-action-protocol.c' || echo '$(srcdir)/'`panel-action-protocol.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-action-protocol.Tpo $(DEPDIR)/mate_panel-panel-action-protocol.Po
[email protected][email protected]@[email protected] source='panel-action-protocol.c' object='mate_panel-panel-action-protocol.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-action-protocol.o `test -f 'panel-action-protocol.c' || echo '$(srcdir)/'`panel-action-protocol.c
+
+mate_panel-panel-action-protocol.obj: panel-action-protocol.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-action-protocol.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-action-protocol.Tpo -c -o mate_panel-panel-action-protocol.obj `if test -f 'panel-action-protocol.c'; then $(CYGPATH_W) 'panel-action-protocol.c'; else $(CYGPATH_W) '$(srcdir)/panel-action-protocol.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-action-protocol.Tpo $(DEPDIR)/mate_panel-panel-action-protocol.Po
[email protected][email protected]@[email protected] source='panel-action-protocol.c' object='mate_panel-panel-action-protocol.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-action-protocol.obj `if test -f 'panel-action-protocol.c'; then $(CYGPATH_W) 'panel-action-protocol.c'; else $(CYGPATH_W) '$(srcdir)/panel-action-protocol.c'; fi`
+
+mate_panel-panel-toplevel.o: panel-toplevel.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-toplevel.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-toplevel.Tpo -c -o mate_panel-panel-toplevel.o `test -f 'panel-toplevel.c' || echo '$(srcdir)/'`panel-toplevel.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-toplevel.Tpo $(DEPDIR)/mate_panel-panel-toplevel.Po
[email protected][email protected]@[email protected] source='panel-toplevel.c' object='mate_panel-panel-toplevel.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-toplevel.o `test -f 'panel-toplevel.c' || echo '$(srcdir)/'`panel-toplevel.c
+
+mate_panel-panel-toplevel.obj: panel-toplevel.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-toplevel.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-toplevel.Tpo -c -o mate_panel-panel-toplevel.obj `if test -f 'panel-toplevel.c'; then $(CYGPATH_W) 'panel-toplevel.c'; else $(CYGPATH_W) '$(srcdir)/panel-toplevel.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-toplevel.Tpo $(DEPDIR)/mate_panel-panel-toplevel.Po
[email protected][email protected]@[email protected] source='panel-toplevel.c' object='mate_panel-panel-toplevel.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-toplevel.obj `if test -f 'panel-toplevel.c'; then $(CYGPATH_W) 'panel-toplevel.c'; else $(CYGPATH_W) '$(srcdir)/panel-toplevel.c'; fi`
+
+mate_panel-panel-struts.o: panel-struts.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-struts.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-struts.Tpo -c -o mate_panel-panel-struts.o `test -f 'panel-struts.c' || echo '$(srcdir)/'`panel-struts.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-struts.Tpo $(DEPDIR)/mate_panel-panel-struts.Po
[email protected][email protected]@[email protected] source='panel-struts.c' object='mate_panel-panel-struts.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-struts.o `test -f 'panel-struts.c' || echo '$(srcdir)/'`panel-struts.c
+
+mate_panel-panel-struts.obj: panel-struts.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-struts.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-struts.Tpo -c -o mate_panel-panel-struts.obj `if test -f 'panel-struts.c'; then $(CYGPATH_W) 'panel-struts.c'; else $(CYGPATH_W) '$(srcdir)/panel-struts.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-struts.Tpo $(DEPDIR)/mate_panel-panel-struts.Po
[email protected][email protected]@[email protected] source='panel-struts.c' object='mate_panel-panel-struts.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-struts.obj `if test -f 'panel-struts.c'; then $(CYGPATH_W) 'panel-struts.c'; else $(CYGPATH_W) '$(srcdir)/panel-struts.c'; fi`
+
+mate_panel-panel-frame.o: panel-frame.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-frame.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-frame.Tpo -c -o mate_panel-panel-frame.o `test -f 'panel-frame.c' || echo '$(srcdir)/'`panel-frame.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-frame.Tpo $(DEPDIR)/mate_panel-panel-frame.Po
[email protected][email protected]@[email protected] source='panel-frame.c' object='mate_panel-panel-frame.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-frame.o `test -f 'panel-frame.c' || echo '$(srcdir)/'`panel-frame.c
+
+mate_panel-panel-frame.obj: panel-frame.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-frame.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-frame.Tpo -c -o mate_panel-panel-frame.obj `if test -f 'panel-frame.c'; then $(CYGPATH_W) 'panel-frame.c'; else $(CYGPATH_W) '$(srcdir)/panel-frame.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-frame.Tpo $(DEPDIR)/mate_panel-panel-frame.Po
[email protected][email protected]@[email protected] source='panel-frame.c' object='mate_panel-panel-frame.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-frame.obj `if test -f 'panel-frame.c'; then $(CYGPATH_W) 'panel-frame.c'; else $(CYGPATH_W) '$(srcdir)/panel-frame.c'; fi`
+
+mate_panel-panel-xutils.o: panel-xutils.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-xutils.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-xutils.Tpo -c -o mate_panel-panel-xutils.o `test -f 'panel-xutils.c' || echo '$(srcdir)/'`panel-xutils.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-xutils.Tpo $(DEPDIR)/mate_panel-panel-xutils.Po
[email protected][email protected]@[email protected] source='panel-xutils.c' object='mate_panel-panel-xutils.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-xutils.o `test -f 'panel-xutils.c' || echo '$(srcdir)/'`panel-xutils.c
+
+mate_panel-panel-xutils.obj: panel-xutils.c
[email protected]__fastdepCC_[email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-xutils.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-xutils.Tpo -c -o mate_panel-panel-xutils.obj `if test -f 'panel-xutils.c'; then $(CYGPATH_W) 'panel-xutils.c'; else $(CYGPATH_W) '$(srcdir)/panel-xutils.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-xutils.Tpo $(DEPDIR)/mate_panel-panel-xutils.Po
[email protected][email protected]@[email protected] source='panel-xutils.c' object='mate_panel-panel-xutils.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-xutils.obj `if test -f 'panel-xutils.c'; then $(CYGPATH_W) 'panel-xutils.c'; else $(CYGPATH_W) '$(srcdir)/panel-xutils.c'; fi`
+
+mate_panel-panel-multiscreen.o: panel-multiscreen.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-multiscreen.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-multiscreen.Tpo -c -o mate_panel-panel-multiscreen.o `test -f 'panel-multiscreen.c' || echo '$(srcdir)/'`panel-multiscreen.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-multiscreen.Tpo $(DEPDIR)/mate_panel-panel-multiscreen.Po
[email protected][email protected]@[email protected] source='panel-multiscreen.c' object='mate_panel-panel-multiscreen.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-multiscreen.o `test -f 'panel-multiscreen.c' || echo '$(srcdir)/'`panel-multiscreen.c
+
+mate_panel-panel-multiscreen.obj: panel-multiscreen.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-multiscreen.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-multiscreen.Tpo -c -o mate_panel-panel-multiscreen.obj `if test -f 'panel-multiscreen.c'; then $(CYGPATH_W) 'panel-multiscreen.c'; else $(CYGPATH_W) '$(srcdir)/panel-multiscreen.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-multiscreen.Tpo $(DEPDIR)/mate_panel-panel-multiscreen.Po
[email protected][email protected]@[email protected] source='panel-multiscreen.c' object='mate_panel-panel-multiscreen.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-multiscreen.obj `if test -f 'panel-multiscreen.c'; then $(CYGPATH_W) 'panel-multiscreen.c'; else $(CYGPATH_W) '$(srcdir)/panel-multiscreen.c'; fi`
+
+mate_panel-panel-a11y.o: panel-a11y.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-a11y.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-a11y.Tpo -c -o mate_panel-panel-a11y.o `test -f 'panel-a11y.c' || echo '$(srcdir)/'`panel-a11y.c
[email protected]__fastd[email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-a11y.Tpo $(DEPDIR)/mate_panel-panel-a11y.Po
[email protected][email protected]@[email protected] source='panel-a11y.c' object='mate_panel-panel-a11y.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-a11y.o `test -f 'panel-a11y.c' || echo '$(srcdir)/'`panel-a11y.c
+
+mate_panel-panel-a11y.obj: panel-a11y.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-a11y.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-a11y.Tpo -c -o mate_panel-panel-a11y.obj `if test -f 'panel-a11y.c'; then $(CYGPATH_W) 'panel-a11y.c'; else $(CYGPATH_W) '$(srcdir)/panel-a11y.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-a11y.Tpo $(DEPDIR)/mate_panel-panel-a11y.Po
[email protected][email protected]@[email protected] source='panel-a11y.c' object='mate_panel-panel-a11y.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-a11y.obj `if test -f 'panel-a11y.c'; then $(CYGPATH_W) 'panel-a11y.c'; else $(CYGPATH_W) '$(srcdir)/panel-a11y.c'; fi`
+
+mate_panel-panel-bindings.o: panel-bindings.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-bindings.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-bindings.Tpo -c -o mate_panel-panel-bindings.o `test -f 'panel-bindings.c' || echo '$(srcdir)/'`panel-bindings.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-bindings.Tpo $(DEPDIR)/mate_panel-panel-bindings.Po
[email protected][email protected]@[email protected] source='panel-bindings.c' object='mate_panel-panel-bindings.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-bindings.o `test -f 'panel-bindings.c' || echo '$(srcdir)/'`panel-bindings.c
+
+mate_panel-panel-bindings.obj: panel-bindings.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-bindings.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-bindings.Tpo -c -o mate_panel-panel-bindings.obj `if test -f 'panel-bindings.c'; then $(CYGPATH_W) 'panel-bindings.c'; else $(CYGPATH_W) '$(srcdir)/panel-bindings.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-bindings.Tpo $(DEPDIR)/mate_panel-panel-bindings.Po
[email protected][email protected]@[email protected] source='panel-bindings.c' object='mate_panel-panel-bindings.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-bindings.obj `if test -f 'panel-bindings.c'; then $(CYGPATH_W) 'panel-bindings.c'; else $(CYGPATH_W) '$(srcdir)/panel-bindings.c'; fi`
+
+mate_panel-panel-profile.o: panel-profile.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-profile.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-profile.Tpo -c -o mate_panel-panel-profile.o `test -f 'panel-profile.c' || echo '$(srcdir)/'`panel-profile.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-profile.Tpo $(DEPDIR)/mate_panel-panel-profile.Po
[email protected][email protected]@[email protected] source='panel-profile.c' object='mate_panel-panel-profile.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-profile.o `test -f 'panel-profile.c' || echo '$(srcdir)/'`panel-profile.c
+
+mate_panel-panel-profile.obj: panel-profile.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-profile.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-profile.Tpo -c -o mate_panel-panel-profile.obj `if test -f 'panel-profile.c'; then $(CYGPATH_W) 'panel-profile.c'; else $(CYGPATH_W) '$(srcdir)/panel-profile.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-profile.Tpo $(DEPDIR)/mate_panel-panel-profile.Po
[email protected][email protected]@[email protected] source='panel-profile.c' object='mate_panel-panel-profile.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-profile.obj `if test -f 'panel-profile.c'; then $(CYGPATH_W) 'panel-profile.c'; else $(CYGPATH_W) '$(srcdir)/panel-profile.c'; fi`
+
+mate_panel-panel-force-quit.o: panel-force-quit.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-force-quit.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-force-quit.Tpo -c -o mate_panel-panel-force-quit.o `test -f 'panel-force-quit.c' || echo '$(srcdir)/'`panel-force-quit.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-force-quit.Tpo $(DEPDIR)/mate_panel-panel-force-quit.Po
[email protected][email protected]@[email protected] source='panel-force-quit.c' object='mate_panel-panel-force-quit.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-force-quit.o `test -f 'panel-force-quit.c' || echo '$(srcdir)/'`panel-force-quit.c
+
+mate_panel-panel-force-quit.obj: panel-force-quit.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-force-quit.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-force-quit.Tpo -c -o mate_panel-panel-force-quit.obj `if test -f 'panel-force-quit.c'; then $(CYGPATH_W) 'panel-force-quit.c'; else $(CYGPATH_W) '$(srcdir)/panel-force-quit.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-force-quit.Tpo $(DEPDIR)/mate_panel-panel-force-quit.Po
[email protected][email protected]@[email protected] source='panel-force-quit.c' object='mate_panel-panel-force-quit.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-force-quit.obj `if test -f 'panel-force-quit.c'; then $(CYGPATH_W) 'panel-force-quit.c'; else $(CYGPATH_W) '$(srcdir)/panel-force-quit.c'; fi`
+
+mate_panel-panel-lockdown.o: panel-lockdown.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-lockdown.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-lockdown.Tpo -c -o mate_panel-panel-lockdown.o `test -f 'panel-lockdown.c' || echo '$(srcdir)/'`panel-lockdown.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-lockdown.Tpo $(DEPDIR)/mate_panel-panel-lockdown.Po
[email protected][email protected]@[email protected] source='panel-lockdown.c' object='mate_panel-panel-lockdown.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-lockdown.o `test -f 'panel-lockdown.c' || echo '$(srcdir)/'`panel-lockdown.c
+
+mate_panel-panel-lockdown.obj: panel-lockdown.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-lockdown.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-lockdown.Tpo -c -o mate_panel-panel-lockdown.obj `if test -f 'panel-lockdown.c'; then $(CYGPATH_W) 'panel-lockdown.c'; else $(CYGPATH_W) '$(srcdir)/panel-lockdown.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-lockdown.Tpo $(DEPDIR)/mate_panel-panel-lockdown.Po
[email protected][email protected]@[email protected] source='panel-lockdown.c' object='mate_panel-panel-lockdown.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-lockdown.obj `if test -f 'panel-lockdown.c'; then $(CYGPATH_W) 'panel-lockdown.c'; else $(CYGPATH_W) '$(srcdir)/panel-lockdown.c'; fi`
+
+mate_panel-panel-addto.o: panel-addto.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-addto.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-addto.Tpo -c -o mate_panel-panel-addto.o `test -f 'panel-addto.c' || echo '$(srcdir)/'`panel-addto.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-addto.Tpo $(DEPDIR)/mate_panel-panel-addto.Po
[email protected][email protected]@[email protected] source='panel-addto.c' object='mate_panel-panel-addto.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-addto.o `test -f 'panel-addto.c' || echo '$(srcdir)/'`panel-addto.c
+
+mate_panel-panel-addto.obj: panel-addto.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-addto.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-addto.Tpo -c -o mate_panel-panel-addto.obj `if test -f 'panel-addto.c'; then $(CYGPATH_W) 'panel-addto.c'; else $(CYGPATH_W) '$(srcdir)/panel-addto.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-addto.Tpo $(DEPDIR)/mate_panel-panel-addto.Po
[email protected][email protected]@[email protected] source='panel-addto.c' object='mate_panel-panel-addto.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-addto.obj `if test -f 'panel-addto.c'; then $(CYGPATH_W) 'panel-addto.c'; else $(CYGPATH_W) '$(srcdir)/panel-addto.c'; fi`
+
+mate_panel-panel-ditem-editor.o: panel-ditem-editor.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-ditem-editor.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-ditem-editor.Tpo -c -o mate_panel-panel-ditem-editor.o `test -f 'panel-ditem-editor.c' || echo '$(srcdir)/'`panel-ditem-editor.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-ditem-editor.Tpo $(DEPDIR)/mate_panel-panel-ditem-editor.Po
[email protected][email protected]@[email protected] source='panel-ditem-editor.c' object='mate_panel-panel-ditem-editor.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-ditem-editor.o `test -f 'panel-ditem-editor.c' || echo '$(srcdir)/'`panel-ditem-editor.c
+
+mate_panel-panel-ditem-editor.obj: panel-ditem-editor.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-ditem-editor.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-ditem-editor.Tpo -c -o mate_panel-panel-ditem-editor.obj `if test -f 'panel-ditem-editor.c'; then $(CYGPATH_W) 'panel-ditem-editor.c'; else $(CYGPATH_W) '$(srcdir)/panel-ditem-editor.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-ditem-editor.Tpo $(DEPDIR)/mate_panel-panel-ditem-editor.Po
[email protected][email protected]@[email protected] source='panel-ditem-editor.c' object='mate_panel-panel-ditem-editor.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-ditem-editor.obj `if test -f 'panel-ditem-editor.c'; then $(CYGPATH_W) 'panel-ditem-editor.c'; else $(CYGPATH_W) '$(srcdir)/panel-ditem-editor.c'; fi`
+
+mate_panel-panel-modules.o: panel-modules.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-modules.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-modules.Tpo -c -o mate_panel-panel-modules.o `test -f 'panel-modules.c' || echo '$(srcdir)/'`panel-modules.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-modules.Tpo $(DEPDIR)/mate_panel-panel-modules.Po
[email protected][email protected]@[email protected] source='panel-modules.c' object='mate_panel-panel-modules.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-modules.o `test -f 'panel-modules.c' || echo '$(srcdir)/'`panel-modules.c
+
+mate_panel-panel-modules.obj: panel-modules.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-modules.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-modules.Tpo -c -o mate_panel-panel-modules.obj `if test -f 'panel-modules.c'; then $(CYGPATH_W) 'panel-modules.c'; else $(CYGPATH_W) '$(srcdir)/panel-modules.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-modules.Tpo $(DEPDIR)/mate_panel-panel-modules.Po
[email protected][email protected]@[email protected] source='panel-modules.c' object='mate_panel-panel-modules.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-modules.obj `if test -f 'panel-modules.c'; then $(CYGPATH_W) 'panel-modules.c'; else $(CYGPATH_W) '$(srcdir)/panel-modules.c'; fi`
+
+mate_panel-mate-panel-applet-info.o: mate-panel-applet-info.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-mate-panel-applet-info.o -MD -MP -MF $(DEPDIR)/mate_panel-mate-panel-applet-info.Tpo -c -o mate_panel-mate-panel-applet-info.o `test -f 'mate-panel-applet-info.c' || echo '$(srcdir)/'`mate-panel-applet-info.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-mate-panel-applet-info.Tpo $(DEPDIR)/mate_panel-mate-panel-applet-info.Po
[email protected][email protected]@[email protected] source='mate-panel-applet-info.c' object='mate_panel-mate-panel-applet-info.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-mate-panel-applet-info.o `test -f 'mate-panel-applet-info.c' || echo '$(srcdir)/'`mate-panel-applet-info.c
+
+mate_panel-mate-panel-applet-info.obj: mate-panel-applet-info.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-mate-panel-applet-info.obj -MD -MP -MF $(DEPDIR)/mate_panel-mate-panel-applet-info.Tpo -c -o mate_panel-mate-panel-applet-info.obj `if test -f 'mate-panel-applet-info.c'; then $(CYGPATH_W) 'mate-panel-applet-info.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applet-info.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-mate-panel-applet-info.Tpo $(DEPDIR)/mate_panel-mate-panel-applet-info.Po
[email protected][email protected]@[email protected] source='mate-panel-applet-info.c' object='mate_panel-mate-panel-applet-info.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-mate-panel-applet-info.obj `if test -f 'mate-panel-applet-info.c'; then $(CYGPATH_W) 'mate-panel-applet-info.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applet-info.c'; fi`
+
+mate_panel-panel-reset.o: panel-reset.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-reset.o -MD -MP -MF $(DEPDIR)/mate_panel-panel-reset.Tpo -c -o mate_panel-panel-reset.o `test -f 'panel-reset.c' || echo '$(srcdir)/'`panel-reset.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-reset.Tpo $(DEPDIR)/mate_panel-panel-reset.Po
[email protected][email protected]@[email protected] source='panel-reset.c' object='mate_panel-panel-reset.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-reset.o `test -f 'panel-reset.c' || echo '$(srcdir)/'`panel-reset.c
+
+mate_panel-panel-reset.obj: panel-reset.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel-panel-reset.obj -MD -MP -MF $(DEPDIR)/mate_panel-panel-reset.Tpo -c -o mate_panel-panel-reset.obj `if test -f 'panel-reset.c'; then $(CYGPATH_W) 'panel-reset.c'; else $(CYGPATH_W) '$(srcdir)/panel-reset.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel-panel-reset.Tpo $(DEPDIR)/mate_panel-panel-reset.Po
[email protected][email protected]@[email protected] source='panel-reset.c' object='mate_panel-panel-reset.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel-panel-reset.obj `if test -f 'panel-reset.c'; then $(CYGPATH_W) 'panel-reset.c'; else $(CYGPATH_W) '$(srcdir)/panel-reset.c'; fi`
+
+mate_panel_test_applets-panel-modules.o: panel-modules.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-panel-modules.o -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-panel-modules.Tpo -c -o mate_panel_test_applets-panel-modules.o `test -f 'panel-modules.c' || echo '$(srcdir)/'`panel-modules.c
+[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-panel-modules.Tpo $(DEPDIR)/mate_panel_test_applets-panel-modules.Po
[email protected][email protected]@[email protected] source='panel-modules.c' object='mate_panel_test_applets-panel-modules.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-panel-modules.o `test -f 'panel-modules.c' || echo '$(srcdir)/'`panel-modules.c
+
+mate_panel_test_applets-panel-modules.obj: panel-modules.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-panel-modules.obj -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-panel-modules.Tpo -c -o mate_panel_test_applets-panel-modules.obj `if test -f 'panel-modules.c'; then $(CYGPATH_W) 'panel-modules.c'; else $(CYGPATH_W) '$(srcdir)/panel-modules.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-panel-modules.Tpo $(DEPDIR)/mate_panel_test_applets-panel-modules.Po
[email protected][email protected]@[email protected] source='panel-modules.c' object='mate_panel_test_applets-panel-modules.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-panel-modules.obj `if test -f 'panel-modules.c'; then $(CYGPATH_W) 'panel-modules.c'; else $(CYGPATH_W) '$(srcdir)/panel-modules.c'; fi`
+
+mate_panel_test_applets-mate-panel-applet-info.o: mate-panel-applet-info.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-mate-panel-applet-info.o -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-mate-panel-applet-info.Tpo -c -o mate_panel_test_applets-mate-panel-applet-info.o `test -f 'mate-panel-applet-info.c' || echo '$(srcdir)/'`mate-panel-applet-info.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-mate-panel-applet-info.Tpo $(DEPDIR)/mate_panel_test_applets-mate-panel-applet-info.Po
[email protected][email protected]@[email protected] source='mate-panel-applet-info.c' object='mate_panel_test_applets-mate-panel-applet-info.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-mate-panel-applet-info.o `test -f 'mate-panel-applet-info.c' || echo '$(srcdir)/'`mate-panel-applet-info.c
+
+mate_panel_test_applets-mate-panel-applet-info.obj: mate-panel-applet-info.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-mate-panel-applet-info.obj -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-mate-panel-applet-info.Tpo -c -o mate_panel_test_applets-mate-panel-applet-info.obj `if test -f 'mate-panel-applet-info.c'; then $(CYGPATH_W) 'mate-panel-applet-info.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applet-info.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-mate-panel-applet-info.Tpo $(DEPDIR)/mate_panel_test_applets-mate-panel-applet-info.Po
[email protected][email protected]@[email protected] source='mate-panel-applet-info.c' object='mate_panel_test_applets-mate-panel-applet-info.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-mate-panel-applet-info.obj `if test -f 'mate-panel-applet-info.c'; then $(CYGPATH_W) 'mate-panel-applet-info.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applet-info.c'; fi`
+
+mate_panel_test_applets-mate-panel-applets-manager.o: mate-panel-applets-manager.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-mate-panel-applets-manager.o -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-mate-panel-applets-manager.Tpo -c -o mate_panel_test_applets-mate-panel-applets-manager.o `test -f 'mate-panel-applets-manager.c' || echo '$(srcdir)/'`mate-panel-applets-manager.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-mate-panel-applets-manager.Tpo $(DEPDIR)/mate_panel_test_applets-mate-panel-applets-manager.Po
[email protected][email protected]@[email protected] source='mate-panel-applets-manager.c' object='mate_panel_test_applets-mate-panel-applets-manager.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-mate-panel-applets-manager.o `test -f 'mate-panel-applets-manager.c' || echo '$(srcdir)/'`mate-panel-applets-manager.c
+
+mate_panel_test_applets-mate-panel-applets-manager.obj: mate-panel-applets-manager.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-mate-panel-applets-manager.obj -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-mate-panel-applets-manager.Tpo -c -o mate_panel_test_applets-mate-panel-applets-manager.obj `if test -f 'mate-panel-applets-manager.c'; then $(CYGPATH_W) 'mate-panel-applets-manager.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applets-manager.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-mate-panel-applets-manager.Tpo $(DEPDIR)/mate_panel_test_applets-mate-panel-applets-manager.Po
[email protected][email protected]@[email protected] source='mate-panel-applets-manager.c' object='mate_panel_test_applets-mate-panel-applets-manager.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-mate-panel-applets-manager.obj `if test -f 'mate-panel-applets-manager.c'; then $(CYGPATH_W) 'mate-panel-applets-manager.c'; else $(CYGPATH_W) '$(srcdir)/mate-panel-applets-manager.c'; fi`
+
+mate_panel_test_applets-panel-marshal.o: panel-marshal.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-panel-marshal.o -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-panel-marshal.Tpo -c -o mate_panel_test_applets-panel-marshal.o `test -f 'panel-marshal.c' || echo '$(srcdir)/'`panel-marshal.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-panel-marshal.Tpo $(DEPDIR)/mate_panel_test_applets-panel-marshal.Po
[email protected][email protected]@[email protected] source='panel-marshal.c' object='mate_panel_test_applets-panel-marshal.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-panel-marshal.o `test -f 'panel-marshal.c' || echo '$(srcdir)/'`panel-marshal.c
+
+mate_panel_test_applets-panel-marshal.obj: panel-marshal.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-panel-marshal.obj -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-panel-marshal.Tpo -c -o mate_panel_test_applets-panel-marshal.obj `if test -f 'panel-marshal.c'; then $(CYGPATH_W) 'panel-marshal.c'; else $(CYGPATH_W) '$(srcdir)/panel-marshal.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-panel-marshal.Tpo $(DEPDIR)/mate_panel_test_applets-panel-marshal.Po
[email protected][email protected]@[email protected] source='panel-marshal.c' object='mate_panel_test_applets-panel-marshal.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-panel-marshal.obj `if test -f 'panel-marshal.c'; then $(CYGPATH_W) 'panel-marshal.c'; else $(CYGPATH_W) '$(srcdir)/panel-marshal.c'; fi`
+
+mate_panel_test_applets-panel-test-applets.o: panel-test-applets.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-panel-test-applets.o -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-panel-test-applets.Tpo -c -o mate_panel_test_applets-panel-test-applets.o `test -f 'panel-test-applets.c' || echo '$(srcdir)/'`panel-test-applets.c
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-panel-test-applets.Tpo $(DEPDIR)/mate_panel_test_applets-panel-test-applets.Po
[email protected][email protected]@[email protected] source='panel-test-applets.c' object='mate_panel_test_applets-panel-test-applets.o' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-panel-test-applets.o `test -f 'panel-test-applets.c' || echo '$(srcdir)/'`panel-test-applets.c
+
+mate_panel_test_applets-panel-test-applets.obj: panel-test-applets.c
[email protected][email protected] $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mate_panel_test_applets-panel-test-applets.obj -MD -MP -MF $(DEPDIR)/mate_panel_test_applets-panel-test-applets.Tpo -c -o mate_panel_test_applets-panel-test-applets.obj `if test -f 'panel-test-applets.c'; then $(CYGPATH_W) 'panel-test-applets.c'; else $(CYGPATH_W) '$(srcdir)/panel-test-applets.c'; fi`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/mate_panel_test_applets-panel-test-applets.Tpo $(DEPDIR)/mate_panel_test_applets-panel-test-applets.Po
[email protected][email protected]@[email protected] source='panel-test-applets.c' object='mate_panel_test_applets-panel-test-applets.obj' libtool=no @[email protected]
[email protected][email protected] $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mate_panel_test_applets_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mate_panel_test_applets-panel-test-applets.obj `if test -f 'panel-test-applets.c'; then $(CYGPATH_W) 'panel-test-applets.c'; else $(CYGPATH_W) '$(srcdir)/panel-test-applets.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-desktopDATA: $(desktop_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)"
+ @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \
+ done
+
+uninstall-desktopDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(desktopdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(desktopdir)" && rm -f $$files
+install-entriesDATA: $(entries_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(entriesdir)" || $(MKDIR_P) "$(DESTDIR)$(entriesdir)"
+ @list='$(entries_DATA)'; test -n "$(entriesdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(entriesdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(entriesdir)" || exit $$?; \
+ done
+
+uninstall-entriesDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(entries_DATA)'; test -n "$(entriesdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(entriesdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(entriesdir)" && rm -f $$files
+install-rcDATA: $(rc_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(rcdir)" || $(MKDIR_P) "$(DESTDIR)$(rcdir)"
+ @list='$(rc_DATA)'; test -n "$(rcdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rcdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(rcdir)" || exit $$?; \
+ done
+
+uninstall-rcDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(rc_DATA)'; test -n "$(rcdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(rcdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(rcdir)" && rm -f $$files
+install-schemasDATA: $(schemas_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)"
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemasdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \
+ done
+
+uninstall-schemasDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(schemasdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(schemasdir)" && rm -f $$files
+install-uiDATA: $(ui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)"
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \
+ done
+
+uninstall-uiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(uidir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo [email protected] | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "[email protected]" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo [email protected] | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "[email protected]" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "[email protected]" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(entriesdir)" "$(DESTDIR)$(rcdir)" "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(uidir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-data-local install-desktopDATA \
+ install-entriesDATA install-rcDATA install-schemasDATA \
+ install-uiDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-libexecSCRIPTS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-desktopDATA \
+ uninstall-entriesDATA uninstall-libexecSCRIPTS uninstall-local \
+ uninstall-rcDATA uninstall-schemasDATA uninstall-uiDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ ctags-recursive install install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool ctags ctags-recursive dist-hook \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-data-local \
+ install-desktopDATA install-dvi install-dvi-am \
+ install-entriesDATA install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-libexecSCRIPTS install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-rcDATA install-schemasDATA \
+ install-strip install-uiDATA installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS uninstall-desktopDATA \
+ uninstall-entriesDATA uninstall-libexecSCRIPTS uninstall-local \
+ uninstall-rcDATA uninstall-schemasDATA uninstall-uiDATA
+
+
+mate-panel-add: mate-panel-add.in Makefile
+ $(AM_V_GEN)sed \
+ -e s!\@PYTHON\@[email protected]@! \
+ -e s!\@MATE_PANEL_APPLETS_DIR\@!$(appletsdir)! \
+ $(AM_V_at)chmod a+x [email protected]
+
+panel-marshal.h: panel-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) $< --header --prefix=panel_marshal > [email protected]
+
+panel-marshal.c: panel-marshal.list $(GLIB_GENMARSHAL)
+ $(AM_V_GEN)echo "#include \"panel-marshal.h\"" > [email protected] && \
+ $(GLIB_GENMARSHAL) $< --body --prefix=panel_marshal >> [email protected]
+
+panel-typebuiltins.c: @[email protected] $(panel_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"panel-typebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@[email protected]\" */" \
+ --fprod "\n#include \"@[email protected]\"\n" \
+ --vhead "static const GEnumValue [email protected][email protected]_values[] = {" \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\[email protected][email protected]_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_enum_register_static (\"@[email protected]\", [email protected][email protected]_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(panel_enum_headers) > [email protected]
+
+panel-typebuiltins.h: @[email protected] $(panel_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#ifndef __PANEL_TYPEBUILTINS_H__\n" \
+ --fhead "#define __PANEL_TYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \
+ --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \
+ --ftail "#endif /* __PANEL_TYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @[email protected] --- */" \
+ --eprod "#define [email protected]@ @[email protected]_get_type()\n" \
+ --eprod "GType @[email protected]_get_type (void);\n" \
+ $(panel_enum_headers) > [email protected]
+
+
+
[email protected][email protected] if test -z "$(DESTDIR)" ; then \
[email protected][email protected] for p in $(schemas_DATA) ; do \
[email protected][email protected] MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/mate-panel/$$p ; \
[email protected][email protected] $(MATECONFTOOL) --direct --config-source=$(MATECONF_SCHEMA_CONFIG_SOURCE) --load $(srcdir)/panel-default-setup.entries ; \
[email protected][email protected] $(MATECONFTOOL) --direct --config-source=$(MATECONF_SCHEMA_CONFIG_SOURCE) --load $(srcdir)/panel-default-setup.entries /apps/panel ; \
[email protected][email protected] for p in $(schema_DATA) ; do \
[email protected][email protected] MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/ngome-panel/$$p ; \
+
+dist-hook:
+ cd $(distdir) ; rm -f $(CLEANFILES)
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-panel/applet.c b/mate-panel/applet.c
new file mode 100644
index 00000000..e20e1faa
--- /dev/null
+++ b/mate-panel/applet.c
@@ -0,0 +1,1449 @@
+/* Mate panel: general applet functionality
+ * (C) 1997 the Free Software Foundation
+ *
+ * Authors: George Lebl
+ * Federico Mena
+ * Miguel de Icaza
+ */
+
+#include <config.h>
+#include <string.h>
+#include <signal.h>
+#include <unistd.h>
+
+#include <glib/gi18n.h>
+#include <gdk/gdkx.h>
+
+#include <libpanel-util/panel-show.h>
+
+#include "button-widget.h"
+#include "drawer.h"
+#include "launcher.h"
+#include "panel-addto.h"
+#include "panel-mateconf.h"
+#include "panel-config-global.h"
+#include "mate-panel-applet-frame.h"
+#include "panel-action-button.h"
+#include "panel-menu-bar.h"
+#include "panel-separator.h"
+#include "panel-compatibility.h"
+#include "panel-toplevel.h"
+#include "panel-util.h"
+#include "panel-profile.h"
+#include "panel-menu-button.h"
+#include "panel-globals.h"
+#include "panel-properties-dialog.h"
+#include "panel-lockdown.h"
+
+#define SMALL_ICON_SIZE 20
+
+static GSList *registered_applets = NULL;
+static GSList *queued_position_saves = NULL;
+static guint queued_position_source = 0;
+
+
+static inline PanelWidget *
+mate_panel_applet_get_panel_widget (AppletInfo *info)
+{
+ return PANEL_WIDGET (gtk_widget_get_parent (info->widget));
+}
+
+static void
+mate_panel_applet_set_dnd_enabled (AppletInfo *info,
+ gboolean dnd_enabled)
+{
+ switch (info->type) {
+ case PANEL_OBJECT_DRAWER:
+ panel_drawer_set_dnd_enabled (info->data, dnd_enabled);
+ break;
+ case PANEL_OBJECT_MENU:
+ panel_menu_button_set_dnd_enabled (PANEL_MENU_BUTTON (info->widget),
+ dnd_enabled);
+ break;
+ case PANEL_OBJECT_LAUNCHER:
+ panel_launcher_set_dnd_enabled (info->data, dnd_enabled);
+ break;
+ case PANEL_OBJECT_APPLET:
+ break;
+ case PANEL_OBJECT_LOGOUT:
+ case PANEL_OBJECT_LOCK:
+ case PANEL_OBJECT_ACTION:
+ panel_action_button_set_dnd_enabled (PANEL_ACTION_BUTTON (info->widget),
+ dnd_enabled);
+ break;
+ case PANEL_OBJECT_MENU_BAR:
+ case PANEL_OBJECT_SEPARATOR:
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+}
+
+gboolean
+mate_panel_applet_toggle_locked (AppletInfo *info)
+{
+ PanelWidget *panel_widget;
+ gboolean locked;
+
+ panel_widget = mate_panel_applet_get_panel_widget (info);
+
+ locked = panel_widget_toggle_applet_locked (panel_widget, info->widget);
+
+ mate_panel_applet_save_position (info, info->id, TRUE);
+ mate_panel_applet_set_dnd_enabled (info, !locked);
+
+ return locked;
+}
+
+static void
+mate_panel_applet_lock (GtkCheckMenuItem *menuitem,
+ AppletInfo *info)
+{
+ gboolean locked;
+
+ locked = mate_panel_applet_toggle_locked (info);
+
+ gtk_check_menu_item_set_active (menuitem, locked);
+
+ if (info->move_item)
+ gtk_widget_set_sensitive (info->move_item, !locked);
+}
+
+static void
+move_applet_callback (GtkWidget *widget, AppletInfo *info)
+{
+ GtkWidget *parent;
+ PanelWidget *panel;
+
+ g_return_if_fail (info != NULL);
+ g_return_if_fail (info->widget != NULL);
+
+ parent = gtk_widget_get_parent (info->widget);
+
+ g_return_if_fail (parent != NULL);
+ g_return_if_fail (PANEL_IS_WIDGET (parent));
+
+ panel = PANEL_WIDGET (parent);
+
+ panel_widget_applet_drag_start (panel, info->widget,
+ PW_DRAG_OFF_CENTER,
+ GDK_CURRENT_TIME);
+}
+
+/* permanently remove an applet - all non-permanent
+ * cleanups should go in mate_panel_applet_destroy()
+ */
+void
+mate_panel_applet_clean (AppletInfo *info)
+{
+ g_return_if_fail (info != NULL);
+
+ if (info->type == PANEL_OBJECT_LAUNCHER)
+ panel_launcher_delete (info->data);
+
+ if (info->widget) {
+ GtkWidget *widget = info->widget;
+
+ info->widget = NULL;
+ gtk_widget_destroy (widget);
+ }
+}
+
+static void
+mate_panel_applet_recreate_menu (AppletInfo *info)
+{
+ GList *l;
+
+ if (!info->menu)
+ return;
+
+ for (l = info->user_menu; l; l = l->next) {
+ AppletUserMenu *menu = l->data;
+
+ menu->menuitem =NULL;
+ menu->submenu =NULL;
+ }
+
+ g_object_unref (info->menu);
+ info->menu = mate_panel_applet_create_menu (info);
+}
+
+static void
+mate_panel_applet_locked_change_notify (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ GtkWidget *applet)
+{
+ MateConfValue *value;
+ gboolean locked;
+ gboolean applet_locked;
+ AppletInfo *info;
+ PanelWidget *panel_widget;
+
+ g_assert (applet != NULL);
+
+ info = (AppletInfo *) g_object_get_data (G_OBJECT (applet),
+ "applet_info");
+ if (info == NULL)
+ return;
+
+ value = mateconf_entry_get_value (entry);
+ if (value == NULL || value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ locked = mateconf_value_get_bool (value);
+
+ panel_widget = mate_panel_applet_get_panel_widget (info);
+ applet_locked = panel_widget_get_applet_locked (panel_widget,
+ info->widget);
+
+ if ((locked && applet_locked) || !(locked || applet_locked))
+ return;
+
+ mate_panel_applet_toggle_locked (info);
+
+ if (info->type == PANEL_OBJECT_APPLET)
+ mate_panel_applet_frame_sync_menu_state (MATE_PANEL_APPLET_FRAME (info->widget));
+ else
+ mate_panel_applet_recreate_menu (info);
+}
+
+static void
+applet_remove_callback (GtkWidget *widget,
+ AppletInfo *info)
+{
+
+ if (info->type == PANEL_OBJECT_DRAWER)
+ drawer_query_deletion (info->data);
+ else
+ panel_profile_delete_object (info);
+}
+
+static inline GdkScreen *
+applet_user_menu_get_screen (AppletUserMenu *menu)
+{
+ PanelWidget *panel_widget;
+
+ panel_widget = mate_panel_applet_get_panel_widget (menu->info);
+
+ return gtk_window_get_screen (GTK_WINDOW (panel_widget->toplevel));
+}
+
+static void
+applet_callback_callback (GtkWidget *widget,
+ AppletUserMenu *menu)
+{
+ GdkScreen *screen;
+
+ g_return_if_fail (menu->info != NULL);
+
+ screen = applet_user_menu_get_screen (menu);
+
+ switch (menu->info->type) {
+ case PANEL_OBJECT_LAUNCHER:
+ if (!strcmp (menu->name, "launch"))
+ launcher_launch (menu->info->data, widget);
+ else if (!strcmp (menu->name, "properties"))
+ launcher_properties (menu->info->data);
+ break;
+ case PANEL_OBJECT_DRAWER:
+ if (strcmp (menu->name, "add") == 0) {
+ Drawer *drawer = menu->info->data;
+
+ panel_addto_present (GTK_MENU_ITEM (widget),
+ panel_toplevel_get_panel_widget (drawer->toplevel));
+ } else if (strcmp (menu->name, "properties") == 0) {
+ Drawer *drawer = menu->info->data;
+
+ panel_properties_dialog_present (drawer->toplevel);
+ } else if (strcmp (menu->name, "help") == 0) {
+ panel_show_help (screen,
+ "user-guide", "gospanel-18", NULL);
+ }
+ break;
+ case PANEL_OBJECT_MENU:
+ panel_menu_button_invoke_menu (
+ PANEL_MENU_BUTTON (menu->info->widget), menu->name);
+ break;
+ case PANEL_OBJECT_ACTION:
+ case PANEL_OBJECT_LOGOUT:
+ case PANEL_OBJECT_LOCK:
+ panel_action_button_invoke_menu (
+ PANEL_ACTION_BUTTON (menu->info->widget), menu->name);
+ break;
+ case PANEL_OBJECT_MENU_BAR:
+ panel_menu_bar_invoke_menu (
+ PANEL_MENU_BAR (menu->info->widget), menu->name);
+ break;
+
+ case PANEL_OBJECT_APPLET:
+ /*
+ * Applet's menu's are handled differently
+ */
+ break;
+ case PANEL_OBJECT_SEPARATOR:
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+applet_menu_show (GtkWidget *w,
+ AppletInfo *info)
+{
+ PanelWidget *panel_widget;
+
+ panel_widget = mate_panel_applet_get_panel_widget (info);
+
+ panel_toplevel_push_autohide_disabler (panel_widget->toplevel);
+}
+
+
+static void
+applet_menu_deactivate (GtkWidget *w,
+ AppletInfo *info)
+{
+ PanelWidget *panel_widget;
+
+ panel_widget = mate_panel_applet_get_panel_widget (info);
+
+ panel_toplevel_pop_autohide_disabler (panel_widget->toplevel);
+}
+
+AppletUserMenu *
+mate_panel_applet_get_callback (GList *user_menu,
+ const char *name)
+{
+ GList *l;
+
+ for (l = user_menu; l; l = l->next) {
+ AppletUserMenu *menu = l->data;
+
+ if (strcmp (menu->name, name) == 0)
+ return menu;
+ }
+
+ return NULL;
+}
+
+void
+mate_panel_applet_add_callback (AppletInfo *info,
+ const char *callback_name,
+ const char *stock_item,
+ const char *menuitem_text,
+ CallbackEnabledFunc is_enabled_func)
+{
+ AppletUserMenu *menu;
+
+ g_return_if_fail (info != NULL);
+ g_return_if_fail (mate_panel_applet_get_callback (info->user_menu,
+ callback_name) == NULL);
+
+ menu = g_new0 (AppletUserMenu, 1);
+ menu->name = g_strdup (callback_name);
+ menu->stock_item = g_strdup (stock_item);
+ menu->text = g_strdup (menuitem_text);
+ menu->is_enabled_func = is_enabled_func;
+ menu->sensitive = TRUE;
+ menu->info = info;
+ menu->menuitem = NULL;
+ menu->submenu = NULL;
+
+ info->user_menu = g_list_append (info->user_menu, menu);
+
+ mate_panel_applet_recreate_menu (info);
+}
+
+static void
+setup_an_item (AppletUserMenu *menu,
+ GtkWidget *submenu,
+ int is_submenu)
+{
+ GtkWidget *image = NULL;
+
+ menu->menuitem = gtk_image_menu_item_new_with_mnemonic (menu->text);
+ if (menu->stock_item && menu->stock_item [0]) {
+ image = gtk_image_new_from_stock (menu->stock_item,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu->menuitem),
+ image);
+ }
+ gtk_widget_show (menu->menuitem);
+
+ g_signal_connect (G_OBJECT (menu->menuitem), "destroy",
+ G_CALLBACK (gtk_widget_destroyed),
+ &menu->menuitem);
+
+ if(submenu)
+ gtk_menu_shell_append (GTK_MENU_SHELL (submenu), menu->menuitem);
+
+ /*if an item not a submenu*/
+ if (!is_submenu) {
+ g_signal_connect (menu->menuitem, "activate",
+ G_CALLBACK (applet_callback_callback),
+ menu);
+ g_signal_connect (submenu, "destroy",
+ G_CALLBACK (gtk_widget_destroyed),
+ &menu->submenu);
+ /* if the item is a submenu and doesn't have it's menu
+ created yet*/
+ } else if (!menu->submenu) {
+ menu->submenu = gtk_menu_new ();
+ }
+
+ if(menu->submenu) {
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu->menuitem),
+ menu->submenu);
+ g_signal_connect (G_OBJECT (menu->submenu), "destroy",
+ G_CALLBACK (gtk_widget_destroyed),
+ &menu->submenu);
+ }
+
+ gtk_widget_set_sensitive(menu->menuitem,menu->sensitive);
+}
+
+static void
+add_to_submenus (AppletInfo *info,
+ const char *path,
+ const char *name,
+ AppletUserMenu *menu,
+ GtkWidget *submenu,
+ GList *user_menu)
+{
+ char *n = g_strdup (name);
+ char *p = strchr (n, '/');
+ char *t;
+ AppletUserMenu *s_menu;
+
+ /*this is the last one*/
+ if (p == NULL) {
+ g_free (n);
+ setup_an_item (menu, submenu, FALSE);
+ return;
+ }
+
+ /*this is the last one and we are a submenu, we have already been
+ set up*/
+ if(p==(n + strlen(n) - 1)) {
+ g_free(n);
+ return;
+ }
+
+ *p = '\0';
+ p++;
+
+ t = g_strconcat (path, n, "/", NULL);
+ s_menu = mate_panel_applet_get_callback (user_menu, t);
+ /*the user did not give us this sub menu, whoops, will create an empty
+ one then*/
+ if (s_menu == NULL) {
+ s_menu = g_new0 (AppletUserMenu,1);
+ s_menu->name = g_strdup (t);
+ s_menu->stock_item = NULL;
+ s_menu->text = g_strdup (_("???"));
+ s_menu->sensitive = TRUE;
+ s_menu->info = info;
+ s_menu->menuitem = NULL;
+ s_menu->submenu = NULL;
+ info->user_menu = g_list_append (info->user_menu,s_menu);
+ user_menu = info->user_menu;
+ }
+
+ if (s_menu->submenu == NULL) {
+ s_menu->submenu = gtk_menu_new ();
+ /*a more elegant way to do this should be done
+ when I don't want to go to sleep */
+ if (s_menu->menuitem != NULL) {
+ gtk_widget_destroy (s_menu->menuitem);
+ s_menu->menuitem = NULL;
+ }
+ }
+ if (s_menu->menuitem == NULL)
+ setup_an_item (s_menu, submenu, TRUE);
+
+ add_to_submenus (info, t, p, menu, s_menu->submenu, user_menu);
+
+ g_free(t);
+ g_free(n);
+}
+
+GtkWidget *
+mate_panel_applet_create_menu (AppletInfo *info)
+{
+ GtkWidget *menu;
+ GtkWidget *menuitem;
+ GList *l;
+ PanelWidget *panel_widget;
+ gboolean added_anything = FALSE;
+
+ panel_widget = mate_panel_applet_get_panel_widget (info);
+
+ menu = g_object_ref_sink (gtk_menu_new ());
+
+ /* connect the show & deactivate signal, so that we can "disallow" and
+ * "re-allow" autohide when the menu is shown/deactivated.
+ */
+ g_signal_connect (menu, "show",
+ G_CALLBACK (applet_menu_show), info);
+ g_signal_connect (menu, "deactivate",
+ G_CALLBACK (applet_menu_deactivate), info);
+
+ for (l = info->user_menu; l; l = l->next) {
+ AppletUserMenu *user_menu = l->data;
+
+ if (user_menu->is_enabled_func && !user_menu->is_enabled_func ())
+ continue;
+
+ add_to_submenus (info, "", user_menu->name, user_menu,
+ menu, info->user_menu);
+
+ added_anything = TRUE;
+ }
+
+ if (!panel_lockdown_get_locked_down ()) {
+ GtkWidget *image;
+ gboolean locked;
+ gboolean lockable;
+ gboolean movable;
+ gboolean removable;
+
+ lockable = mate_panel_applet_lockable (info);
+ movable = mate_panel_applet_can_freely_move (info);
+ removable = panel_profile_id_lists_are_writable ();
+
+ locked = panel_widget_get_applet_locked (panel_widget, info->widget);
+
+ if (added_anything) {
+ menuitem = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_show (menuitem);
+ }
+
+ menuitem = gtk_image_menu_item_new_with_mnemonic (_("_Remove From Panel"));
+ image = gtk_image_new_from_stock (GTK_STOCK_REMOVE,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem),
+ image);
+ g_signal_connect (menuitem, "activate",
+ G_CALLBACK (applet_remove_callback), info);
+ gtk_widget_show (menuitem);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_set_sensitive (menuitem, (!locked || lockable) && removable);
+
+ menuitem = gtk_menu_item_new_with_mnemonic (_("_Move"));
+ g_signal_connect (menuitem, "activate",
+ G_CALLBACK (move_applet_callback), info);
+ gtk_widget_show (menuitem);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_set_sensitive (menuitem, !locked && movable);
+
+ g_assert (info->move_item == NULL);
+
+ info->move_item = menuitem;
+ g_object_add_weak_pointer (G_OBJECT (menuitem),
+ (gpointer *) &info->move_item);
+
+ menuitem = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_show (menuitem);
+
+ menuitem = gtk_check_menu_item_new_with_mnemonic (_("Loc_k To Panel"));
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem),
+ locked);
+ g_signal_connect (menuitem, "toggled",
+ G_CALLBACK (mate_panel_applet_lock), info);
+ gtk_widget_show (menuitem);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_set_sensitive (menuitem, lockable);
+
+ added_anything = TRUE;
+ }
+
+ if ( ! added_anything) {
+ g_object_unref (menu);
+ return NULL;
+ }
+
+ return menu;
+}
+
+void
+mate_panel_applet_menu_set_recurse (GtkMenu *menu,
+ const gchar *key,
+ gpointer data)
+{
+ GList *children;
+ GList *l;
+
+ g_object_set_data (G_OBJECT (menu), key, data);
+
+ children = gtk_container_get_children (GTK_CONTAINER (menu));
+
+ for (l = children; l; l = l->next) {
+ GtkWidget *submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (l->data));
+
+ if (submenu)
+ mate_panel_applet_menu_set_recurse (
+ GTK_MENU (submenu), key, data);
+ }
+
+ g_list_free (children);
+}
+
+void
+mate_panel_applet_position_menu (GtkMenu *menu,
+ int *x,
+ int *y,
+ gboolean *push_in,
+ GtkWidget *applet)
+{
+ GtkAllocation allocation;
+ GtkRequisition requisition;
+ GdkScreen *screen;
+ GtkWidget *parent;
+ int menu_x = 0;
+ int menu_y = 0;
+ int pointer_x;
+ int pointer_y;
+
+ parent = gtk_widget_get_parent (applet);
+
+ g_return_if_fail (PANEL_IS_WIDGET (parent));
+
+ screen = gtk_widget_get_screen (applet);
+
+ gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
+
+ gdk_window_get_origin (gtk_widget_get_window (applet), &menu_x, &menu_y);
+ gtk_widget_get_pointer (applet, &pointer_x, &pointer_y);
+
+ gtk_widget_get_allocation (applet, &allocation);
+
+ if (!gtk_widget_get_has_window (applet)) {
+ menu_x += allocation.x;
+ menu_y += allocation.y;
+ }
+
+ if (PANEL_WIDGET (parent)->orient == GTK_ORIENTATION_HORIZONTAL) {
+ if (gtk_widget_get_direction (GTK_WIDGET (menu)) != GTK_TEXT_DIR_RTL) {
+ if (pointer_x < allocation.width &&
+ requisition.width < pointer_x)
+ menu_x += MIN (pointer_x,
+ allocation.width - requisition.width);
+ } else {
+ menu_x += allocation.width - requisition.width;
+ if (pointer_x > 0 && pointer_x < allocation.width &&
+ pointer_x < allocation.width - requisition.width) {
+ menu_x -= MIN (allocation.width - pointer_x,
+ allocation.width - requisition.width);
+ }
+ }
+ menu_x = MIN (menu_x, gdk_screen_get_width (screen) - requisition.width);
+
+ if (menu_y > gdk_screen_get_height (screen) / 2)
+ menu_y -= requisition.height;
+ else
+ menu_y += allocation.height;
+ } else {
+ if (pointer_y < allocation.height &&
+ requisition.height < pointer_y)
+ menu_y += MIN (pointer_y, allocation.height - requisition.height);
+ menu_y = MIN (menu_y, gdk_screen_get_height (screen) - requisition.height);
+
+ if (menu_x > gdk_screen_get_width (screen) / 2)
+ menu_x -= requisition.width;
+ else
+ menu_x += allocation.width;
+ }
+
+ *x = menu_x;
+ *y = menu_y;
+ *push_in = TRUE;
+}
+
+static void
+applet_show_menu (AppletInfo *info,
+ GdkEventButton *event)
+{
+ PanelWidget *panel_widget;
+
+ g_return_if_fail (info != NULL);
+
+ panel_widget = mate_panel_applet_get_panel_widget (info);
+
+ if (info->menu == NULL)
+ info->menu = mate_panel_applet_create_menu (info);
+
+ if (info->menu == NULL)
+ return;
+
+ mate_panel_applet_menu_set_recurse (GTK_MENU (info->menu),
+ "menu_panel",
+ panel_widget);
+
+ gtk_menu_set_screen (GTK_MENU (info->menu),
+ gtk_window_get_screen (GTK_WINDOW (panel_widget->toplevel)));
+
+ if (!gtk_widget_get_realized (info->menu))
+ gtk_widget_show (info->menu);
+
+ gtk_menu_popup (GTK_MENU (info->menu),
+ NULL,
+ NULL,
+ (GtkMenuPositionFunc) mate_panel_applet_position_menu,
+ info->widget,
+ event->button,
+ event->time);
+}
+
+static gboolean
+applet_do_popup_menu (GtkWidget *widget,
+ GdkEventButton *event,
+ AppletInfo *info)
+{
+ if (mate_panel_applet_is_in_drag ())
+ return FALSE;
+
+ if (info->type == PANEL_OBJECT_APPLET)
+ return FALSE;
+
+ applet_show_menu (info, event);
+
+ return TRUE;
+}
+
+static gboolean
+applet_popup_menu (GtkWidget *widget,
+ AppletInfo *info)
+{
+ GdkEventButton event;
+
+ event.button = 3;
+ event.time = GDK_CURRENT_TIME;
+
+ return applet_do_popup_menu (widget, &event, info);
+}
+
+static gboolean
+applet_button_press (GtkWidget *widget,
+ GdkEventButton *event,
+ AppletInfo *info)
+{
+ if (event->button == 3)
+ return applet_do_popup_menu (widget, event, info);
+
+ return FALSE;
+}
+
+static void
+mate_panel_applet_destroy (GtkWidget *widget,
+ AppletInfo *info)
+{
+ GList *l;
+
+ g_return_if_fail (info != NULL);
+
+ info->widget = NULL;
+
+ registered_applets = g_slist_remove (registered_applets, info);
+
+ queued_position_saves =
+ g_slist_remove (queued_position_saves, info);
+
+ if (info->type == PANEL_OBJECT_DRAWER) {
+ Drawer *drawer = info->data;
+
+ if (drawer->toplevel) {
+ PanelWidget *panel_widget;
+
+ panel_widget = panel_toplevel_get_panel_widget (
+ drawer->toplevel);
+ panel_widget->master_widget = NULL;
+
+ gtk_widget_destroy (GTK_WIDGET (drawer->toplevel));
+ drawer->toplevel = NULL;
+ }
+ }
+
+ if (info->type != PANEL_OBJECT_APPLET)
+ panel_lockdown_notify_remove (G_CALLBACK (mate_panel_applet_recreate_menu),
+ info);
+
+ if (info->menu)
+ g_object_unref (info->menu);
+ info->menu = NULL;
+
+ if (info->data_destroy)
+ info->data_destroy (info->data);
+ info->data = NULL;
+
+ for (l = info->user_menu; l != NULL; l = l->next) {
+ AppletUserMenu *umenu = l->data;
+
+ g_free (umenu->name);
+ g_free (umenu->stock_item);
+ g_free (umenu->text);
+
+ g_free (umenu);
+ }
+
+ g_list_free (info->user_menu);
+ info->user_menu = NULL;
+
+ g_free (info->id);
+ info->id = NULL;
+
+ g_free (info);
+}
+
+typedef struct {
+ char *id;
+ PanelObjectType type;
+ char *toplevel_id;
+ int position;
+ guint right_stick : 1;
+ guint locked : 1;
+} MatePanelAppletToLoad;
+
+/* Each time those lists get both empty,
+ * mate_panel_applet_queue_initial_unhide_toplevels() should be called */
+static GSList *mate_panel_applets_to_load = NULL;
+static GSList *mate_panel_applets_loading = NULL;
+/* We have a timeout to always unhide toplevels after a delay, in case of some
+ * blocking applet */
+#define UNHIDE_TOPLEVELS_TIMEOUT_SECONDS 5
+static guint mate_panel_applet_unhide_toplevels_timeout = 0;
+
+static gboolean mate_panel_applet_have_load_idle = FALSE;
+
+static void
+free_applet_to_load (MatePanelAppletToLoad *applet)
+{
+ g_free (applet->id);
+ applet->id = NULL;
+
+ g_free (applet->toplevel_id);
+ applet->toplevel_id = NULL;
+
+ g_free (applet);
+}
+
+gboolean
+mate_panel_applet_on_load_queue (const char *id)
+{
+ GSList *li;
+ for (li = mate_panel_applets_to_load; li != NULL; li = li->next) {
+ MatePanelAppletToLoad *applet = li->data;
+ if (strcmp (applet->id, id) == 0)
+ return TRUE;
+ }
+ for (li = mate_panel_applets_loading; li != NULL; li = li->next) {
+ MatePanelAppletToLoad *applet = li->data;
+ if (strcmp (applet->id, id) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* This doesn't do anything if the initial unhide already happened */
+static gboolean
+mate_panel_applet_queue_initial_unhide_toplevels (gpointer user_data)
+{
+ GSList *l;
+
+ if (mate_panel_applet_unhide_toplevels_timeout != 0) {
+ g_source_remove (mate_panel_applet_unhide_toplevels_timeout);
+ mate_panel_applet_unhide_toplevels_timeout = 0;
+ }
+
+ for (l = panel_toplevel_list_toplevels (); l != NULL; l = l->next)
+ panel_toplevel_queue_initial_unhide ((PanelToplevel *) l->data);
+
+ return FALSE;
+}
+
+void
+mate_panel_applet_stop_loading (const char *id)
+{
+ MatePanelAppletToLoad *applet;
+ GSList *l;
+
+ for (l = mate_panel_applets_loading; l; l = l->next) {
+ applet = l->data;
+
+ if (strcmp (applet->id, id) == 0)
+ break;
+ }
+
+ /* this can happen if we reload an applet after it crashed,
+ * for example */
+ if (l != NULL) {
+ mate_panel_applets_loading = g_slist_delete_link (mate_panel_applets_loading, l);
+ free_applet_to_load (applet);
+ }
+
+ if (mate_panel_applets_loading == NULL && mate_panel_applets_to_load == NULL)
+ mate_panel_applet_queue_initial_unhide_toplevels (NULL);
+}
+
+static gboolean
+mate_panel_applet_load_idle_handler (gpointer dummy)
+{
+ PanelObjectType applet_type;
+ MatePanelAppletToLoad *applet = NULL;
+ PanelToplevel *toplevel = NULL;
+ PanelWidget *panel_widget;
+ GSList *l;
+
+ if (!mate_panel_applets_to_load) {
+ mate_panel_applet_have_load_idle = FALSE;
+ return FALSE;
+ }
+
+ for (l = mate_panel_applets_to_load; l; l = l->next) {
+ applet = l->data;
+
+ toplevel = panel_profile_get_toplevel_by_id (applet->toplevel_id);
+ if (toplevel)
+ break;
+ }
+
+ if (!l) {
+ /* All the remaining applets don't have a panel */
+ for (l = mate_panel_applets_to_load; l; l = l->next)
+ free_applet_to_load (l->data);
+ g_slist_free (mate_panel_applets_to_load);
+ mate_panel_applets_to_load = NULL;
+ mate_panel_applet_have_load_idle = FALSE;
+
+ if (mate_panel_applets_loading == NULL) {
+ /* unhide any potential initially hidden toplevel */
+ mate_panel_applet_queue_initial_unhide_toplevels (NULL);
+ }
+
+ return FALSE;
+ }
+
+ mate_panel_applets_to_load = g_slist_delete_link (mate_panel_applets_to_load, l);
+ mate_panel_applets_loading = g_slist_append (mate_panel_applets_loading, applet);
+
+ panel_widget = panel_toplevel_get_panel_widget (toplevel);
+
+ if (applet->right_stick) {
+ if (!panel_widget->packed)
+ applet->position = panel_widget->size - applet->position;
+ else
+ applet->position = -1;
+ }
+
+ /* We load applets asynchronously, so we specifically don't call
+ * mate_panel_applet_stop_loading() for this type. However, in case of
+ * failure during the load, we might call mate_panel_applet_stop_loading()
+ * synchronously, which will make us lose the content of the applet
+ * variable. So we save the type to be sure we always ignore the
+ * applets. */
+ applet_type = applet->type;
+
+ switch (applet_type) {
+ case PANEL_OBJECT_APPLET:
+ mate_panel_applet_frame_load_from_mateconf (
+ panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
+ break;
+ case PANEL_OBJECT_DRAWER:
+ drawer_load_from_mateconf (panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
+ break;
+ case PANEL_OBJECT_MENU:
+ panel_menu_button_load_from_mateconf (panel_widget,
+ applet->locked,
+ applet->position,
+ TRUE,
+ applet->id);
+ break;
+ case PANEL_OBJECT_LAUNCHER:
+ launcher_load_from_mateconf (panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
+ break;
+ case PANEL_OBJECT_LOGOUT:
+ case PANEL_OBJECT_LOCK:
+ panel_action_button_load_compatible (
+ applet->type,
+ panel_widget,
+ applet->locked,
+ applet->position,
+ TRUE,
+ applet->id);
+ break;
+ case PANEL_OBJECT_ACTION:
+ panel_action_button_load_from_mateconf (
+ panel_widget,
+ applet->locked,
+ applet->position,
+ TRUE,
+ applet->id);
+ break;
+ case PANEL_OBJECT_MENU_BAR:
+ panel_menu_bar_load_from_mateconf (
+ panel_widget,
+ applet->locked,
+ applet->position,
+ TRUE,
+ applet->id);
+ break;
+ case PANEL_OBJECT_SEPARATOR:
+ panel_separator_load_from_mateconf (panel_widget,
+ applet->locked,
+ applet->position,
+ applet->id);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ /* Only the real applets will do a late stop_loading */
+ if (applet_type != PANEL_OBJECT_APPLET)
+ mate_panel_applet_stop_loading (applet->id);
+
+ return TRUE;
+}
+
+void
+mate_panel_applet_queue_applet_to_load (const char *id,
+ PanelObjectType type,
+ const char *toplevel_id,
+ int position,
+ gboolean right_stick,
+ gboolean locked)
+{
+ MatePanelAppletToLoad *applet;
+
+ if (!toplevel_id) {
+ g_warning ("No toplevel on which to load object '%s'\n", id);
+ return;
+ }
+
+ applet = g_new0 (MatePanelAppletToLoad, 1);
+
+ applet->id = g_strdup (id);
+ applet->type = type;
+ applet->toplevel_id = g_strdup (toplevel_id);
+ applet->position = position;
+ applet->right_stick = right_stick != FALSE;
+ applet->locked = locked != FALSE;
+
+ mate_panel_applets_to_load = g_slist_prepend (mate_panel_applets_to_load, applet);
+}
+
+static int
+mate_panel_applet_compare (const MatePanelAppletToLoad *a,
+ const MatePanelAppletToLoad *b)
+{
+ int c;
+
+ if ((c = strcmp (a->toplevel_id, b->toplevel_id)))
+ return c;
+ else if (a->right_stick != b->right_stick)
+ return b->right_stick ? -1 : 1;
+ else
+ return a->position - b->position;
+}
+
+void
+mate_panel_applet_load_queued_applets (gboolean initial_load)
+{
+ if (!mate_panel_applets_to_load) {
+ mate_panel_applet_queue_initial_unhide_toplevels (NULL);
+ return;
+ }
+
+ if (mate_panel_applets_to_load && mate_panel_applet_unhide_toplevels_timeout == 0) {
+ /* Install a timeout to make sure we don't block the
+ * unhiding because of an applet that doesn't load */
+ mate_panel_applet_unhide_toplevels_timeout =
+ g_timeout_add_seconds (UNHIDE_TOPLEVELS_TIMEOUT_SECONDS,
+ mate_panel_applet_queue_initial_unhide_toplevels,
+ NULL);
+ }
+
+ mate_panel_applets_to_load = g_slist_sort (mate_panel_applets_to_load,
+ (GCompareFunc) mate_panel_applet_compare);
+
+ if ( ! mate_panel_applet_have_load_idle) {
+ /* on panel startup, we don't care about redraws of the
+ * toplevels since they are hidden, so we give a higher
+ * priority to loading of applets */
+ if (initial_load)
+ g_idle_add_full (G_PRIORITY_HIGH_IDLE,
+ mate_panel_applet_load_idle_handler,
+ NULL, NULL);
+ else
+ g_idle_add (mate_panel_applet_load_idle_handler, NULL);
+
+ mate_panel_applet_have_load_idle = TRUE;
+ }
+}
+
+static const char* mate_panel_applet_get_toplevel_id(AppletInfo* applet)
+{
+ PanelWidget* panel_widget;
+
+ g_return_val_if_fail(applet != NULL, NULL);
+ g_return_val_if_fail(GTK_IS_WIDGET(applet->widget), NULL);
+
+ panel_widget = mate_panel_applet_get_panel_widget(applet);
+
+ if (!panel_widget)
+ {
+ return NULL;
+ }
+
+ return panel_profile_get_toplevel_id(panel_widget->toplevel);
+}
+
+static gboolean
+mate_panel_applet_position_save_timeout (gpointer dummy)
+{
+ GSList *l;
+
+ queued_position_source = 0;
+
+ for (l = queued_position_saves; l; l = l->next) {
+ AppletInfo *info = l->data;
+
+ mate_panel_applet_save_position (info, info->id, TRUE);
+ }
+
+ g_slist_free (queued_position_saves);
+ queued_position_saves = NULL;
+
+ return FALSE;
+}
+
+void
+mate_panel_applet_save_position (AppletInfo *applet_info,
+ const char *id,
+ gboolean immediate)
+{
+ PanelMateConfKeyType key_type;
+ MateConfClient *client;
+ PanelWidget *panel_widget;
+ const char *key;
+ const char *toplevel_id;
+ char *old_toplevel_id;
+ gboolean right_stick;
+ gboolean locked;
+ int position;
+
+ g_return_if_fail (applet_info != NULL);
+
+ if (!immediate) {
+ if (!queued_position_source)
+ queued_position_source =
+ g_timeout_add_seconds (1,
+ (GSourceFunc) mate_panel_applet_position_save_timeout,
+ NULL);
+
+ if (!g_slist_find (queued_position_saves, applet_info))
+ queued_position_saves =
+ g_slist_prepend (queued_position_saves, applet_info);
+
+ return;
+ }
+
+ if (!(toplevel_id = mate_panel_applet_get_toplevel_id (applet_info)))
+ return;
+
+ client = panel_mateconf_get_client ();
+
+ key_type = applet_info->type == PANEL_OBJECT_APPLET ? PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS;
+
+ panel_widget = mate_panel_applet_get_panel_widget (applet_info);
+
+ /* FIXME: Instead of getting keys, comparing and setting, there
+ should be a dirty flag */
+
+ key = panel_mateconf_full_key (key_type, id, "toplevel_id");
+ old_toplevel_id = mateconf_client_get_string (client, key, NULL);
+ if (old_toplevel_id == NULL || strcmp (old_toplevel_id, toplevel_id) != 0)
+ mateconf_client_set_string (client, key, toplevel_id, NULL);
+ g_free (old_toplevel_id);
+
+ /* Note: changing some properties of the panel that may not be locked down
+ (e.g. background) can change the state of the "panel_right_stick" and
+ "position" properties of an applet that may in fact be locked down.
+ So check if these are writable before attempting to write them */
+
+ right_stick = panel_is_applet_right_stick (applet_info->widget) ? 1 : 0;
+ key = panel_mateconf_full_key (
+ key_type, id, "panel_right_stick");
+ if (mateconf_client_key_is_writable (client, key, NULL) &&
+ (mateconf_client_get_bool (client, key, NULL) ? 1 : 0) != right_stick)
+ mateconf_client_set_bool (client, key, right_stick, NULL);
+
+ position = mate_panel_applet_get_position (applet_info);
+ if (right_stick && !panel_widget->packed)
+ position = panel_widget->size - position;
+
+ key = panel_mateconf_full_key (key_type, id, "position");
+ if (mateconf_client_key_is_writable (client, key, NULL) &&
+ mateconf_client_get_int (client, key, NULL) != position)
+ mateconf_client_set_int (client, key, position, NULL);
+
+ locked = panel_widget_get_applet_locked (panel_widget, applet_info->widget) ? 1 : 0;
+ key = panel_mateconf_full_key (key_type, id, "locked");
+ if (mateconf_client_get_bool (client, key, NULL) ? 1 : 0 != locked)
+ mateconf_client_set_bool (client, key, locked, NULL);
+}
+
+const char *
+mate_panel_applet_get_id (AppletInfo *info)
+{
+ if (!info)
+ return NULL;
+
+ return info->id;
+}
+
+const char *
+mate_panel_applet_get_id_by_widget (GtkWidget *applet_widget)
+{
+ GSList *l;
+
+ if (!applet_widget)
+ return NULL;
+
+ for (l = registered_applets; l; l = l->next) {
+ AppletInfo *info = l->data;
+
+ if (info->widget == applet_widget)
+ return info->id;
+ }
+
+ return NULL;
+}
+
+AppletInfo *
+mate_panel_applet_get_by_id (const char *id)
+{
+ GSList *l;
+
+ for (l = registered_applets; l; l = l->next) {
+ AppletInfo *info = l->data;
+
+ if (!strcmp (info->id, id))
+ return info;
+ }
+
+ return NULL;
+}
+
+GSList *
+mate_panel_applet_list_applets (void)
+{
+ return registered_applets;
+}
+
+AppletInfo *
+mate_panel_applet_get_by_type (PanelObjectType object_type, GdkScreen *screen)
+{
+ GSList *l;
+
+ for (l = registered_applets; l; l = l->next) {
+ AppletInfo *info = l->data;
+
+ if (info->type == object_type) {
+ if (screen) {
+ if (screen == gtk_widget_get_screen (info->widget))
+ return info;
+ } else
+ return info;
+ }
+ }
+
+ return NULL;
+}
+
+AppletInfo *
+mate_panel_applet_register (GtkWidget *applet,
+ gpointer data,
+ GDestroyNotify data_destroy,
+ PanelWidget *panel,
+ gboolean locked,
+ gint pos,
+ gboolean exactpos,
+ PanelObjectType type,
+ const char *id)
+{
+ AppletInfo *info;
+ const char *key;
+
+ g_return_val_if_fail (applet != NULL && panel != NULL, NULL);
+
+ if (gtk_widget_get_has_window (applet))
+ gtk_widget_set_events (applet, (gtk_widget_get_events (applet) |
+ APPLET_EVENT_MASK) &
+ ~( GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK));
+
+ info = g_new0 (AppletInfo, 1);
+ info->type = type;
+ info->widget = applet;
+ info->menu = NULL;
+ info->data = data;
+ info->data_destroy = data_destroy;
+ info->user_menu = NULL;
+ info->move_item = NULL;
+ info->id = g_strdup (id);
+
+ g_object_set_data (G_OBJECT (applet), "applet_info", info);
+
+ if (type != PANEL_OBJECT_APPLET)
+ panel_lockdown_notify_add (G_CALLBACK (mate_panel_applet_recreate_menu),
+ info);
+
+ key = panel_mateconf_full_key ((type == PANEL_OBJECT_APPLET) ?
+ PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS,
+ id, "locked");
+ panel_mateconf_notify_add_while_alive (key,
+ (MateConfClientNotifyFunc) mate_panel_applet_locked_change_notify,
+ G_OBJECT (applet));
+
+ if (type == PANEL_OBJECT_DRAWER) {
+ Drawer *drawer = data;
+ PanelWidget *assoc_panel;
+
+ assoc_panel = panel_toplevel_get_panel_widget (drawer->toplevel);
+
+ g_object_set_data (G_OBJECT (applet),
+ MATE_PANEL_APPLET_ASSOC_PANEL_KEY, assoc_panel);
+ assoc_panel->master_widget = applet;
+ g_object_add_weak_pointer (
+ G_OBJECT (applet), (gpointer *) &assoc_panel->master_widget);
+ }
+
+ g_object_set_data (G_OBJECT (applet),
+ MATE_PANEL_APPLET_FORBIDDEN_PANELS, NULL);
+
+ registered_applets = g_slist_append (registered_applets, info);
+
+ if (panel_widget_add (panel, applet, locked, pos, exactpos) == -1 &&
+ panel_widget_add (panel, applet, locked, 0, TRUE) == -1) {
+ GSList *l;
+
+ for (l = panels; l; l = l->next) {
+ panel = PANEL_WIDGET (l->data);
+
+ if (panel_widget_add (panel, applet, locked, 0, TRUE) != -1)
+ break;
+ }
+
+ if (!l) {
+ g_warning (_("Cannot find an empty spot"));
+ panel_profile_delete_object (info);
+ return NULL;
+ }
+ }
+
+ if (BUTTON_IS_WIDGET (applet) ||
+ gtk_widget_get_has_window (applet)) {
+ g_signal_connect (applet, "button_press_event",
+ G_CALLBACK (applet_button_press),
+ info);
+
+ g_signal_connect (applet, "popup_menu",
+ G_CALLBACK (applet_popup_menu),
+ info);
+ }
+
+ g_signal_connect (applet, "destroy",
+ G_CALLBACK (mate_panel_applet_destroy),
+ info);
+
+ mate_panel_applet_set_dnd_enabled (info, !locked);
+
+ gtk_widget_show_all (applet);
+
+ orientation_change (info, panel);
+ size_change (info, panel);
+ back_change (info, panel);
+
+ if (type != PANEL_OBJECT_APPLET)
+ gtk_widget_grab_focus (applet);
+ else
+ gtk_widget_child_focus (applet, GTK_DIR_TAB_FORWARD);
+
+ return info;
+}
+
+int
+mate_panel_applet_get_position (AppletInfo *applet)
+{
+ AppletData *applet_data;
+
+ g_return_val_if_fail (applet != NULL, 0);
+ g_return_val_if_fail (G_IS_OBJECT (applet->widget), 0);
+
+ applet_data = g_object_get_data (G_OBJECT (applet->widget), MATE_PANEL_APPLET_DATA);
+
+ return applet_data->pos;
+}
+
+gboolean
+mate_panel_applet_can_freely_move (AppletInfo *applet)
+{
+ MateConfClient *client;
+ PanelMateConfKeyType key_type;
+ const char *key;
+
+ if (panel_lockdown_get_locked_down ())
+ return FALSE;
+
+ client = panel_mateconf_get_client ();
+
+ key_type = (applet->type == PANEL_OBJECT_APPLET) ? PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS;
+
+ key = panel_mateconf_full_key (key_type, applet->id, "position");
+ if (!mateconf_client_key_is_writable (client, key, NULL))
+ return FALSE;
+
+ key = panel_mateconf_full_key (key_type, applet->id, "toplevel_id");
+ if (!mateconf_client_key_is_writable (client, key, NULL))
+ return FALSE;
+
+ key = panel_mateconf_full_key (key_type, applet->id, "panel_right_stick");
+ if (!mateconf_client_key_is_writable (client, key, NULL))
+ return FALSE;
+
+ return TRUE;
+}
+
+gboolean
+mate_panel_applet_lockable (AppletInfo *applet)
+{
+ MateConfClient *client;
+ PanelMateConfKeyType key_type;
+ const char *key;
+
+ if (panel_lockdown_get_locked_down ())
+ return FALSE;
+
+ client = panel_mateconf_get_client ();
+
+ key_type = (applet->type == PANEL_OBJECT_APPLET) ? PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS;
+
+ key = panel_mateconf_full_key (key_type, applet->id, "locked");
+
+ return mateconf_client_key_is_writable (client, key, NULL);
+}
diff --git a/mate-panel/applet.h b/mate-panel/applet.h
new file mode 100644
index 00000000..531e7e20
--- /dev/null
+++ b/mate-panel/applet.h
@@ -0,0 +1,119 @@
+#ifndef APPLET_H
+#define APPLET_H
+
+#include <glib.h>
+#include <gdk/gdk.h>
+#include "panel-widget.h"
+#include "panel-mateconf.h"
+#include "panel-enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define APPLET_EVENT_MASK (GDK_BUTTON_PRESS_MASK | \
+ GDK_BUTTON_RELEASE_MASK | \
+ GDK_POINTER_MOTION_MASK | \
+ GDK_POINTER_MOTION_HINT_MASK)
+typedef struct {
+ PanelObjectType type;
+ GtkWidget *widget;
+
+ GtkWidget *menu;
+ GtkWidget *move_item;
+ GList *user_menu;
+
+ gpointer data;
+ GDestroyNotify data_destroy;
+
+ char *id;
+} AppletInfo;
+
+typedef gboolean (* CallbackEnabledFunc) (void);
+
+typedef struct {
+ char *name;
+ char *stock_item;
+ char *text;
+
+ CallbackEnabledFunc is_enabled_func;
+
+ int sensitive;
+ AppletInfo *info;
+
+ GtkWidget *menuitem;
+ GtkWidget *submenu;
+} AppletUserMenu;
+
+AppletInfo *mate_panel_applet_register (GtkWidget *applet,
+ gpointer data,
+ GDestroyNotify data_destroy,
+ PanelWidget *panel,
+ gboolean locked,
+ gint pos,
+ gboolean exactpos,
+ PanelObjectType type,
+ const char *id);
+void mate_panel_applet_stop_loading (const char *id);
+
+const char *mate_panel_applet_get_id (AppletInfo *info);
+const char *mate_panel_applet_get_id_by_widget (GtkWidget *widget);
+AppletInfo *mate_panel_applet_get_by_id (const char *id);
+AppletInfo *mate_panel_applet_get_by_type (PanelObjectType object_type, GdkScreen *screen);
+
+GSList *mate_panel_applet_list_applets (void);
+
+void mate_panel_applet_clean (AppletInfo *info);
+
+void mate_panel_applet_queue_applet_to_load (const char *id,
+ PanelObjectType type,
+ const char *toplevel_id,
+ int position,
+ gboolean right_stick,
+ gboolean locked);
+void mate_panel_applet_load_queued_applets (gboolean initial_load);
+gboolean mate_panel_applet_on_load_queue (const char *id);
+
+
+void mate_panel_applet_add_callback (AppletInfo *info,
+ const gchar *callback_name,
+ const gchar *stock_item,
+ const gchar *menuitem_text,
+ CallbackEnabledFunc is_enabled_func);
+
+AppletUserMenu *mate_panel_applet_get_callback (GList *user_menu,
+ const gchar *name);
+
+
+void mate_panel_applet_save_position (AppletInfo *applet_info,
+ const char *id,
+ gboolean immediate);
+
+int mate_panel_applet_get_position (AppletInfo *applet);
+
+/* True if all the keys relevant to moving are writable
+ (position, toplevel_id, panel_right_stick) */
+gboolean mate_panel_applet_can_freely_move (AppletInfo *applet);
+
+/* True if the locked flag is writable */
+gboolean mate_panel_applet_lockable (AppletInfo *applet);
+
+GtkWidget *mate_panel_applet_create_menu (AppletInfo *info);
+
+void mate_panel_applet_menu_set_recurse (GtkMenu *menu,
+ const gchar *key,
+ gpointer data);
+
+gboolean mate_panel_applet_toggle_locked (AppletInfo *info);
+
+void mate_panel_applet_position_menu (GtkMenu *menu,
+ int *x,
+ int *y,
+ gboolean *push_in,
+ GtkWidget *applet);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/mate-panel/button-widget.c b/mate-panel/button-widget.c
new file mode 100644
index 00000000..6f2fd6b8
--- /dev/null
+++ b/mate-panel/button-widget.c
@@ -0,0 +1,902 @@
+#include <config.h>
+#include <math.h>
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+#include "button-widget.h"
+#include "panel-widget.h"
+#include "panel-types.h"
+#include "panel-util.h"
+#include "panel-config-global.h"
+#include "panel-marshal.h"
+#include "panel-typebuiltins.h"
+#include "panel-globals.h"
+
+#define BUTTON_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), BUTTON_TYPE_WIDGET, ButtonWidgetPrivate))
+
+struct _ButtonWidgetPrivate {
+ GtkIconTheme *icon_theme;
+ GdkPixbuf *pixbuf;
+ GdkPixbuf *pixbuf_hc;
+
+ char *filename;
+
+ PanelOrientation orientation;
+
+ int size;
+
+ guint activatable : 1;
+ guint ignore_leave : 1;
+ guint arrow : 1;
+ guint dnd_highlight : 1;
+};
+
+static void button_widget_icon_theme_changed (ButtonWidget *button);
+static void button_widget_reload_pixbuf (ButtonWidget *button);
+
+enum {
+ PROP_0,
+ PROP_ACTIVATABLE,
+ PROP_IGNORE_LEAVE,
+ PROP_HAS_ARROW,
+ PROP_DND_HIGHLIGHT,
+ PROP_ORIENTATION,
+ PROP_ICON_NAME
+};
+
+#define BUTTON_WIDGET_DISPLACEMENT 2
+
+G_DEFINE_TYPE (ButtonWidget, button_widget, GTK_TYPE_BUTTON)
+
+/* colorshift a pixbuf */
+static void
+do_colorshift (GdkPixbuf *dest, GdkPixbuf *src, int shift)
+{
+ gint i, j;
+ gint width, height, has_alpha, srcrowstride, destrowstride;
+ guchar *target_pixels;
+ guchar *original_pixels;
+ guchar *pixsrc;
+ guchar *pixdest;
+ int val;
+ guchar r,g,b;
+
+ has_alpha = gdk_pixbuf_get_has_alpha (src);
+ width = gdk_pixbuf_get_width (src);
+ height = gdk_pixbuf_get_height (src);
+ srcrowstride = gdk_pixbuf_get_rowstride (src);
+ destrowstride = gdk_pixbuf_get_rowstride (dest);
+ target_pixels = gdk_pixbuf_get_pixels (dest);
+ original_pixels = gdk_pixbuf_get_pixels (src);
+
+ for (i = 0; i < height; i++) {
+ pixdest = target_pixels + i*destrowstride;
+ pixsrc = original_pixels + i*srcrowstride;
+ for (j = 0; j < width; j++) {
+ r = *(pixsrc++);
+ g = *(pixsrc++);
+ b = *(pixsrc++);
+ val = r + shift;
+ *(pixdest++) = CLAMP(val, 0, 255);
+ val = g + shift;
+ *(pixdest++) = CLAMP(val, 0, 255);
+ val = b + shift;
+ *(pixdest++) = CLAMP(val, 0, 255);
+ if (has_alpha)
+ *(pixdest++) = *(pixsrc++);
+ }
+ }
+}
+
+static GdkPixbuf *
+make_hc_pixbuf (GdkPixbuf *pb)
+{
+ GdkPixbuf *new;
+
+ if (!pb)
+ return NULL;
+
+ new = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (pb),
+ gdk_pixbuf_get_has_alpha (pb),
+ gdk_pixbuf_get_bits_per_sample (pb),
+ gdk_pixbuf_get_width (pb),
+ gdk_pixbuf_get_height (pb));
+ do_colorshift (new, pb, 30);
+
+ return new;
+}
+
+static void
+button_widget_realize(GtkWidget *widget)
+{
+ GtkAllocation allocation;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+ GtkButton *button;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (BUTTON_IS_WIDGET (widget));
+
+ button = GTK_BUTTON (widget);
+
+ gtk_widget_set_realized (widget, TRUE);
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.x = allocation.x;
+ attributes.y = allocation.y;
+ attributes.width = allocation.width;
+ attributes.height = allocation.height;
+ attributes.wclass = GDK_INPUT_ONLY;
+ attributes.event_mask = (GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK |
+ GDK_KEY_PRESS_MASK |
+ GDK_ENTER_NOTIFY_MASK |
+ GDK_LEAVE_NOTIFY_MASK);
+ attributes_mask = GDK_WA_X | GDK_WA_Y;
+
+ gtk_widget_set_window (widget, gtk_widget_get_parent_window (widget));
+ g_object_ref (gtk_widget_get_window (widget));
+
+ button->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
+ &attributes,
+ attributes_mask);
+ gdk_window_set_user_data (button->event_window, widget);
+
+ widget->style = gtk_style_attach (widget->style, gtk_widget_get_window (widget));
+
+ BUTTON_WIDGET (widget)->priv->icon_theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
+ g_signal_connect_object (BUTTON_WIDGET (widget)->priv->icon_theme,
+ "changed",
+ G_CALLBACK (button_widget_icon_theme_changed),
+ button,
+ G_CONNECT_SWAPPED);
+
+ button_widget_reload_pixbuf (BUTTON_WIDGET (widget));
+}
+
+static void
+button_widget_unrealize (GtkWidget *widget)
+{
+ GtkButton *button;
+
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (BUTTON_IS_WIDGET (widget));
+
+ button = GTK_BUTTON (widget);
+
+ if (button->event_window != NULL) {
+ gdk_window_set_user_data (button->event_window, NULL);
+ gdk_window_destroy (button->event_window);
+ button->event_window = NULL;
+ }
+
+ GTK_WIDGET_CLASS (button_widget_parent_class)->unrealize (widget);
+}
+
+static void
+button_widget_unset_pixbufs (ButtonWidget *button)
+{
+ if (button->priv->pixbuf)
+ g_object_unref (button->priv->pixbuf);
+ button->priv->pixbuf = NULL;
+
+ if (button->priv->pixbuf_hc)
+ g_object_unref (button->priv->pixbuf_hc);
+ button->priv->pixbuf_hc = NULL;
+}
+
+static void
+button_widget_reload_pixbuf (ButtonWidget *button)
+{
+ button_widget_unset_pixbufs (button);
+
+ if (button->priv->size <= 1 || button->priv->icon_theme == NULL)
+ return;
+
+ if (button->priv->filename != NULL &&
+ button->priv->filename [0] != '\0') {
+ char *error = NULL;
+
+ button->priv->pixbuf =
+ panel_load_icon (button->priv->icon_theme,
+ button->priv->filename,
+ button->priv->size,
+ button->priv->orientation & PANEL_VERTICAL_MASK ? button->priv->size : -1,
+ button->priv->orientation & PANEL_HORIZONTAL_MASK ? button->priv->size : -1,
+ &error);
+ if (error) {
+ //FIXME: this is not rendered at button->priv->size
+ button->priv->pixbuf =
+ gtk_widget_render_icon (GTK_WIDGET (button),
+ GTK_STOCK_MISSING_IMAGE,
+ (GtkIconSize) -1, NULL);
+ g_free (error);
+ }
+ }
+
+ button->priv->pixbuf_hc = make_hc_pixbuf (button->priv->pixbuf);
+
+ gtk_widget_queue_resize (GTK_WIDGET (button));
+}
+
+static void
+button_widget_icon_theme_changed (ButtonWidget *button)
+{
+ if (button->priv->filename != NULL)
+ button_widget_reload_pixbuf (button);
+}
+
+static void
+button_widget_finalize (GObject *object)
+{
+ ButtonWidget *button = (ButtonWidget *) object;
+
+ button_widget_unset_pixbufs (button);
+
+ g_free (button->priv->filename);
+ button->priv->filename = NULL;
+
+ G_OBJECT_CLASS (button_widget_parent_class)->finalize (object);
+}
+
+static void
+button_widget_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ButtonWidget *button;
+
+ g_return_if_fail (BUTTON_IS_WIDGET (object));
+
+ button = BUTTON_WIDGET (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVATABLE:
+ g_value_set_boolean (value, button->priv->activatable);
+ break;
+ case PROP_IGNORE_LEAVE:
+ g_value_set_boolean (value, button->priv->ignore_leave);
+ break;
+ case PROP_HAS_ARROW:
+ g_value_set_boolean (value, button->priv->arrow);
+ break;
+ case PROP_DND_HIGHLIGHT:
+ g_value_set_boolean (value, button->priv->dnd_highlight);
+ break;
+ case PROP_ORIENTATION:
+ g_value_set_enum (value, button->priv->orientation);
+ break;
+ case PROP_ICON_NAME:
+ g_value_set_string (value, button->priv->filename);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+button_widget_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ ButtonWidget *button;
+
+ g_return_if_fail (BUTTON_IS_WIDGET (object));
+
+ button = BUTTON_WIDGET (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVATABLE:
+ button_widget_set_activatable (button, g_value_get_boolean (value));
+ break;
+ case PROP_IGNORE_LEAVE:
+ button_widget_set_ignore_leave (button, g_value_get_boolean (value));
+ break;
+ case PROP_HAS_ARROW:
+ button_widget_set_has_arrow (button, g_value_get_boolean (value));
+ break;
+ case PROP_DND_HIGHLIGHT:
+ button_widget_set_dnd_highlight (button, g_value_get_boolean (value));
+ break;
+ case PROP_ORIENTATION:
+ button_widget_set_orientation (button, g_value_get_enum (value));
+ break;
+ case PROP_ICON_NAME:
+ button_widget_set_icon_name (button, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GtkArrowType
+calc_arrow (PanelOrientation orientation,
+ int button_width,
+ int button_height,
+ int *x,
+ int *y,
+ int *width,
+ int *height)
+{
+ GtkArrowType retval = GTK_ARROW_UP;
+ double scale;
+
+ scale = (orientation & PANEL_HORIZONTAL_MASK ? button_height : button_width) / 48.0;
+
+ *width = 12 * scale;
+ *height = 12 * scale;
+
+ switch (orientation) {
+ case PANEL_ORIENTATION_TOP:
+ *x = scale * 3;
+ *y = scale * (48 - 13);
+ retval = GTK_ARROW_DOWN;
+ break;
+ case PANEL_ORIENTATION_BOTTOM:
+ *x = scale * (48 - 13);
+ *y = scale * 1;
+ retval = GTK_ARROW_UP;
+ break;
+ case PANEL_ORIENTATION_LEFT:
+ *x = scale * (48 - 13);
+ *y = scale * 3;
+ retval = GTK_ARROW_RIGHT;
+ break;
+ case PANEL_ORIENTATION_RIGHT:
+ *x = scale * 1;
+ *y = scale * 3;
+ retval = GTK_ARROW_LEFT;
+ break;
+ }
+
+ return retval;
+}
+
+static gboolean
+button_widget_expose (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ ButtonWidget *button_widget;
+ GtkButton *button;
+ GdkWindow *window;
+ GtkAllocation allocation;
+ GdkRectangle area, image_bound;
+ GtkStyle *style;
+ int off;
+ int x, y, w, h;
+ GdkPixbuf *pb = NULL;
+
+ g_return_val_if_fail (BUTTON_IS_WIDGET (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ if (!gtk_widget_get_visible (widget) || !gtk_widget_get_mapped (widget))
+ return FALSE;
+
+ button_widget = BUTTON_WIDGET (widget);
+
+ if (!button_widget->priv->pixbuf_hc && !button_widget->priv->pixbuf)
+ return FALSE;
+
+ button = GTK_BUTTON (widget);
+ window = gtk_widget_get_window (widget);
+ gtk_widget_get_allocation (widget, &allocation);
+
+ /* offset for pressed buttons */
+ off = (button_widget->priv->activatable &&
+ button->in_button && button->button_down) ?
+ BUTTON_WIDGET_DISPLACEMENT * allocation.height / 48.0 : 0;
+
+ if (!button_widget->priv->activatable) {
+ pb = gdk_pixbuf_copy (button_widget->priv->pixbuf);
+ gdk_pixbuf_saturate_and_pixelate (button_widget->priv->pixbuf,
+ pb,
+ 0.8,
+ TRUE);
+ } else if (panel_global_config_get_highlight_when_over () &&
+ (button->in_button || gtk_widget_has_focus (widget)))
+ pb = g_object_ref (button_widget->priv->pixbuf_hc);
+ else
+ pb = g_object_ref (button_widget->priv->pixbuf);
+
+ g_assert (pb != NULL);
+
+ w = gdk_pixbuf_get_width (pb);
+ h = gdk_pixbuf_get_height (pb);
+ x = allocation.x + off + (allocation.width - w)/2;
+ y = allocation.y + off + (allocation.height - h)/2;
+
+ image_bound.x = x;
+ image_bound.y = y;
+ image_bound.width = w;
+ image_bound.height = h;
+
+ area = event->area;
+
+ if (gdk_rectangle_intersect (&area, &allocation, &area) &&
+ gdk_rectangle_intersect (&image_bound, &area, &image_bound))
+ gdk_draw_pixbuf (window, NULL, pb,
+ image_bound.x - x, image_bound.y - y,
+ image_bound.x, image_bound.y,
+ image_bound.width, image_bound.height,
+ GDK_RGB_DITHER_NORMAL,
+ 0, 0);
+
+ g_object_unref (pb);
+
+ style = gtk_widget_get_style (widget);
+
+ if (button_widget->priv->arrow) {
+ GtkArrowType arrow_type;
+ int x, y, width, height;
+
+ x = y = width = height = -1;
+
+ arrow_type = calc_arrow (button_widget->priv->orientation,
+ allocation.width,
+ allocation.height,
+ &x,
+ &y,
+ &width,
+ &height);
+
+ gtk_paint_arrow (style,
+ window,
+ GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ NULL,
+ widget,
+ "panel-button",
+ arrow_type,
+ TRUE,
+ allocation.x + x,
+ allocation.y + y,
+ width,
+ height);
+ }
+
+ if (button_widget->priv->dnd_highlight) {
+ gdk_draw_rectangle(window, style->black_gc, FALSE,
+ allocation.x, allocation.y,
+ allocation.width - 1,
+ allocation.height - 1);
+ }
+
+ if (gtk_widget_has_focus (widget)) {
+ gint focus_width, focus_pad;
+ gint x, y, width, height;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+ x = allocation.x + focus_pad;
+ y = allocation.y + focus_pad;
+ width = allocation.width - 2 * focus_pad;
+ height = allocation.height - 2 * focus_pad;
+ gtk_paint_focus (style, window,
+ GTK_STATE_NORMAL,
+ &event->area, widget, "button",
+ x, y, width, height);
+ }
+
+ return FALSE;
+}
+
+static void
+button_widget_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ ButtonWidget *button_widget = BUTTON_WIDGET (widget);
+
+ if (button_widget->priv->pixbuf) {
+ requisition->width = gdk_pixbuf_get_width (button_widget->priv->pixbuf);
+ requisition->height = gdk_pixbuf_get_height (button_widget->priv->pixbuf);
+ }
+}
+
+static void
+button_widget_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ ButtonWidget *button_widget = BUTTON_WIDGET (widget);
+ GtkButton *button = GTK_BUTTON (widget);
+ int size;
+
+ if (button_widget->priv->orientation & PANEL_HORIZONTAL_MASK)
+ size = allocation->height;
+ else
+ size = allocation->width;
+
+ if (size < 22)
+ size = 16;
+ else if (size < 24)
+ size = 22;
+ else if (size < 32)
+ size = 24;
+ else if (size < 48)
+ size = 32;
+ else
+ size = 48;
+
+ if (button_widget->priv->size != size) {
+ button_widget->priv->size = size;
+
+ button_widget_reload_pixbuf (button_widget);
+ }
+
+ gtk_widget_set_allocation (widget, allocation);
+
+ if (gtk_widget_get_realized (widget)) {
+ gdk_window_move_resize (button->event_window,
+ allocation->x,
+ allocation->y,
+ allocation->width,
+ allocation->height);
+ }
+}
+
+static void
+button_widget_activate (GtkButton *button)
+{
+ ButtonWidget *button_widget = BUTTON_WIDGET (button);
+
+ if (!button_widget->priv->activatable)
+ return;
+
+ if (GTK_BUTTON_CLASS (button_widget_parent_class)->activate)
+ GTK_BUTTON_CLASS (button_widget_parent_class)->activate (button);
+}
+
+static gboolean
+button_widget_button_press (GtkWidget *widget, GdkEventButton *event)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (widget), FALSE);
+ g_return_val_if_fail (event != NULL, FALSE);
+
+ if (event->button == 1 && BUTTON_WIDGET (widget)->priv->activatable &&
+ /* we don't want to have two/three "click" events for double/triple
+ * clicks. FIXME: this is only a workaround, waiting for bug 159101 */
+ event->type == GDK_BUTTON_PRESS)
+ return GTK_WIDGET_CLASS (button_widget_parent_class)->button_press_event (widget, event);
+
+ return FALSE;
+}
+
+static gboolean
+button_widget_enter_notify (GtkWidget *widget, GdkEventCrossing *event)
+{
+ gboolean in_button;
+
+ g_return_val_if_fail (BUTTON_IS_WIDGET (widget), FALSE);
+
+ in_button = GTK_BUTTON (widget)->in_button;
+ GTK_WIDGET_CLASS (button_widget_parent_class)->enter_notify_event (widget, event);
+ if (in_button != GTK_BUTTON (widget)->in_button &&
+ panel_global_config_get_highlight_when_over ())
+ gtk_widget_queue_draw (widget);
+
+ return FALSE;
+}
+
+static gboolean
+button_widget_leave_notify (GtkWidget *widget, GdkEventCrossing *event)
+{
+ gboolean in_button;
+
+ g_return_val_if_fail (BUTTON_IS_WIDGET (widget), FALSE);
+
+ in_button = GTK_BUTTON (widget)->in_button;
+ GTK_WIDGET_CLASS (button_widget_parent_class)->leave_notify_event (widget, event);
+ if (in_button != GTK_BUTTON (widget)->in_button &&
+ panel_global_config_get_highlight_when_over ())
+ gtk_widget_queue_draw (widget);
+
+ return FALSE;
+}
+
+static void
+button_widget_init (ButtonWidget *button)
+{
+ button->priv = BUTTON_WIDGET_GET_PRIVATE (button);
+
+ button->priv->icon_theme = NULL;
+ button->priv->pixbuf = NULL;
+ button->priv->pixbuf_hc = NULL;
+
+ button->priv->filename = NULL;
+
+ button->priv->orientation = PANEL_ORIENTATION_TOP;
+
+ button->priv->size = 0;
+
+ button->priv->activatable = FALSE;
+ button->priv->ignore_leave = FALSE;
+ button->priv->arrow = FALSE;
+ button->priv->dnd_highlight = FALSE;
+}
+
+static void
+button_widget_class_init (ButtonWidgetClass *klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
+ GtkButtonClass *button_class = (GtkButtonClass *) klass;
+
+ gobject_class->finalize = button_widget_finalize;
+ gobject_class->get_property = button_widget_get_property;
+ gobject_class->set_property = button_widget_set_property;
+
+ g_type_class_add_private (klass, sizeof (ButtonWidgetPrivate));
+
+ widget_class->realize = button_widget_realize;
+ widget_class->unrealize = button_widget_unrealize;
+ widget_class->size_allocate = button_widget_size_allocate;
+ widget_class->size_request = button_widget_size_request;
+ widget_class->button_press_event = button_widget_button_press;
+ widget_class->enter_notify_event = button_widget_enter_notify;
+ widget_class->leave_notify_event = button_widget_leave_notify;
+ widget_class->expose_event = button_widget_expose;
+
+ button_class->activate = button_widget_activate;
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_ACTIVATABLE,
+ g_param_spec_boolean ("activatable",
+ "Activatable",
+ "Whether the button is activatable",
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_IGNORE_LEAVE,
+ g_param_spec_boolean ("ignore-leave",
+ "Ignore leaving to not unhighlight the icon",
+ "Whether or not to unhighlight the icon when the cursor leaves it",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_HAS_ARROW,
+ g_param_spec_boolean ("has-arrow",
+ "Has Arrow",
+ "Whether or not to draw an arrow indicator",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_DND_HIGHLIGHT,
+ g_param_spec_boolean ("dnd-highlight",
+ "Drag and drop Highlight",
+ "Whether or not to highlight the icon during drag and drop",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_ORIENTATION,
+ g_param_spec_enum ("orientation",
+ "Orientation",
+ "The ButtonWidget orientation",
+ PANEL_TYPE_ORIENTATION,
+ PANEL_ORIENTATION_TOP,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_ICON_NAME,
+ g_param_spec_string ("icon-name",
+ "Icon Name",
+ "The desired icon for the ButtonWidget",
+ NULL,
+ G_PARAM_READWRITE));
+}
+
+GtkWidget *
+button_widget_new (const char *filename,
+ gboolean arrow,
+ PanelOrientation orientation)
+{
+ GtkWidget *retval;
+
+ retval = g_object_new (
+ BUTTON_TYPE_WIDGET,
+ "has-arrow", arrow,
+ "orientation", orientation,
+ "icon-name", filename,
+ NULL);
+
+ return retval;
+}
+
+void
+button_widget_set_activatable (ButtonWidget *button,
+ gboolean activatable)
+{
+ g_return_if_fail (BUTTON_IS_WIDGET (button));
+
+ activatable = activatable != FALSE;
+
+ if (button->priv->activatable != activatable) {
+ button->priv->activatable = activatable;
+
+ if (gtk_widget_is_drawable (GTK_WIDGET (button)))
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+
+ g_object_notify (G_OBJECT (button), "activatable");
+ }
+}
+
+gboolean
+button_widget_get_activatable (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), FALSE);
+
+ return button->priv->activatable;
+}
+
+void
+button_widget_set_icon_name (ButtonWidget *button,
+ const char *icon_name)
+{
+ g_return_if_fail (BUTTON_IS_WIDGET (button));
+
+ if (button->priv->filename && icon_name &&
+ !strcmp (button->priv->filename, icon_name))
+ return;
+
+ if (button->priv->filename)
+ g_free (button->priv->filename);
+ button->priv->filename = g_strdup (icon_name);
+
+ button_widget_reload_pixbuf (button);
+
+ g_object_notify (G_OBJECT (button), "icon-name");
+}
+
+const char *
+button_widget_get_icon_name (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), NULL);
+
+ return button->priv->filename;
+}
+
+void
+button_widget_set_orientation (ButtonWidget *button,
+ PanelOrientation orientation)
+{
+ g_return_if_fail (BUTTON_IS_WIDGET (button));
+
+ if (button->priv->orientation == orientation)
+ return;
+
+ button->priv->orientation = orientation;
+
+ /* Force a re-scale */
+ button->priv->size = -1;
+
+ gtk_widget_queue_resize (GTK_WIDGET (button));
+
+ g_object_notify (G_OBJECT (button), "orientation");
+}
+
+PanelOrientation
+button_widget_get_orientation (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), 0);
+
+ return button->priv->orientation;
+}
+
+void
+button_widget_set_has_arrow (ButtonWidget *button,
+ gboolean has_arrow)
+{
+ g_return_if_fail (BUTTON_IS_WIDGET (button));
+
+ has_arrow = has_arrow != FALSE;
+
+ if (button->priv->arrow == has_arrow)
+ return;
+
+ button->priv->arrow = has_arrow;
+
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+
+ g_object_notify (G_OBJECT (button), "has-arrow");
+}
+
+gboolean
+button_widget_get_has_arrow (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), FALSE);
+
+ return button->priv->arrow;
+}
+
+void
+button_widget_set_dnd_highlight (ButtonWidget *button,
+ gboolean dnd_highlight)
+{
+ g_return_if_fail (BUTTON_IS_WIDGET (button));
+
+ dnd_highlight = dnd_highlight != FALSE;
+
+ if (button->priv->dnd_highlight == dnd_highlight)
+ return;
+
+ button->priv->dnd_highlight = dnd_highlight;
+
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+
+ g_object_notify (G_OBJECT (button), "dnd-highlight");
+}
+
+gboolean
+button_widget_get_dnd_highlight (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), FALSE);
+
+ return button->priv->dnd_highlight;
+}
+
+void
+button_widget_set_ignore_leave (ButtonWidget *button,
+ gboolean ignore_leave)
+{
+ g_return_if_fail (BUTTON_IS_WIDGET (button));
+
+ ignore_leave = ignore_leave != FALSE;
+
+ if (button->priv->ignore_leave == ignore_leave)
+ return;
+
+ button->priv->ignore_leave = ignore_leave;
+
+ gtk_widget_queue_draw (GTK_WIDGET (button));
+
+ g_object_notify (G_OBJECT (button), "ignore-leave");
+}
+
+gboolean
+button_widget_get_ignore_leave (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), FALSE);
+
+ return button->priv->ignore_leave;
+}
+
+GtkIconTheme *
+button_widget_get_icon_theme (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), NULL);
+
+ return button->priv->icon_theme;
+}
+
+GdkPixbuf *
+button_widget_get_pixbuf (ButtonWidget *button)
+{
+ g_return_val_if_fail (BUTTON_IS_WIDGET (button), NULL);
+
+ if (!button->priv->pixbuf)
+ return NULL;
+
+ return g_object_ref (button->priv->pixbuf);
+}
diff --git a/mate-panel/button-widget.h b/mate-panel/button-widget.h
new file mode 100644
index 00000000..e9b87e6d
--- /dev/null
+++ b/mate-panel/button-widget.h
@@ -0,0 +1,60 @@
+#ifndef BUTTON_WIDGET_H
+#define BUTTON_WIDGET_H
+
+#include <gtk/gtk.h>
+#include "panel-enums.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BUTTON_TYPE_WIDGET (button_widget_get_type ())
+#define BUTTON_WIDGET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BUTTON_TYPE_WIDGET, ButtonWidget))
+#define BUTTON_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass, BUTTON_TYPE_WIDGET, ButtonWidgetClass))
+#define BUTTON_IS_WIDGET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BUTTON_TYPE_WIDGET))
+#define BUTTON_IS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BUTTON_TYPE_WIDGET))
+
+typedef struct _ButtonWidget ButtonWidget;
+typedef struct _ButtonWidgetClass ButtonWidgetClass;
+typedef struct _ButtonWidgetPrivate ButtonWidgetPrivate;
+
+struct _ButtonWidget {
+ GtkButton parent;
+
+ ButtonWidgetPrivate *priv;
+};
+
+struct _ButtonWidgetClass {
+ GtkButtonClass parent_class;
+};
+
+GType button_widget_get_type (void) G_GNUC_CONST;
+GtkWidget * button_widget_new (const char *pixmap,
+ gboolean arrow,
+ PanelOrientation orientation);
+void button_widget_set_activatable (ButtonWidget *button,
+ gboolean activatable);
+gboolean button_widget_get_activatable (ButtonWidget *button);
+void button_widget_set_icon_name (ButtonWidget *button,
+ const char *icon_name);
+const char * button_widget_get_icon_name (ButtonWidget *button);
+void button_widget_set_orientation (ButtonWidget *button,
+ PanelOrientation orientation);
+PanelOrientation button_widget_get_orientation (ButtonWidget *button);
+void button_widget_set_has_arrow (ButtonWidget *button,
+ gboolean has_arrow);
+gboolean button_widget_get_has_arrow (ButtonWidget *button);
+void button_widget_set_dnd_highlight (ButtonWidget *button,
+ gboolean dnd_highlight);
+gboolean button_widget_get_dnd_highlight (ButtonWidget *button);
+void button_widget_set_ignore_leave (ButtonWidget *button,
+ gboolean ignore_leave);
+gboolean button_widget_get_ignore_leave (ButtonWidget *button);
+GtkIconTheme *button_widget_get_icon_theme (ButtonWidget *button);
+GdkPixbuf *button_widget_get_pixbuf (ButtonWidget *button);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __BUTTON_WIDGET_H__ */
diff --git a/mate-panel/drawer.c b/mate-panel/drawer.c
new file mode 100644
index 00000000..924acb42
--- /dev/null
+++ b/mate-panel/drawer.c
@@ -0,0 +1,806 @@
+/*
+ * MATE panel drawer module.
+ * (C) 1997 The Free Software Foundation
+ *
+ * Authors: Miguel de Icaza
+ * Federico Mena
+ * George Lebl
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "drawer.h"
+
+#include "applet.h"
+#include "button-widget.h"
+#include "panel-config-global.h"
+#include "panel-mateconf.h"
+#include "panel-profile.h"
+#include "panel-util.h"
+#include "xstuff.h"
+#include "panel-globals.h"
+#include "panel-lockdown.h"
+#include "panel-icon-names.h"
+
+static void
+drawer_click (GtkWidget *w, Drawer *drawer)
+{
+ if (!panel_toplevel_get_is_hidden (drawer->toplevel))
+ panel_toplevel_hide (drawer->toplevel, FALSE, -1);
+ else
+ panel_toplevel_unhide (drawer->toplevel);
+}
+
+static void
+toplevel_destroyed (GtkWidget *widget,
+ Drawer *drawer)
+{
+ drawer->toplevel = NULL;
+ gtk_widget_destroy (drawer->button);
+}
+
+static void
+destroy_drawer (GtkWidget *widget,
+ Drawer *drawer)
+{
+ MateConfClient *client;
+ int i;
+
+ client = panel_mateconf_get_client ();
+
+ for (i = 0; i < PANEL_DRAWER_N_LISTENERS; i++) {
+ if (drawer->listeners [i])
+ mateconf_client_notify_remove (client, drawer->listeners [i]);
+ drawer->listeners [i] = 0;
+ }
+
+ if (drawer->toplevel)
+ gtk_widget_destroy (GTK_WIDGET (drawer->toplevel));
+ drawer->toplevel = NULL;
+
+ if (drawer->close_timeout_id)
+ g_source_remove (drawer->close_timeout_id);
+ drawer->close_timeout_id = 0;
+}
+
+static void
+drawer_focus_panel_widget (Drawer *drawer,
+ GtkDirectionType direction)
+{
+ PanelWidget *panel_widget;
+
+ panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel);
+
+ gtk_window_present (GTK_WINDOW (drawer->toplevel));
+ gtk_container_set_focus_child (GTK_CONTAINER (panel_widget), NULL);
+ gtk_widget_child_focus (GTK_WIDGET (panel_widget), direction);
+}
+
+static gboolean
+key_press_drawer (GtkWidget *widget,
+ GdkEventKey *event,
+ Drawer *drawer)
+{
+ gboolean retval = TRUE;
+ GtkOrientation orient;
+
+ if (event->state & gtk_accelerator_get_default_mod_mask ())
+ return FALSE;
+
+ orient = PANEL_WIDGET (gtk_widget_get_parent (drawer->button))->orient;
+
+ switch (event->keyval) {
+ case GDK_Up:
+ case GDK_KP_Up:
+ if (orient == GTK_ORIENTATION_HORIZONTAL) {
+ if (!panel_toplevel_get_is_hidden (drawer->toplevel))
+ drawer_focus_panel_widget (drawer, GTK_DIR_TAB_BACKWARD);
+ } else {
+ /* let default focus movement happen */
+ retval = FALSE;
+ }
+ break;
+ case GDK_Left:
+ case GDK_KP_Left:
+ if (orient == GTK_ORIENTATION_VERTICAL) {
+ if (!panel_toplevel_get_is_hidden (drawer->toplevel))
+ drawer_focus_panel_widget (drawer, GTK_DIR_TAB_BACKWARD);
+ } else {
+ /* let default focus movement happen */
+ retval = FALSE;
+ }
+ break;
+ case GDK_Down:
+ case GDK_KP_Down:
+ if (orient == GTK_ORIENTATION_HORIZONTAL) {
+ if (!panel_toplevel_get_is_hidden (drawer->toplevel))
+ drawer_focus_panel_widget (drawer, GTK_DIR_TAB_FORWARD);
+ } else {
+ /* let default focus movement happen */
+ retval = FALSE;
+ }
+ break;
+ case GDK_Right:
+ case GDK_KP_Right:
+ if (orient == GTK_ORIENTATION_VERTICAL) {
+ if (!panel_toplevel_get_is_hidden (drawer->toplevel))
+ drawer_focus_panel_widget (drawer, GTK_DIR_TAB_FORWARD);
+ } else {
+ /* let default focus movement happen */
+ retval = FALSE;
+ }
+ break;
+ case GDK_Escape:
+ panel_toplevel_hide (drawer->toplevel, FALSE, -1);
+ break;
+ default:
+ retval = FALSE;
+ break;
+ }
+
+ return retval;
+}
+
+/*
+ * This function implements Esc moving focus from the drawer to the drawer
+ * icon and closing the drawer and Shift+Esc moving focus from the drawer
+ * to the drawer icon without closing the drawer when focus is in the drawer.
+ */
+static gboolean
+key_press_drawer_widget (GtkWidget *widget,
+ GdkEventKey *event,
+ Drawer *drawer)
+{
+ PanelWidget *panel_widget;
+
+ if (event->keyval != GDK_Escape)
+ return FALSE;
+
+ panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel);
+
+ gtk_window_present (GTK_WINDOW (panel_widget->toplevel));
+
+ if ((event->state & gtk_accelerator_get_default_mod_mask ()) == GDK_SHIFT_MASK ||
+ panel_toplevel_get_is_hidden (drawer->toplevel))
+ return TRUE;
+
+ panel_toplevel_hide (drawer->toplevel, FALSE, -1);
+
+ return TRUE;
+}
+
+static void
+drag_data_received_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time_,
+ Drawer *drawer)
+{
+ PanelWidget *panel_widget;
+
+ if (!panel_check_dnd_target_data (widget, context, &info, NULL)) {
+ gtk_drag_finish (context, FALSE, FALSE, time_);
+ return;
+ }
+
+ panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel);
+
+ panel_receive_dnd_data (
+ panel_widget, info, -1, selection_data, context, time_);
+}
+
+static gboolean
+drag_motion_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ int x,
+ int y,
+ guint time_,
+ Drawer *drawer)
+{
+ PanelWidget *panel_widget;
+ guint info = 0;
+
+ if (!panel_check_dnd_target_data (widget, context, &info, NULL))
+ return FALSE;
+
+ panel_widget = panel_toplevel_get_panel_widget (drawer->toplevel);
+
+ if (!panel_check_drop_forbidden (panel_widget, context, info, time_))
+ return FALSE;
+
+ if (drawer->close_timeout_id)
+ g_source_remove (drawer->close_timeout_id);
+ drawer->close_timeout_id = 0;
+
+ button_widget_set_dnd_highlight (BUTTON_WIDGET (widget), TRUE);
+
+ if (panel_toplevel_get_is_hidden (drawer->toplevel)) {
+ panel_toplevel_unhide (drawer->toplevel);
+ drawer->opened_for_drag = TRUE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+close_drawer_in_idle (gpointer data)
+{
+ Drawer *drawer = (Drawer *) data;
+
+ drawer->close_timeout_id = 0;
+
+ if (drawer->opened_for_drag) {
+ panel_toplevel_hide (drawer->toplevel, FALSE, -1);
+ drawer->opened_for_drag = FALSE;
+ }
+
+ return FALSE;
+}
+
+static void
+queue_drawer_close_for_drag (Drawer *drawer)
+{
+ if (!drawer->close_timeout_id)
+ drawer->close_timeout_id =
+ g_timeout_add_seconds (1, close_drawer_in_idle, drawer);
+}
+
+static void
+drag_leave_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ guint time_,
+ Drawer *drawer)
+{
+ queue_drawer_close_for_drag (drawer);
+
+ button_widget_set_dnd_highlight (BUTTON_WIDGET (widget), FALSE);
+}
+
+static gboolean
+drag_drop_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ int x,
+ int y,
+ guint time_,
+ Drawer *drawer)
+{
+ GdkAtom atom = NULL;
+
+ if (!panel_check_dnd_target_data (widget, context, NULL, &atom))
+ return FALSE;
+
+ gtk_drag_get_data (widget, context, atom, time_);
+
+ return TRUE;
+}
+
+static void
+drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ Drawer *drawer)
+{
+ char *foo;
+
+ foo = g_strdup_printf ("DRAWER:%d", panel_find_applet_index (widget));
+
+ gtk_selection_data_set (selection_data,
+ gtk_selection_data_get_target (selection_data), 8, (guchar *)foo,
+ strlen (foo));
+
+ g_free (foo);
+}
+
+static void
+set_tooltip_and_name (Drawer *drawer,
+ const char *tooltip)
+{
+ g_return_if_fail (drawer != NULL);
+ g_return_if_fail (tooltip != NULL);
+
+ if (tooltip && !tooltip [0])
+ tooltip = NULL;
+
+ panel_toplevel_set_name (drawer->toplevel, tooltip);
+ panel_util_set_tooltip_text (drawer->button, tooltip);
+}
+
+static Drawer *
+create_drawer_applet (PanelToplevel *toplevel,
+ PanelToplevel *parent_toplevel,
+ const char *tooltip,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ PanelOrientation orientation)
+{
+ Drawer *drawer;
+ AtkObject *atk_obj;
+
+ drawer = g_new0 (Drawer, 1);
+
+ drawer->toplevel = toplevel;
+
+ if (!use_custom_icon || !custom_icon || !custom_icon [0]) {
+ drawer->button = button_widget_new (PANEL_ICON_DRAWER, TRUE,
+ orientation);
+ } else {
+ drawer->button = button_widget_new (custom_icon, TRUE,
+ orientation);
+ }
+
+ if (!drawer->button) {
+ g_free (drawer);
+ return NULL;
+ }
+ atk_obj = gtk_widget_get_accessible (drawer->button);
+ atk_object_set_name (atk_obj, _("Drawer"));
+
+ set_tooltip_and_name (drawer, tooltip);
+
+ gtk_drag_dest_set (drawer->button, 0, NULL, 0, 0);
+
+ g_signal_connect (drawer->button, "drag_data_get",
+ G_CALLBACK (drag_data_get_cb), drawer);
+ g_signal_connect (drawer->button, "drag_data_received",
+ G_CALLBACK (drag_data_received_cb), drawer);
+ g_signal_connect (drawer->button, "drag_motion",
+ G_CALLBACK (drag_motion_cb), drawer);
+ g_signal_connect (drawer->button, "drag_leave",
+ G_CALLBACK (drag_leave_cb), drawer);
+ g_signal_connect (drawer->button, "drag_drop",
+ G_CALLBACK (drag_drop_cb), drawer);
+
+ g_signal_connect (drawer->button, "clicked",
+ G_CALLBACK (drawer_click), drawer);
+ g_signal_connect (drawer->button, "destroy",
+ G_CALLBACK (destroy_drawer), drawer);
+ g_signal_connect (drawer->button, "key_press_event",
+ G_CALLBACK (key_press_drawer), drawer);
+ g_signal_connect (toplevel, "destroy",
+ G_CALLBACK (toplevel_destroyed), drawer);
+
+ gtk_widget_show (drawer->button);
+
+ g_signal_connect (drawer->toplevel, "key_press_event",
+ G_CALLBACK (key_press_drawer_widget), drawer);
+
+ panel_toplevel_attach_to_widget (
+ toplevel, parent_toplevel, GTK_WIDGET (drawer->button));
+
+ return drawer;
+}
+
+static PanelToplevel *
+create_drawer_toplevel (const char *drawer_id)
+{
+ PanelToplevel *toplevel;
+ MateConfClient *client;
+ const char *key;
+ char *toplevel_id;
+
+ client = panel_mateconf_get_client ();
+
+ toplevel_id = panel_profile_find_new_id (PANEL_MATECONF_TOPLEVELS);
+
+ toplevel = panel_profile_load_toplevel (client, PANEL_CONFIG_DIR,
+ PANEL_MATECONF_TOPLEVELS, toplevel_id);
+
+ if (!toplevel) {
+ g_free (toplevel_id);
+ return NULL;
+ }
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer_id, "attached_toplevel_id");
+ mateconf_client_set_string (client, key, toplevel_id, NULL);
+ g_free (toplevel_id);
+
+ panel_profile_set_toplevel_enable_buttons (toplevel, TRUE);
+ panel_profile_set_toplevel_enable_arrows (toplevel, TRUE);
+
+ return toplevel;
+}
+
+static void
+drawer_button_size_allocated (GtkWidget *widget,
+ GtkAllocation *alloc,
+ Drawer *drawer)
+{
+ if (!gtk_widget_get_realized (widget))
+ return;
+
+ gtk_widget_queue_resize (GTK_WIDGET (drawer->toplevel));
+
+ g_object_set_data (G_OBJECT (widget), "allocated", GINT_TO_POINTER (TRUE));
+}
+
+static void
+panel_drawer_use_custom_icon_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ Drawer *drawer)
+{
+ gboolean use_custom_icon;
+ char *custom_icon = NULL;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ use_custom_icon = mateconf_value_get_bool (entry->value);
+
+ if (use_custom_icon) {
+ const char *key;
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer->info->id, "custom_icon");
+ custom_icon = mateconf_client_get_string (client, key, NULL);
+ }
+
+ button_widget_set_icon_name (BUTTON_WIDGET (drawer->button), custom_icon);
+
+ g_free (custom_icon);
+}
+
+static void
+panel_drawer_custom_icon_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ Drawer *drawer)
+{
+ const char *custom_icon;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ custom_icon = mateconf_value_get_string (entry->value);
+
+ if (custom_icon && custom_icon [0]) {
+ const char *key;
+ gboolean use_custom_icon;
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer->info->id, "use_custom_icon");
+ use_custom_icon = mateconf_client_get_bool (client, key, NULL);
+ if (use_custom_icon)
+ button_widget_set_icon_name (BUTTON_WIDGET (drawer->button), custom_icon);
+ }
+}
+
+static void
+panel_drawer_tooltip_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ Drawer *drawer)
+{
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ set_tooltip_and_name (drawer,
+ mateconf_value_get_string (entry->value));
+}
+
+static void
+panel_drawer_connect_to_mateconf (Drawer *drawer)
+{
+ MateConfClient *client;
+ const char *key;
+ int i = 0;
+
+ client = panel_mateconf_get_client ();
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer->info->id, "use_custom_icon");
+ drawer->listeners [i++] =
+ mateconf_client_notify_add (client, key,
+ (MateConfClientNotifyFunc) panel_drawer_use_custom_icon_changed,
+ drawer, NULL, NULL);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer->info->id, "custom_icon");
+ drawer->listeners [i++] =
+ mateconf_client_notify_add (client, key,
+ (MateConfClientNotifyFunc) panel_drawer_custom_icon_changed,
+ drawer, NULL, NULL);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer->info->id, "tooltip");
+ drawer->listeners [i++] =
+ mateconf_client_notify_add (client, key,
+ (MateConfClientNotifyFunc) panel_drawer_tooltip_changed,
+ drawer, NULL, NULL);
+
+ g_assert (i == PANEL_DRAWER_N_LISTENERS);
+}
+
+static gboolean
+drawer_changes_enabled (void)
+{
+ return !panel_lockdown_get_locked_down ();
+}
+
+static void
+load_drawer_applet (char *toplevel_id,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ const char *tooltip,
+ PanelToplevel *parent_toplevel,
+ gboolean locked,
+ int pos,
+ gboolean exactpos,
+ const char *id)
+{
+ PanelOrientation orientation;
+ PanelToplevel *toplevel = NULL;
+ Drawer *drawer = NULL;
+ PanelWidget *panel_widget;
+
+ orientation = panel_toplevel_get_orientation (parent_toplevel);
+
+ if (toplevel_id)
+ toplevel = panel_profile_get_toplevel_by_id (toplevel_id);
+
+ if (!toplevel)
+ toplevel = create_drawer_toplevel (id);
+
+ if (toplevel) {
+ panel_toplevel_hide (toplevel, FALSE, -1);
+ drawer = create_drawer_applet (toplevel,
+ parent_toplevel,
+ tooltip,
+ custom_icon,
+ use_custom_icon,
+ orientation);
+ }
+
+ if (!drawer)
+ return;
+
+ panel_widget = panel_toplevel_get_panel_widget (parent_toplevel);
+
+ drawer->info = mate_panel_applet_register (drawer->button, drawer,
+ (GDestroyNotify) g_free,
+ panel_widget,
+ locked, pos, exactpos,
+ PANEL_OBJECT_DRAWER, id);
+
+ if (!drawer->info) {
+ gtk_widget_destroy (GTK_WIDGET (toplevel));
+ return;
+ }
+
+ g_signal_connect_after (drawer->button, "size_allocate",
+ G_CALLBACK (drawer_button_size_allocated), drawer);
+
+ panel_widget_add_forbidden (panel_toplevel_get_panel_widget (drawer->toplevel));
+ panel_widget_set_applet_expandable (panel_widget, GTK_WIDGET (drawer->button), FALSE, TRUE);
+ panel_widget_set_applet_size_constrained (panel_widget, GTK_WIDGET (drawer->button), TRUE);
+
+ mate_panel_applet_add_callback (drawer->info,
+ "add",
+ GTK_STOCK_ADD,
+ _("_Add to Drawer..."),
+ drawer_changes_enabled);
+
+ mate_panel_applet_add_callback (drawer->info,
+ "properties",
+ GTK_STOCK_PROPERTIES,
+ _("_Properties"),
+ drawer_changes_enabled);
+
+ mate_panel_applet_add_callback (drawer->info,
+ "help",
+ GTK_STOCK_HELP,
+ _("_Help"),
+ NULL);
+
+ panel_drawer_connect_to_mateconf (drawer);
+}
+
+static void
+panel_drawer_prepare (const char *drawer_id,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ const char *tooltip,
+ char **attached_toplevel_id)
+{
+ MateConfClient *client;
+ const char *key;
+
+ client = panel_mateconf_get_client ();
+
+ if (tooltip) {
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer_id, "tooltip");
+ mateconf_client_set_string (client, key, tooltip, NULL);
+ }
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer_id, "use_custom_icon");
+ mateconf_client_set_bool (client, key, use_custom_icon, NULL);
+
+ if (custom_icon) {
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer_id, "custom_icon");
+ mateconf_client_set_string (client, key, custom_icon, NULL);
+ }
+
+ if (attached_toplevel_id) {
+ char *toplevel_id;
+ char *toplevel_dir;
+
+ toplevel_id = panel_profile_find_new_id (PANEL_MATECONF_TOPLEVELS);
+
+ toplevel_dir = g_strdup_printf (PANEL_CONFIG_DIR "/toplevels/%s",
+ toplevel_id);
+ panel_mateconf_associate_schemas_in_dir (client, toplevel_dir, PANEL_SCHEMAS_DIR "/toplevels");
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, drawer_id, "attached_toplevel_id");
+ mateconf_client_set_string (client, key, toplevel_id, NULL);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_TOPLEVELS, toplevel_id, "enable_buttons");
+ mateconf_client_set_bool (client, key, TRUE, NULL);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_TOPLEVELS, toplevel_id, "enable_arrows");
+ mateconf_client_set_bool (client, key, TRUE, NULL);
+
+ *attached_toplevel_id = toplevel_id;
+ }
+}
+
+void
+panel_drawer_create (PanelToplevel *toplevel,
+ int position,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ const char *tooltip)
+{
+ char *id;
+
+ id = panel_profile_prepare_object (PANEL_OBJECT_DRAWER, toplevel, position, FALSE);
+
+ panel_drawer_prepare (id, custom_icon, use_custom_icon, tooltip, NULL);
+
+ panel_profile_add_to_list (PANEL_MATECONF_OBJECTS, id);
+
+ g_free (id);
+}
+
+char *
+panel_drawer_create_with_id (const char *toplevel_id,
+ int position,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ const char *tooltip)
+{
+ char *id;
+ char *attached_toplevel_id = NULL;
+
+ id = panel_profile_prepare_object_with_id (PANEL_OBJECT_DRAWER, toplevel_id, position, FALSE);
+
+ panel_drawer_prepare (id, custom_icon, use_custom_icon, tooltip, &attached_toplevel_id);
+
+ panel_profile_add_to_list (PANEL_MATECONF_OBJECTS, id);
+
+ g_free (id);
+
+ return attached_toplevel_id;
+}
+
+void
+drawer_load_from_mateconf (PanelWidget *panel_widget,
+ gboolean locked,
+ gint position,
+ const char *id)
+{
+ MateConfClient *client;
+ const char *key;
+ gboolean use_custom_icon;
+ char *toplevel_id;
+ char *custom_icon;
+ char *tooltip;
+
+ g_return_if_fail (panel_widget != NULL);
+ g_return_if_fail (id != NULL);
+
+ client = panel_mateconf_get_client ();
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "attached_toplevel_id");
+ toplevel_id = mateconf_client_get_string (client, key, NULL);
+
+ panel_profile_load_toplevel (client, PANEL_CONFIG_DIR, PANEL_MATECONF_TOPLEVELS, toplevel_id);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "use_custom_icon");
+ use_custom_icon = mateconf_client_get_bool (client, key, NULL);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "custom_icon");
+ custom_icon = mateconf_client_get_string (client, key, NULL);
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "tooltip");
+ tooltip = mateconf_client_get_string (client, key, NULL);
+
+ load_drawer_applet (toplevel_id,
+ custom_icon,
+ use_custom_icon,
+ tooltip,
+ panel_widget->toplevel,
+ locked,
+ position,
+ TRUE,
+ id);
+
+ g_free (toplevel_id);
+ g_free (custom_icon);
+ g_free (tooltip);
+}
+
+void
+panel_drawer_set_dnd_enabled (Drawer *drawer,
+ gboolean dnd_enabled)
+{
+ if (dnd_enabled) {
+ static GtkTargetEntry dnd_targets[] = {
+ { "application/x-mate-panel-applet-internal", 0, 0 }
+ };
+
+ gtk_widget_set_has_window (drawer->button, TRUE);
+ gtk_drag_source_set (drawer->button,
+ GDK_BUTTON1_MASK,
+ dnd_targets, 1,
+ GDK_ACTION_MOVE);
+ //FIXME: we're forgetting the use_custom_icon case, here
+ gtk_drag_source_set_icon_name (drawer->button,
+ button_widget_get_icon_name (BUTTON_WIDGET (drawer->button)));
+
+ gtk_widget_set_has_window (drawer->button, FALSE);
+
+ } else
+ gtk_drag_source_unset (drawer->button);
+}
+
+static void
+drawer_deletion_response (GtkWidget *dialog,
+ int response,
+ Drawer *drawer)
+{
+ if (response == GTK_RESPONSE_OK)
+ panel_profile_delete_object (drawer->info);
+
+ gtk_widget_destroy (dialog);
+}
+
+void
+drawer_query_deletion (Drawer *drawer)
+{
+ GtkWidget *dialog;
+
+ if (drawer->toplevel) {
+ PanelWidget *panel_widget;
+
+ panel_widget = panel_toplevel_get_panel_widget (
+ drawer->toplevel);
+
+ if (!panel_global_config_get_confirm_panel_remove () ||
+ !g_list_length (panel_widget->applet_list)) {
+ panel_profile_delete_object (drawer->info);
+ return;
+ }
+
+ dialog = panel_deletion_dialog (drawer->toplevel);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (drawer_deletion_response),
+ drawer);
+
+ g_signal_connect_object (drawer->toplevel, "destroy",
+ G_CALLBACK (gtk_widget_destroy),
+ dialog,
+ G_CONNECT_SWAPPED);
+
+ gtk_widget_show_all (dialog);
+ }
+}
diff --git a/mate-panel/drawer.h b/mate-panel/drawer.h
new file mode 100644
index 00000000..800e1a86
--- /dev/null
+++ b/mate-panel/drawer.h
@@ -0,0 +1,52 @@
+#ifndef DRAWER_H
+#define DRAWER_H
+
+#include "panel.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PANEL_DRAWER_N_LISTENERS 3
+
+typedef struct {
+ char *tooltip;
+
+ PanelToplevel *toplevel;
+ GtkWidget *button;
+
+ gboolean opened_for_drag;
+ guint close_timeout_id;
+
+ AppletInfo *info;
+
+ guint listeners [PANEL_DRAWER_N_LISTENERS];
+} Drawer;
+
+void panel_drawer_create (PanelToplevel *toplevel,
+ int position,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ const char *tooltip);
+
+char *panel_drawer_create_with_id (const char *toplevel_id,
+ int position,
+ const char *custom_icon,
+ gboolean use_custom_icon,
+ const char *tooltip);
+
+void panel_drawer_set_dnd_enabled (Drawer *drawer,
+ gboolean dnd_enabled);
+
+void drawer_load_from_mateconf (PanelWidget *panel_widget,
+ gboolean locked,
+ gint position,
+ const char *id);
+
+void drawer_query_deletion (Drawer *drawer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/mate-panel/launcher.c b/mate-panel/launcher.c
new file mode 100644
index 00000000..657bc0c8
--- /dev/null
+++ b/mate-panel/launcher.c
@@ -0,0 +1,1114 @@
+/*
+ * MATE panel launcher module.
+ * (C) 1997,1998,1999,2000 The Free Software Foundation
+ * (C) 2000 Eazel, Inc.
+ *
+ * Authors: Miguel de Icaza
+ * Federico Mena
+ * CORBAized by George Lebl
+ * de-CORBAized by George Lebl
+ *
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gdk/gdkx.h>
+
+#include <libpanel-util/panel-error.h>
+#include <libpanel-util/panel-glib.h>
+#include <libpanel-util/panel-keyfile.h>
+#include <libpanel-util/panel-launch.h>
+#include <libpanel-util/panel-show.h>
+
+#include "launcher.h"
+
+#include "button-widget.h"
+#include "panel-util.h"
+#include "panel-config-global.h"
+#include "panel-mateconf.h"
+#include "panel-profile.h"
+#include "xstuff.h"
+#include "panel-toplevel.h"
+#include "panel-a11y.h"
+#include "panel-globals.h"
+#include "panel-multiscreen.h"
+#include "panel-lockdown.h"
+#include "panel-compatibility.h"
+#include "panel-ditem-editor.h"
+#include "panel-icon-names.h"
+
+static GdkScreen *
+launcher_get_screen (Launcher *launcher)
+{
+ PanelWidget *panel_widget;
+
+ g_return_val_if_fail (launcher != NULL, NULL);
+ g_return_val_if_fail (launcher->info != NULL, NULL);
+ g_return_val_if_fail (launcher->info->widget != NULL, NULL);
+
+ panel_widget = PANEL_WIDGET (gtk_widget_get_parent (launcher->info->widget));
+
+ return gtk_window_get_screen (GTK_WINDOW (panel_widget->toplevel));
+}
+
+static void
+launcher_widget_open_dialog_destroyed (GtkWidget *dialog,
+ Launcher *launcher)
+{
+ g_return_if_fail (launcher->error_dialogs != NULL);
+
+ launcher->error_dialogs = g_slist_remove (launcher->error_dialogs, dialog);
+}
+
+static void
+launcher_widget_destroy_open_dialogs (Launcher *launcher)
+{
+ GSList *l, *list;
+
+ list = launcher->error_dialogs;
+ launcher->error_dialogs = NULL;
+
+ for (l = list; l; l = l->next) {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (l->data),
+ G_CALLBACK (launcher_widget_open_dialog_destroyed),
+ launcher);
+ gtk_widget_destroy (l->data);
+ }
+ g_slist_free (list);
+}
+
+static void
+launcher_register_error_dialog (Launcher *launcher,
+ GtkWidget *dialog)
+{
+ launcher->error_dialogs = g_slist_append (launcher->error_dialogs,
+ dialog);
+ g_signal_connect (dialog, "destroy",
+ G_CALLBACK (launcher_widget_open_dialog_destroyed),
+ launcher);
+}
+
+static void
+launch_url (Launcher *launcher)
+{
+ char *url;
+ GdkScreen *screen;
+
+ g_return_if_fail (launcher != NULL);
+ g_return_if_fail (launcher->key_file != NULL);
+
+ /* FIXME panel_ditem_launch() should be enough for this! */
+ url = panel_key_file_get_string (launcher->key_file, "URL");
+
+ screen = launcher_get_screen (launcher);
+
+ if (!url || *url == 0) {
+ GtkWidget *error_dialog;
+
+ error_dialog = panel_error_dialog (NULL, screen,
+ "no_url_dialog", TRUE,
+ _("Could not show this URL"),
+ _("No URL was specified."));
+ launcher_register_error_dialog (launcher, error_dialog);
+ g_free (url);
+ return;
+ }
+
+ panel_show_uri (screen, url, gtk_get_current_event_time (), NULL);
+
+ g_free (url);
+}
+
+void
+launcher_launch (Launcher *launcher,
+ GtkWidget *widget)
+{
+ char *type;
+
+ g_return_if_fail (launcher != NULL);
+ g_return_if_fail (launcher->key_file != NULL);
+
+ if (panel_global_config_get_enable_animations ())
+ xstuff_zoom_animate (widget,
+ button_widget_get_pixbuf (BUTTON_WIDGET (widget)),
+ button_widget_get_orientation (BUTTON_WIDGET (widget)),
+ NULL);
+
+ type = panel_key_file_get_string (launcher->key_file, "Type");
+ if (type && !strcmp (type, "Link"))
+ launch_url (launcher);
+ else {
+ GError *error = NULL;
+
+ panel_launch_key_file (launcher->key_file, NULL,
+ launcher_get_screen (launcher), &error);
+ if (error) {
+ GtkWidget *error_dialog;
+
+ error_dialog = panel_error_dialog (
+ NULL,
+ launcher_get_screen (launcher),
+ "cannot_launch_application",
+ TRUE,
+ _("Could not launch application"),
+ error->message);
+ launcher_register_error_dialog (launcher, error_dialog);
+ g_clear_error (&error);
+ }
+ }
+ g_free (type);
+
+ if (panel_global_config_get_drawer_auto_close ()) {
+ PanelToplevel *toplevel;
+ PanelToplevel *parent;
+
+ toplevel = PANEL_WIDGET (gtk_widget_get_parent (launcher->button))->toplevel;
+
+ if (panel_toplevel_get_is_attached (toplevel)) {
+ parent = panel_toplevel_get_attach_toplevel (toplevel);
+
+ while (panel_toplevel_get_is_attached (parent)) {
+ toplevel = parent;
+ parent = panel_toplevel_get_attach_toplevel (toplevel);
+ }
+
+ panel_toplevel_hide (toplevel, FALSE, -1);
+ }
+ }
+}
+
+static void
+drag_data_received_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ Launcher *launcher)
+{
+ GError *error = NULL;
+ char **uris;
+ int i;
+ GList *file_list;
+
+ if (panel_global_config_get_enable_animations ())
+ xstuff_zoom_animate (widget,
+ button_widget_get_pixbuf (BUTTON_WIDGET (widget)),
+ button_widget_get_orientation (BUTTON_WIDGET (widget)),
+ NULL);
+
+ file_list = NULL;
+ uris = g_uri_list_extract_uris ((const char *) gtk_selection_data_get_data (selection_data));
+ for (i = 0; uris[i]; i++)
+ file_list = g_list_prepend (file_list, uris[i]);
+ file_list = g_list_reverse (file_list);
+
+ panel_launch_key_file (launcher->key_file, file_list,
+ launcher_get_screen (launcher), &error);
+
+ g_list_free (file_list);
+ g_strfreev (uris);
+
+ if (error) {
+ GtkWidget *error_dialog;
+ error_dialog = panel_error_dialog (NULL,
+ launcher_get_screen (launcher),
+ "cannot_use_dropped_item",
+ TRUE,
+ _("Could not use dropped item"),
+ error->message);
+ launcher_register_error_dialog (launcher, error_dialog);
+ g_clear_error (&error);
+ }
+
+ gtk_drag_finish (context, TRUE, FALSE, time);
+}
+
+static void
+destroy_launcher (GtkWidget *widget,
+ Launcher *launcher)
+{
+ launcher_properties_destroy (launcher);
+ launcher_widget_destroy_open_dialogs (launcher);
+}
+
+void
+launcher_properties_destroy (Launcher *launcher)
+{
+ GtkWidget *dialog;
+
+ dialog = launcher->prop_dialog;
+ launcher->prop_dialog = NULL;
+
+ if (dialog)
+ gtk_widget_destroy (dialog);
+}
+
+static void
+free_launcher (gpointer data)
+{
+ Launcher *launcher = data;
+
+ if (launcher->key_file)
+ g_key_file_free (launcher->key_file);
+ launcher->key_file = NULL;
+
+ if (launcher->location != NULL)
+ g_free (launcher->location);
+ launcher->location = NULL;
+
+ g_free (launcher);
+}
+
+void
+panel_launcher_delete (Launcher *launcher)
+{
+ if (!launcher->location)
+ return;
+
+ /* do not remove the file if it's not in the user's launchers path */
+ if (panel_launcher_is_in_personal_path (launcher->location)) {
+ GError *error;
+ GFile *file;
+
+ file = panel_launcher_get_gfile (launcher->location);
+
+ error = NULL;
+ if (!g_file_delete (file, NULL, &error)) {
+ char *path;
+
+ path = g_file_get_path (file);
+ g_warning ("Error deleting '%s': %s\n",
+ path, error->message);
+ g_free (path);
+ g_error_free (error);
+ }
+
+ g_object_unref (file);
+ }
+}
+
+static gboolean
+is_this_drop_ok (GtkWidget *widget,
+ GdkDragContext *context)
+{
+ static GdkAtom text_uri_list = GDK_NONE;
+ GList *l;
+ GtkWidget *source;
+
+ source = gtk_drag_get_source_widget (context);
+
+ if (source == widget)
+ return FALSE;
+
+ if (!(gdk_drag_context_get_actions (context) & GDK_ACTION_COPY))
+ return FALSE;
+
+ if (!text_uri_list)
+ text_uri_list = gdk_atom_intern_static_string ("text/uri-list");
+
+ for (l = gdk_drag_context_list_targets (context); l; l = l->next) {
+ if (GDK_POINTER_TO_ATOM (l->data) == text_uri_list)
+ break;
+ }
+
+ return l ? TRUE : FALSE;
+}
+
+static void
+drag_leave_cb(GtkWidget *widget,
+ GdkDragContext *context,
+ guint time,
+ Launcher *launcher)
+{
+ button_widget_set_dnd_highlight(BUTTON_WIDGET(widget), FALSE);
+}
+
+
+static gboolean
+drag_motion_cb(GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ Launcher *launcher)
+{
+ if ( ! is_this_drop_ok (widget, context))
+ return FALSE;
+
+ gdk_drag_status (context, GDK_ACTION_COPY, time);
+
+ button_widget_set_dnd_highlight(BUTTON_WIDGET(widget), TRUE);
+
+ return TRUE;
+}
+
+static gboolean
+drag_drop_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ Launcher *launcher)
+{
+ static GdkAtom text_uri_list = NULL;
+
+ if ( ! is_this_drop_ok (widget, context))
+ return FALSE;
+
+ if (text_uri_list == NULL)
+ text_uri_list = gdk_atom_intern_static_string ("text/uri-list");
+
+ gtk_drag_get_data (widget, context, text_uri_list, time);
+
+ return TRUE;
+}
+
+enum {
+ TARGET_ICON_INTERNAL,
+ TARGET_URI_LIST
+};
+
+
+static void
+drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ Launcher *launcher)
+{
+ char *location;
+
+ g_return_if_fail (launcher != NULL);
+
+ location = launcher->location;
+
+ if (info == TARGET_URI_LIST) {
+ char *uri[2];
+
+ uri[0] = panel_launcher_get_uri (location);
+ uri[1] = NULL;
+
+ gtk_selection_data_set_uris (selection_data, uri);
+
+ g_free (uri[0]);
+ } else if (info == TARGET_ICON_INTERNAL)
+ gtk_selection_data_set (selection_data,
+ gtk_selection_data_get_target (selection_data), 8,
+ (unsigned char *) location,
+ strlen (location));
+
+}
+
+static Launcher *
+create_launcher (const char *location)
+{
+ GKeyFile *key_file;
+ gboolean loaded;
+ Launcher *launcher;
+ GError *error = NULL;
+ char *new_location;
+
+ if (!location) {
+ g_printerr (_("No URI provided for panel launcher desktop file\n"));
+ return NULL;
+ }
+
+ new_location = NULL;
+ key_file = g_key_file_new ();
+
+ if (!strchr (location, G_DIR_SEPARATOR)) {
+ /* try to first load a file in our config directory, and if it
+ * doesn't exist there, try to find it in the xdg data dirs */
+ char *path;
+
+ path = panel_make_full_path (NULL, location);
+
+ if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
+ g_free (path);
+ path = panel_g_lookup_in_applications_dirs (location);
+ /* it's important to keep the full path if the desktop
+ * file comes from a data dir: when the user will edit
+ * it, we'll want to save it in PANEL_LAUNCHERS_PATH
+ * with a random name (and not evolution.desktop, eg)
+ * and having only a basename as location will make
+ * this impossible */
+ if (path)
+ new_location = g_strdup (path);
+ }
+
+ if (path) {
+ loaded = g_key_file_load_from_file (key_file, path,
+ G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
+ &error);
+ g_free (path);
+ }
+ } else
+ loaded = panel_key_file_load_from_uri (key_file, location,
+ G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,
+ &error);
+
+ if (!loaded) {
+ g_printerr (_("Unable to open desktop file %s for panel launcher%s%s\n"),
+ location,
+ error ? ": " : "",
+ error ? error->message : "");
+ if (error)
+ g_error_free (error);
+
+ g_key_file_free (key_file);
+
+ return NULL; /*button is null*/
+ }
+
+ if (!new_location)
+ new_location = g_strdup (location);
+
+ launcher = g_new0 (Launcher, 1);
+
+ launcher->info = NULL;
+ launcher->button = NULL;
+ launcher->location = new_location;
+ launcher->key_file = key_file;
+ launcher->prop_dialog = NULL;
+ launcher->destroy_handler = 0;
+
+ /* Icon will be setup later */
+ launcher->button = button_widget_new (NULL /* icon */,
+ FALSE,
+ PANEL_ORIENTATION_TOP);
+
+ gtk_widget_show (launcher->button);
+
+ /*gtk_drag_dest_set (GTK_WIDGET (launcher->button),
+ GTK_DEST_DEFAULT_ALL,
+ dnd_targets, 2,
+ GDK_ACTION_COPY);*/
+ gtk_drag_dest_set (GTK_WIDGET (launcher->button),
+ 0, NULL, 0, 0);
+
+ g_signal_connect (launcher->button, "drag_data_get",
+ G_CALLBACK (drag_data_get_cb), launcher);
+ g_signal_connect (launcher->button, "drag_data_received",
+ G_CALLBACK (drag_data_received_cb), launcher);
+ g_signal_connect (launcher->button, "drag_motion",
+ G_CALLBACK (drag_motion_cb), launcher);
+ g_signal_connect (launcher->button, "drag_drop",
+ G_CALLBACK (drag_drop_cb), launcher);
+ g_signal_connect (launcher->button, "drag_leave",
+ G_CALLBACK (drag_leave_cb), launcher);
+ g_signal_connect_swapped (launcher->button, "clicked",
+ G_CALLBACK (launcher_launch), launcher);
+
+ launcher->destroy_handler =
+ g_signal_connect (launcher->button, "destroy",
+ G_CALLBACK (destroy_launcher),
+ launcher);
+
+ return launcher;
+}
+
+static void
+setup_button (Launcher *launcher)
+{
+ char *comment;
+ char *name;
+ char *str;
+ char *icon;
+ char *unescaped_str;
+
+ g_return_if_fail (launcher != NULL);
+
+ name = panel_key_file_get_locale_string (launcher->key_file, "Name");
+ comment = panel_key_file_get_locale_string (launcher->key_file,
+ "Comment");
+
+ /* Setup tooltip */
+ if (!PANEL_GLIB_STR_EMPTY (name) && !PANEL_GLIB_STR_EMPTY (comment))
+ str = g_strdup_printf ("%s\n%s", name, comment);
+ else if (!PANEL_GLIB_STR_EMPTY (name))
+ str = g_strdup (name);
+ else
+ str = g_strdup (comment);
+
+ g_free (name);
+ g_free (comment);
+
+ /* If we can unescape the string, then we probably have an escaped
+ * string (a location e.g.). If we can't, then it most probably means
+ * we have a % that is not here to encode a character, and we don't
+ * want to unescape in this case. See bug #170516 for details. */
+ unescaped_str = g_uri_unescape_string (str, NULL);
+ if (unescaped_str) {
+ g_free (str);
+ str = unescaped_str;
+ }
+
+ panel_util_set_tooltip_text (launcher->button, str);
+
+ /* Setup accessible name */
+ panel_a11y_set_atk_name_desc (launcher->button, str, NULL);
+
+ g_free (str);
+
+ /* Setup icon */
+ icon = panel_key_file_get_locale_string (launcher->key_file, "Icon");
+ if (icon && icon[0] == '\0') {
+ g_free (icon);
+ icon = NULL;
+ }
+
+ if (!icon)
+ icon = guess_icon_from_exec (button_widget_get_icon_theme (BUTTON_WIDGET (launcher->button)),
+ launcher->key_file);
+ if (!icon)
+ icon = g_strdup (PANEL_ICON_LAUNCHER);
+
+ button_widget_set_icon_name (BUTTON_WIDGET (launcher->button), icon);
+ g_free (icon);
+}
+
+static char *
+panel_launcher_find_writable_uri (const char *launcher_location,
+ const char *source)
+{
+ char *path;
+ char *uri;
+
+ if (!launcher_location)
+ return panel_make_unique_desktop_uri (NULL, source);
+
+ if (!strchr (launcher_location, G_DIR_SEPARATOR)) {
+ path = panel_make_full_path (NULL, launcher_location);
+ uri = g_filename_to_uri (path, NULL, NULL);
+ g_free (path);
+ return uri;
+ }
+
+ if (panel_launcher_get_filename (launcher_location) != NULL) {
+ /* we have a file in the user directory. We either have a path
+ * or an URI */
+ if (g_path_is_absolute (launcher_location))
+ return g_filename_to_uri (launcher_location,
+ NULL, NULL);
+ else
+ return g_strdup (launcher_location);
+ }
+
+ return panel_make_unique_desktop_uri (NULL, source);
+}
+
+static void
+launcher_changed (PanelDItemEditor *dialog,
+ Launcher *launcher)
+{
+ /* Setup the button look */
+ setup_button (launcher);
+}
+
+static void
+launcher_command_changed (PanelDItemEditor *dialog,
+ const char *command,
+ Launcher *launcher)
+{
+ char *exec;
+ char *old_exec;
+ GKeyFile *revert_key_file;
+
+ revert_key_file = panel_ditem_editor_get_revert_key_file (dialog);
+
+ if (revert_key_file) {
+ exec = panel_key_file_get_string (launcher->key_file, "Exec");
+ old_exec = panel_key_file_get_string (revert_key_file, "Exec");
+
+ if (!old_exec || !exec || strcmp (old_exec, exec))
+ panel_key_file_remove_key (launcher->key_file,
+ "StartupNotify");
+
+ g_free (exec);
+ g_free (old_exec);
+ }
+}
+
+static char *
+launcher_save_uri (PanelDItemEditor *dialog,
+ gpointer data)
+{
+ GKeyFile *key_file;
+ char *type;
+ char *exec_or_uri;
+ Launcher *launcher;
+ char *new_uri;
+ const char *uri;
+
+ key_file = panel_ditem_editor_get_key_file (dialog);
+ type = panel_key_file_get_string (key_file, "Type");
+ if (type && !strcmp (type, "Application"))
+ exec_or_uri = panel_key_file_get_string (key_file, "Exec");
+ else if (type && !strcmp (type, "Link"))
+ exec_or_uri = panel_key_file_get_string (key_file, "URL");
+ else
+ exec_or_uri = panel_key_file_get_string (key_file, "Name");
+ g_free (type);
+
+ launcher = (Launcher *) data;
+
+ if (launcher)
+ new_uri = panel_launcher_find_writable_uri (launcher->location,
+ exec_or_uri);
+ else
+ new_uri = panel_launcher_find_writable_uri (NULL, exec_or_uri);
+
+ g_free (exec_or_uri);
+
+ uri = panel_ditem_editor_get_uri (dialog);
+
+ if (!uri || (new_uri && strcmp (new_uri, uri)))
+ return new_uri;
+
+ g_free (new_uri);
+
+ return NULL;
+}
+
+static void
+launcher_saved (GtkWidget *dialog,
+ Launcher *launcher)
+{
+ const char *uri;
+ MateConfClient *client;
+ const char *key;
+
+ uri = panel_ditem_editor_get_uri (PANEL_DITEM_EDITOR (dialog));
+ if (panel_launcher_get_filename (uri) != NULL)
+ uri = panel_launcher_get_filename (uri);
+
+ if (uri && launcher->location && strcmp (uri, launcher->location)) {
+ client = panel_mateconf_get_client ();
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS,
+ launcher->info->id,
+ "launcher_location");
+
+ mateconf_client_set_string (client, key, uri, NULL);
+
+ if (launcher->location)
+ g_free (launcher->location);
+ launcher->location = g_strdup (uri);
+ }
+}
+
+static void
+launcher_error_reported (GtkWidget *dialog,
+ const char *primary,
+ const char *secondary,
+ gpointer data)
+{
+ panel_error_dialog (GTK_WINDOW (dialog), NULL,
+ "error_editing_launcher", TRUE,
+ primary, secondary);
+}
+
+void
+launcher_properties (Launcher *launcher)
+{
+ if (launcher->prop_dialog != NULL) {
+ gtk_window_set_screen (GTK_WINDOW (launcher->prop_dialog),
+ gtk_widget_get_screen (launcher->button));
+ gtk_window_present (GTK_WINDOW (launcher->prop_dialog));
+ return;
+ }
+
+ launcher->prop_dialog = panel_ditem_editor_new (NULL,
+ launcher->key_file,
+ launcher->location,
+ _("Launcher Properties"));
+
+ panel_widget_register_open_dialog (PANEL_WIDGET
+ (gtk_widget_get_parent (launcher->info->widget)),
+ launcher->prop_dialog);
+
+ panel_ditem_register_save_uri_func (PANEL_DITEM_EDITOR (launcher->prop_dialog),
+ launcher_save_uri,
+ launcher);
+
+ g_signal_connect (launcher->prop_dialog, "changed",
+ G_CALLBACK (launcher_changed), launcher);
+
+ g_signal_connect (launcher->prop_dialog, "command_changed",
+ G_CALLBACK (launcher_command_changed), launcher);
+
+ g_signal_connect (launcher->prop_dialog, "saved",
+ G_CALLBACK (launcher_saved), launcher);
+
+ g_signal_connect (launcher->prop_dialog, "error_reported",
+ G_CALLBACK (launcher_error_reported), NULL);
+
+ g_signal_connect (launcher->prop_dialog, "destroy",
+ G_CALLBACK (gtk_widget_destroyed),
+ &launcher->prop_dialog);
+
+ gtk_widget_show (launcher->prop_dialog);
+}
+
+static gboolean
+lancher_properties_enabled (void)
+{
+ if (panel_lockdown_get_locked_down () ||
+ panel_lockdown_get_disable_command_line ())
+ return FALSE;
+
+ return TRUE;
+}
+
+static Launcher *
+load_launcher_applet (const char *location,
+ PanelWidget *panel,
+ gboolean locked,
+ int pos,
+ gboolean exactpos,
+ const char *id)
+{
+ Launcher *launcher;
+
+ launcher = create_launcher (location);
+
+ if (!launcher)
+ return NULL;
+
+ launcher->info = mate_panel_applet_register (launcher->button, launcher,
+ free_launcher,
+ panel, locked, pos, exactpos,
+ PANEL_OBJECT_LAUNCHER, id);
+ if (!launcher->info) {
+ free_launcher (launcher);
+ return NULL;
+ }
+
+ mate_panel_applet_add_callback (launcher->info,
+ "launch",
+ GTK_STOCK_EXECUTE,
+ _("_Launch"),
+ NULL);
+
+ mate_panel_applet_add_callback (launcher->info,
+ "properties",
+ GTK_STOCK_PROPERTIES,
+ _("_Properties"),
+ lancher_properties_enabled);
+
+ panel_widget_set_applet_expandable (panel, GTK_WIDGET (launcher->button), FALSE, TRUE);
+ panel_widget_set_applet_size_constrained (panel, GTK_WIDGET (launcher->button), TRUE);
+
+ /* setup button according to ditem */
+ setup_button (launcher);
+
+ return launcher;
+}
+
+void
+launcher_load_from_mateconf (PanelWidget *panel_widget,
+ gboolean locked,
+ int position,
+ const char *id)
+{
+ MateConfClient *client;
+ Launcher *launcher;
+ const char *key;
+ char *launcher_location;
+
+ g_return_if_fail (panel_widget != NULL);
+ g_return_if_fail (id != NULL);
+
+ client = panel_mateconf_get_client ();
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "launcher_location");
+ panel_compatibility_migrate_applications_scheme (client, key);
+ launcher_location = mateconf_client_get_string (client, key, NULL);
+
+ if (!launcher_location) {
+ g_printerr (_("Key %s is not set, cannot load launcher\n"),
+ key);
+ return;
+ }
+
+ launcher = load_launcher_applet (launcher_location,
+ panel_widget,
+ locked,
+ position,
+ TRUE,
+ id);
+
+ if (launcher) {
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS, id, "launcher_location");
+ if (!mateconf_client_key_is_writable (client, key, NULL)) {
+ AppletUserMenu *menu;
+
+ menu = mate_panel_applet_get_callback (launcher->info->user_menu,
+ "properties");
+ if (menu != NULL)
+ menu->sensitive = FALSE;
+ }
+ }
+
+ g_free (launcher_location);
+}
+
+static void
+launcher_new_saved (GtkWidget *dialog,
+ gpointer data)
+{
+ PanelWidget *panel;
+ int pos;
+ const char *uri;
+
+ pos = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dialog), "pos"));
+ panel = g_object_get_data (G_OBJECT (dialog), "panel");
+
+ uri = panel_ditem_editor_get_uri (PANEL_DITEM_EDITOR (dialog));
+ if (panel_launcher_get_filename (uri) != NULL)
+ uri = panel_launcher_get_filename (uri);
+ panel_launcher_create (panel->toplevel, pos, uri);
+}
+
+void
+ask_about_launcher (const char *file,
+ PanelWidget *panel,
+ int pos,
+ gboolean exactpos)
+{
+ GtkWidget *dialog;
+ GKeyFile *key_file;
+
+ if (panel_lockdown_get_disable_command_line ())
+ return;
+
+ dialog = panel_ditem_editor_new (NULL, NULL, NULL,
+ _("Create Launcher"));
+ panel_widget_register_open_dialog (panel, dialog);
+
+ key_file = panel_ditem_editor_get_key_file (PANEL_DITEM_EDITOR (dialog));
+ if (file != NULL)
+ panel_key_file_set_string (key_file, "Exec", file);
+ panel_key_file_set_string (key_file, "Type", "Application");
+ panel_ditem_editor_sync_display (PANEL_DITEM_EDITOR (dialog));
+
+ panel_ditem_register_save_uri_func (PANEL_DITEM_EDITOR (dialog),
+ launcher_save_uri,
+ NULL);
+
+ g_signal_connect (G_OBJECT (dialog), "saved",
+ G_CALLBACK (launcher_new_saved), NULL);
+
+ g_signal_connect (G_OBJECT (dialog), "error_reported",
+ G_CALLBACK (launcher_error_reported), NULL);
+
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (GTK_WIDGET (panel)));
+
+ g_object_set_data (G_OBJECT (dialog), "pos", GINT_TO_POINTER (pos));
+ g_object_set_data (G_OBJECT (dialog), "panel", panel);
+
+ gtk_widget_show (dialog);
+}
+
+void
+panel_launcher_create_from_info (PanelToplevel *toplevel,
+ int position,
+ gboolean exec_info,
+ const char *exec_or_uri,
+ const char *name,
+ const char *comment,
+ const char *icon)
+{
+ GKeyFile *key_file;
+ char *location;
+ GError *error;
+
+ key_file = panel_key_file_new_desktop ();
+
+ /* set current language and the "C" locale to this name,
+ * this is kind of evil... */
+ panel_key_file_set_string (key_file, "Name", name);
+ panel_key_file_set_string (key_file, "Comment", comment);
+ panel_key_file_set_string (key_file, "Icon", icon);
+ panel_key_file_set_locale_string (key_file, "Name", name);
+ panel_key_file_set_locale_string (key_file, "Comment", comment);
+ panel_key_file_set_locale_string (key_file, "Icon", icon);
+
+ if (exec_info) {
+ panel_key_file_set_string (key_file, "Exec", exec_or_uri);
+ panel_key_file_set_string (key_file, "Type", "Application");
+ } else {
+ panel_key_file_set_string (key_file, "URL", exec_or_uri);
+ panel_key_file_set_string (key_file, "Type", "Link");
+ }
+
+ location = panel_make_unique_desktop_uri (NULL, exec_or_uri);
+
+ error = NULL;
+ if (panel_key_file_to_file (key_file, location, &error)) {
+ panel_launcher_create (toplevel, position, location);
+ } else {
+ panel_error_dialog (GTK_WINDOW (toplevel),
+ gtk_window_get_screen (GTK_WINDOW (toplevel)),
+ "cannot_save_launcher", TRUE,
+ _("Could not save launcher"),
+ error->message);
+ g_error_free (error);
+ }
+
+ g_key_file_free (key_file);
+}
+
+void
+panel_launcher_create_with_id (const char *toplevel_id,
+ int position,
+ const char *location)
+{
+ MateConfClient *client;
+ const char *key;
+ char *id;
+ char *no_uri;
+ const char *new_location;
+
+ g_return_if_fail (location != NULL);
+
+ client = panel_mateconf_get_client ();
+
+ id = panel_profile_prepare_object_with_id (PANEL_OBJECT_LAUNCHER,
+ toplevel_id,
+ position,
+ FALSE);
+
+ no_uri = NULL;
+ /* if we have an URI, it might contain escaped characters (? : etc)
+ * that might get unescaped on disk */
+ if (!g_ascii_strncasecmp (location, "file:", strlen ("file:")))
+ no_uri = g_filename_from_uri (location, NULL, NULL);
+ if (!no_uri)
+ no_uri = g_strdup (location);
+
+ new_location = panel_launcher_get_filename (no_uri);
+ if (new_location == NULL)
+ new_location = no_uri;
+
+ key = panel_mateconf_full_key (PANEL_MATECONF_OBJECTS,
+ id,
+ "launcher_location");
+ mateconf_client_set_string (client, key, new_location, NULL);
+
+ panel_profile_add_to_list (PANEL_MATECONF_OBJECTS, id);
+
+ g_free (no_uri);
+ g_free (id);
+}
+
+void
+panel_launcher_create (PanelToplevel *toplevel,
+ int position,
+ const char *location)
+{
+ panel_launcher_create_with_id (panel_profile_get_toplevel_id (toplevel),
+ position,
+ location);
+}
+
+gboolean
+panel_launcher_create_copy (PanelToplevel *toplevel,
+ int position,
+ const char *location)
+{
+ char *new_location;
+ GFile *source;
+ GFile *dest;
+ gboolean copied;
+ const char *filename;
+
+ new_location = panel_make_unique_desktop_uri (NULL, location);
+
+ source = panel_launcher_get_gfile (location);
+ dest = g_file_new_for_uri (new_location);
+
+ copied = g_file_copy (source, dest, G_FILE_COPY_OVERWRITE,
+ NULL, NULL, NULL, NULL);
+
+ if (!copied) {
+ g_free (new_location);
+ return FALSE;
+ }
+
+ filename = panel_launcher_get_filename (new_location);
+ panel_launcher_create (toplevel, position, filename);
+ g_free (new_location);
+
+ return TRUE;
+}
+
+Launcher *
+find_launcher (const char *path)
+{
+ GSList *l;
+
+ g_return_val_if_fail (path != NULL, NULL);
+
+ for (l = mate_panel_applet_list_applets (); l; l = l->next) {
+ AppletInfo *info = l->data;
+ Launcher *launcher;
+
+ if (info->type != PANEL_OBJECT_LAUNCHER)
+ continue;
+
+ launcher = info->data;
+
+ if (launcher->key_file == NULL)
+ continue;
+
+ if (launcher->location != NULL &&
+ strcmp (launcher->location, path) == 0)
+ return launcher;
+ }
+
+ return NULL;
+}
+
+void
+panel_launcher_set_dnd_enabled (Launcher *launcher,
+ gboolean dnd_enabled)
+{
+ GdkPixbuf *pixbuf;
+
+ if (dnd_enabled) {
+ static GtkTargetEntry dnd_targets[] = {
+ { "application/x-panel-icon-internal", 0, TARGET_ICON_INTERNAL },
+ { "text/uri-list", 0, TARGET_URI_LIST }
+ };
+
+ gtk_widget_set_has_window (launcher->button, TRUE);
+ gtk_drag_source_set (launcher->button,
+ GDK_BUTTON1_MASK,
+ dnd_targets, 2,
+ GDK_ACTION_COPY | GDK_ACTION_MOVE);
+ //FIXME: this doesn't work since the pixbuf isn't loaded yet
+ pixbuf = button_widget_get_pixbuf (BUTTON_WIDGET (launcher->button));
+ if (pixbuf) {
+ gtk_drag_source_set_icon_pixbuf (launcher->button,
+ pixbuf);
+ g_object_unref (pixbuf);
+ }
+ gtk_widget_set_has_window (launcher->button, FALSE);
+
+
+ } else
+ gtk_drag_source_unset (launcher->button);
+}
diff --git a/mate-panel/launcher.h b/mate-panel/launcher.h
new file mode 100644
index 00000000..1b2d7b88
--- /dev/null
+++ b/mate-panel/launcher.h
@@ -0,0 +1,80 @@
+/*
+ * MATE panel launcher module.
+ * (C) 1997 The Free Software Foundation
+ *
+ * Authors: Miguel de Icaza
+ * Federico Mena
+ * CORBAized by George Lebl
+ * de-CORBAized by George Lebl
+ */
+
+#ifndef LAUNCHER_H
+#define LAUNCHER_H
+
+#include "applet.h"
+#include "panel-widget.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ AppletInfo *info;
+ GtkWidget *button;
+
+ char *location;
+ GKeyFile *key_file;
+
+ GtkWidget *prop_dialog;
+ GSList *error_dialogs;
+
+ gulong destroy_handler;
+} Launcher;
+
+void panel_launcher_create (PanelToplevel *toplevel,
+ int position,
+ const char *location);
+void panel_launcher_create_with_id (const char *toplevel_id,
+ int position,
+ const char *location);
+gboolean panel_launcher_create_copy (PanelToplevel *toplevel,
+ int position,
+ const char *location);
+void panel_launcher_create_from_info (PanelToplevel *toplevel,
+ int position,
+ gboolean exec_info,
+ const char *exec_or_uri,
+ const char *name,
+ const char *comment,
+ const char *icon);
+
+void launcher_launch (Launcher *launcher,
+ GtkWidget *widget);
+
+void launcher_properties (Launcher *launcher);
+
+void launcher_load_from_mateconf (PanelWidget *panel_widget,
+ gboolean locked,
+ gint position,
+ const char *id);
+
+void panel_launcher_delete (Launcher *launcher);
+
+void ask_about_launcher (const char *file,
+ PanelWidget *panel,
+ int pos,
+ gboolean exactpos);
+
+Launcher * find_launcher (const char *path);
+
+void launcher_properties_destroy (Launcher *launcher);
+
+void panel_launcher_set_dnd_enabled (Launcher *launcher,
+ gboolean dnd_enabled);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/mate-panel/libegg/Makefile.am b/mate-panel/libegg/Makefile.am
new file mode 100644
index 00000000..c50c1fa0
--- /dev/null
+++ b/mate-panel/libegg/Makefile.am
@@ -0,0 +1,25 @@
+platform_defines = -DEGG_SM_CLIENT_BACKEND_XSMP
+platform_sources = eggsmclient-xsmp.c
+
+noinst_LTLIBRARIES = libegg.la
+
+AM_CPPFLAGS = \
+ $(EGG_SMCLIENT_CFLAGS) \
+ -DG_LOG_DOMAIN=\""EggSMClient"\"\
+ $(platform_defines) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+libegg_la_SOURCES = \
+ eggdesktopfile.c \
+ eggdesktopfile.h \
+ eggsmclient.c \
+ eggsmclient.h \
+ eggsmclient-private.h \
+ $(platform_sources)
+
+libegg_la_LIBADD = \
+ $(EGG_SMCLIENT_LIBS)
+
+-include $(top_srcdir)/git.mk
diff --git a/mate-panel/libegg/Makefile.in b/mate-panel/libegg/Makefile.in
new file mode 100644
index 00000000..742fd6ed
--- /dev/null
+++ b/mate-panel/libegg/Makefile.in
@@ -0,0 +1,622 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+pkgdatadir = $(datadir)/@[email protected]
+pkgincludedir = $(includedir)/@[email protected]
+pkglibdir = $(libdir)/@[email protected]
+pkglibexecdir = $(libexecdir)/@[email protected]
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @[email protected]
+host_triplet = @[email protected]
+subdir = mate-panel/libegg
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libegg_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_1 = eggsmclient-xsmp.lo
+am_libegg_la_OBJECTS = eggdesktopfile.lo eggsmclient.lo \
+ $(am__objects_1)
+libegg_la_OBJECTS = $(am_libegg_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+DEFAULT_INCLUDES = [email protected][email protected] -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " [email protected];
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o [email protected]
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " [email protected];
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " [email protected];
+SOURCES = $(libegg_la_SOURCES)
+DIST_SOURCES = $(libegg_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @[email protected]
+ACLOCAL_AMFLAGS = @[email protected]
+ALL_LINGUAS = @[email protected]
+AM_DEFAULT_VERBOSITY = @[email protected]
+AUTOCONF = @[email protected]
+AUTOHEADER = @[email protected]
+AUTOMAKE = @[email protected]
+CATALOGS = @[email protected]
+CATOBJEXT = @[email protected]
+CCDEPMODE = @[email protected]
+CLOCK_CFLAGS = @[email protected]
+CLOCK_EDS_ICONDIR = @[email protected]
+CLOCK_LIBS = @[email protected]
+CPPFLAGS = @[email protected]
+CYGPATH_W = @[email protected]
+DATADIRNAME = @[email protected]
+DISABLE_DEPRECATED = @[email protected]
+DISABLE_DEPRECATED_CFLAGS = @[email protected]
+DISTCHECK_CONFIGURE_FLAGS = @[email protected]
+DLLTOOL = @[email protected]
+DOC_USER_FORMATS = @[email protected]
+DSYMUTIL = @[email protected]
+DUMPBIN = @[email protected]
+EGG_SMCLIENT_CFLAGS = @[email protected]
+EGG_SMCLIENT_LIBS = @[email protected]
+FISH_CFLAGS = @[email protected]
+FISH_LIBS = @[email protected]
+GETTEXT_PACKAGE = @[email protected]
+GIO_QUERYMODULES = @[email protected]
+GLIB_GENMARSHAL = @[email protected]
+GMOFILES = @[email protected]
+GMSGFMT = @[email protected]
+GTKDOC_CHECK = @[email protected]
+GTKDOC_DEPS_CFLAGS = @[email protected]
+GTKDOC_DEPS_LIBS = @[email protected]
+GTKDOC_MKPDF = @[email protected]
+GTKDOC_REBASE = @[email protected]
+HELP_DIR = @[email protected]
+HTML_DIR = @[email protected]
+INSTALL = @[email protected]
+INSTALL_DATA = @[email protected]
+INSTALL_PROGRAM = @[email protected]
+INSTALL_SCRIPT = @[email protected]
+INSTALL_STRIP_PROGRAM = @[email protected]
+INSTOBJEXT = @[email protected]
+INTLLIBS = @[email protected]
+INTLTOOL_EXTRACT = @[email protected]
+INTLTOOL_MERGE = @[email protected]
+INTLTOOL_PERL = @[email protected]
+INTLTOOL_UPDATE = @[email protected]
+INTROSPECTION_CFLAGS = @[email protected]
+INTROSPECTION_COMPILER = @[email protected]
+INTROSPECTION_GENERATE = @[email protected]
+INTROSPECTION_GIRDIR = @[email protected]
+INTROSPECTION_LIBS = @[email protected]
+INTROSPECTION_MAKEFILE = @[email protected]
+INTROSPECTION_SCANNER = @[email protected]
+INTROSPECTION_TYPELIBDIR = @[email protected]
+LDFLAGS = @[email protected]
+LIBMATE_PANEL_APPLET_CFLAGS = @[email protected]
+LIBMATE_PANEL_APPLET_LIBS = @[email protected]
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @[email protected]
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @[email protected]
+LIBOBJS = @[email protected]
+LIBTOOL = @[email protected]
+LIB_MATE_PANEL_APPLET_LT_VERSION = @[email protected]
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @[email protected]
+LTLIBOBJS = @[email protected]
+MAKEINFO = @[email protected]
+MANIFEST_TOOL = @[email protected]
+MATECOMPONENT_ACT_IDLDIR = @[email protected]
+MATECOMPONENT_CFLAGS = @[email protected]
+MATECOMPONENT_IDLDIR = @[email protected]
+MATECOMPONENT_LIBS = @[email protected]
+MATECONFTOOL = @[email protected]
+MATECONF_SCHEMA_CONFIG_SOURCE = @[email protected]
+MATECONF_SCHEMA_FILE_DIR = @[email protected]
+MATECORBA_IDL = @[email protected]
+MKDIR_P = @[email protected]
+MKINSTALLDIRS = @[email protected]
+MSGFMT_OPTS = @[email protected]
+MSGMERGE = @[email protected]
+NETWORK_MANAGER_CFLAGS = @[email protected]
+NETWORK_MANAGER_LIBS = @[email protected]
+NOTIFICATION_AREA_CFLAGS = @[email protected]
+NOTIFICATION_AREA_LIBS = @[email protected]
+OBJDUMP = @[email protected]
+OMF_DIR = @[email protected]
+OTOOL64 = @[email protected]
+PACKAGE = @[email protected]
+PACKAGE_BUGREPORT = @[email protected]
+PACKAGE_NAME = @[email protected]
+PACKAGE_STRING = @[email protected]
+PACKAGE_TARNAME = @[email protected]
+PACKAGE_URL = @[email protected]
+PACKAGE_VERSION = @[email protected]
+PANEL_CFLAGS = @[email protected]
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @[email protected]
+PANEL_LIBS = @[email protected]
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @[email protected]
+PANEL_MODULE_MATECOMPONENT_LIBS = @[email protected]
+PATH_SEPARATOR = @[email protected]
+PKG_CONFIG = @[email protected]
+PKG_CONFIG_LIBDIR = @[email protected]
+PKG_CONFIG_PATH = @[email protected]
+POFILES = @[email protected]
+PO_IN_DATADIR_FALSE = @[email protected]
+PO_IN_DATADIR_TRUE = @[email protected]
+PYTHON_EXEC_PREFIX = @[email protected]
+PYTHON_PLATFORM = @[email protected]
+PYTHON_PREFIX = @[email protected]
+PYTHON_VERSION = @[email protected]
+REBUILD = @[email protected]
+SET_MAKE = @[email protected]
+TZ_CFLAGS = @[email protected]
+TZ_LIBS = @[email protected]
+USE_NLS = @[email protected]
+VERSION = @[email protected]
+WARN_CFLAGS = @[email protected]
+WNCKLET_CFLAGS = @[email protected]
+WNCKLET_LIBS = @[email protected]
+XGETTEXT = @[email protected]
+XRANDR_CFLAGS = @[email protected]
+XRANDR_LIBS = @[email protected]
+X_CFLAGS = @[email protected]
+X_EXTRA_LIBS = @[email protected]
+X_PRE_LIBS = @[email protected]
+abs_builddir = @[email protected]
+abs_srcdir = @[email protected]
+abs_top_builddir = @[email protected]
+abs_top_srcdir = @[email protected]
+ac_ct_AR = @[email protected]
+ac_ct_CC = @[email protected]
+ac_ct_DUMPBIN = @[email protected]
+am__include = @[email protected]
+am__leading_dot = @[email protected]
+am__quote = @[email protected]
+am__tar = @[email protected]
+am__untar = @[email protected]
+appletsdir = @[email protected]
+build_alias = @[email protected]
+build_cpu = @[email protected]
+build_os = @[email protected]
+build_vendor = @[email protected]
+builddir = @[email protected]
+datadir = @[email protected]
+datarootdir = @[email protected]
+exec_prefix = @[email protected]
+host_alias = @[email protected]
+host_cpu = @[email protected]
+host_os = @[email protected]
+host_vendor = @[email protected]
+htmldir = @[email protected]
+includedir = @[email protected]
+infodir = @[email protected]
+install_sh = @[email protected]
+libexecdir = @[email protected]
+localedir = @[email protected]
+localstatedir = @[email protected]
+mkdir_p = @[email protected]
+modulesdir = @[email protected]
+oldincludedir = @[email protected]
+pkgpyexecdir = @[email protected]
+pkgpythondir = @[email protected]
+program_transform_name = @[email protected]
+pyexecdir = @[email protected]
+pythondir = @[email protected]
+sbindir = @[email protected]
+sharedstatedir = @[email protected]
+sysconfdir = @[email protected]
+target_alias = @[email protected]
+top_build_prefix = @[email protected]
+top_builddir = @[email protected]
+top_srcdir = @[email protected]
+platform_defines = -DEGG_SM_CLIENT_BACKEND_XSMP
+platform_sources = eggsmclient-xsmp.c
+noinst_LTLIBRARIES = libegg.la
+AM_CPPFLAGS = \
+ $(EGG_SMCLIENT_CFLAGS) \
+ -DG_LOG_DOMAIN=\""EggSMClient"\"\
+ $(platform_defines) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+libegg_la_SOURCES = \
+ eggdesktopfile.c \
+ eggdesktopfile.h \
+ eggsmclient.c \
+ eggsmclient.h \
+ eggsmclient-private.h \
+ $(platform_sources)
+
+libegg_la_LIBADD = \
+ $(EGG_SMCLIENT_LIBS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @[email protected] $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f [email protected]; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mate-panel/libegg/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu mate-panel/libegg/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/[email protected] $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @[email protected] $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @[email protected] $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libegg.la: $(libegg_la_OBJECTS) $(libegg_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libegg_la_OBJECTS) $(libegg_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+
+.c.o:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+
+.c.obj:
[email protected][email protected] $(AM_V_CC)$(COMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] `$(CYGPATH_W) '$<'`
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
[email protected][email protected] $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
[email protected][email protected] $(AM_V_CC)$(LTCOMPILE) -MT [email protected] -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o [email protected] $<
[email protected][email protected] $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "[email protected]" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/mate-panel/libegg/eggdesktopfile.c b/mate-panel/libegg/eggdesktopfile.c
new file mode 100644
index 00000000..5ac79507
--- /dev/null
+++ b/mate-panel/libegg/eggdesktopfile.c
@@ -0,0 +1,1510 @@
+/* eggdesktopfile.c - Freedesktop.Org Desktop Files
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * Based on mate-desktop-item.c
+ * Copyright (C) 1999, 2000 Red Hat Inc.
+ * Copyright (C) 2001 George Lebl
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; see the file COPYING.LIB. If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "eggdesktopfile.h"
+
+#include <string.h>
+#include <unistd.h>
+
+#include <glib/gi18n.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+struct EggDesktopFile {
+ GKeyFile *key_file;
+ char *source;
+
+ char *name, *icon;
+ EggDesktopFileType type;
+ char document_code;
+};
+
+/**
+ * egg_desktop_file_new:
+ * @desktop_file_path: path to a Freedesktop-style Desktop file
+ * @error: error pointer
+ *
+ * Creates a new #EggDesktopFile for @desktop_file.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new (const char *desktop_file_path, GError **error)
+{
+ GKeyFile *key_file;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_file (key_file, desktop_file_path, 0, error))
+ {
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ return egg_desktop_file_new_from_key_file (key_file, desktop_file_path,
+ error);
+}
+
+/**
+ * egg_desktop_file_new_from_data_dirs:
+ * @desktop_file_path: relative path to a Freedesktop-style Desktop file
+ * @error: error pointer
+ *
+ * Looks for @desktop_file_path in the paths returned from
+ * g_get_user_data_dir() and g_get_system_data_dirs(), and creates
+ * a new #EggDesktopFile from it.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
+ GError **error)
+{
+ EggDesktopFile *desktop_file;
+ GKeyFile *key_file;
+ char *full_path;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_data_dirs (key_file, desktop_file_path,
+ &full_path, 0, error))
+ {
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ desktop_file = egg_desktop_file_new_from_key_file (key_file,
+ full_path,
+ error);
+ g_free (full_path);
+ return desktop_file;
+}
+
+/**
+ * egg_desktop_file_new_from_dirs:
+ * @desktop_file_path: relative path to a Freedesktop-style Desktop file
+ * @search_dirs: NULL-terminated array of directories to search
+ * @error: error pointer
+ *
+ * Looks for @desktop_file_path in the paths returned from
+ * g_get_user_data_dir() and g_get_system_data_dirs(), and creates
+ * a new #EggDesktopFile from it.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new_from_dirs (const char *desktop_file_path,
+ const char **search_dirs,
+ GError **error)
+{
+ EggDesktopFile *desktop_file;
+ GKeyFile *key_file;
+ char *full_path;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_dirs (key_file, desktop_file_path, search_dirs,
+ &full_path, 0, error))
+ {
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ desktop_file = egg_desktop_file_new_from_key_file (key_file,
+ full_path,
+ error);
+ g_free (full_path);
+ return desktop_file;
+}
+
+/**
+ * egg_desktop_file_new_from_key_file:
+ * @key_file: a #GKeyFile representing a desktop file
+ * @source: the path or URI that @key_file was loaded from, or %NULL
+ * @error: error pointer
+ *
+ * Creates a new #EggDesktopFile for @key_file. Assumes ownership of
+ * @key_file (on success or failure); you should consider @key_file to
+ * be freed after calling this function.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new_from_key_file (GKeyFile *key_file,
+ const char *source,
+ GError **error)
+{
+ EggDesktopFile *desktop_file;
+ char *version, *type;
+
+ if (!g_key_file_has_group (key_file, EGG_DESKTOP_FILE_GROUP))
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_INVALID,
+ _("File is not a valid .desktop file"));
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ version = g_key_file_get_value (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_VERSION,
+ NULL);
+ if (version)
+ {
+ double version_num;
+ char *end;
+
+ version_num = g_ascii_strtod (version, &end);
+ if (*end)
+ {
+ g_warning ("Invalid Version string '%s' in %s",
+ version, source ? source : "(unknown)");
+ }
+ else if (version_num > 1.0)
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_INVALID,
+ _("Unrecognized desktop file Version '%s'"), version);
+ g_free (version);
+ g_key_file_free (key_file);
+ return NULL;
+ }
+ g_free (version);
+ }
+
+ desktop_file = g_new0 (EggDesktopFile, 1);
+ desktop_file->key_file = key_file;
+
+ if (g_path_is_absolute (source))
+ desktop_file->source = g_filename_to_uri (source, NULL, NULL);
+ else
+ desktop_file->source = g_strdup (source);
+
+ desktop_file->name = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_NAME, error);
+ if (!desktop_file->name)
+ {
+ egg_desktop_file_free (desktop_file);
+ return NULL;
+ }
+
+ type = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TYPE, error);
+ if (!type)
+ {
+ egg_desktop_file_free (desktop_file);
+ return NULL;
+ }
+
+ if (!strcmp (type, "Application"))
+ {
+ char *exec, *p;
+
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_APPLICATION;
+
+ exec = g_key_file_get_string (key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ error);
+ if (!exec)
+ {
+ egg_desktop_file_free (desktop_file);
+ g_free (type);
+ return NULL;
+ }
+
+ /* See if it takes paths or URIs or neither */
+ for (p = exec; *p; p++)
+ {
+ if (*p == '%')
+ {
+ if (p[1] == '\0' || strchr ("FfUu", p[1]))
+ {
+ desktop_file->document_code = p[1];
+ break;
+ }
+ p++;
+ }
+ }
+
+ g_free (exec);
+ }
+ else if (!strcmp (type, "Link"))
+ {
+ char *url;
+
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_LINK;
+
+ url = g_key_file_get_string (key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_URL,
+ error);
+ if (!url)
+ {
+ egg_desktop_file_free (desktop_file);
+ g_free (type);
+ return NULL;
+ }
+ g_free (url);
+ }
+ else if (!strcmp (type, "Directory"))
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_DIRECTORY;
+ else
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED;
+
+ g_free (type);
+
+ /* Check the Icon key */
+ desktop_file->icon = g_key_file_get_string (key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_ICON,
+ NULL);
+ if (desktop_file->icon && !g_path_is_absolute (desktop_file->icon))
+ {
+ char *ext;
+
+ /* Lots of .desktop files still get this wrong */
+ ext = strrchr (desktop_file->icon, '.');
+ if (ext && (!strcmp (ext, ".png") ||
+ !strcmp (ext, ".xpm") ||
+ !strcmp (ext, ".svg")))
+ {
+ g_warning ("Desktop file '%s' has malformed Icon key '%s'"
+ "(should not include extension)",
+ source ? source : "(unknown)",
+ desktop_file->icon);
+ *ext = '\0';
+ }
+ }
+
+ return desktop_file;
+}
+
+/**
+ * egg_desktop_file_free:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Frees @desktop_file.
+ **/
+void
+egg_desktop_file_free (EggDesktopFile *desktop_file)
+{
+ g_key_file_free (desktop_file->key_file);
+ g_free (desktop_file->source);
+ g_free (desktop_file->name);
+ g_free (desktop_file->icon);
+ g_free (desktop_file);
+}
+
+/**
+ * egg_desktop_file_get_source:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the URI that @desktop_file was loaded from.
+ *
+ * Return value: @desktop_file's source URI
+ **/
+const char *
+egg_desktop_file_get_source (EggDesktopFile *desktop_file)
+{
+ return desktop_file->source;
+}
+
+/**
+ * egg_desktop_file_get_desktop_file_type:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the desktop file type of @desktop_file.
+ *
+ * Return value: @desktop_file's type
+ **/
+EggDesktopFileType
+egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file)
+{
+ return desktop_file->type;
+}
+
+/**
+ * egg_desktop_file_get_name:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the (localized) value of @desktop_file's "Name" key.
+ *
+ * Return value: the application/link name
+ **/
+const char *
+egg_desktop_file_get_name (EggDesktopFile *desktop_file)
+{
+ return desktop_file->name;
+}
+
+/**
+ * egg_desktop_file_get_icon:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the value of @desktop_file's "Icon" key.
+ *
+ * If the icon string is a full path (that is, if g_path_is_absolute()
+ * returns %TRUE when called on it), it points to a file containing an
+ * unthemed icon. If the icon string is not a full path, it is the
+ * name of a themed icon, which can be looked up with %GtkIconTheme,
+ * or passed directly to a theme-aware widget like %GtkImage or
+ * %GtkCellRendererPixbuf.
+ *
+ * Return value: the icon path or name
+ **/
+const char *
+egg_desktop_file_get_icon (EggDesktopFile *desktop_file)
+{
+ return desktop_file->icon;
+}
+
+gboolean
+egg_desktop_file_has_key (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_has_key (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+char *
+egg_desktop_file_get_string (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+char *
+egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ GError **error)
+{
+ return g_key_file_get_locale_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key, locale,
+ error);
+}
+
+gboolean
+egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_get_boolean (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+double
+egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_get_double (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+char **
+egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ gsize *length,
+ GError **error)
+{
+ return g_key_file_get_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key, length,
+ error);
+}
+
+char **
+egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ gsize *length,
+ GError **error)
+{
+ return g_key_file_get_locale_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ locale, length,
+ error);
+}
+
+/**
+ * egg_desktop_file_can_launch:
+ * @desktop_file: an #EggDesktopFile
+ * @desktop_environment: the name of the running desktop environment,
+ * or %NULL
+ *
+ * Tests if @desktop_file can/should be launched in the current
+ * environment. If @desktop_environment is non-%NULL, @desktop_file's
+ * "OnlyShowIn" and "NotShowIn" keys are checked to make sure that
+ * this desktop_file is appropriate for the named environment.
+ *
+ * Furthermore, if @desktop_file has type
+ * %EGG_DESKTOP_FILE_TYPE_APPLICATION, its "TryExec" key (if any) is
+ * also checked, to make sure the binary it points to exists.
+ *
+ * egg_desktop_file_can_launch() does NOT check the value of the
+ * "Hidden" key.
+ *
+ * Return value: %TRUE if @desktop_file can be launched
+ **/
+gboolean
+egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
+ const char *desktop_environment)
+{
+ char *try_exec, *found_program;
+ char **only_show_in, **not_show_in;
+ gboolean found;
+ int i;
+
+ if (desktop_file->type != EGG_DESKTOP_FILE_TYPE_APPLICATION &&
+ desktop_file->type != EGG_DESKTOP_FILE_TYPE_LINK)
+ return FALSE;
+
+ if (desktop_environment)
+ {
+ only_show_in = g_key_file_get_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN,
+ NULL, NULL);
+ if (only_show_in)
+ {
+ for (i = 0, found = FALSE; only_show_in[i] && !found; i++)
+ {
+ if (!strcmp (only_show_in[i], desktop_environment))
+ found = TRUE;
+ }
+
+ g_strfreev (only_show_in);
+
+ if (!found)
+ return FALSE;
+ }
+
+ not_show_in = g_key_file_get_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN,
+ NULL, NULL);
+ if (not_show_in)
+ {
+ for (i = 0, found = FALSE; not_show_in[i] && !found; i++)
+ {
+ if (!strcmp (not_show_in[i], desktop_environment))
+ found = TRUE;
+ }
+
+ g_strfreev (not_show_in);
+
+ if (found)
+ return FALSE;
+ }
+ }
+
+ if (desktop_file->type == EGG_DESKTOP_FILE_TYPE_APPLICATION)
+ {
+ try_exec = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TRY_EXEC,
+ NULL);
+ if (try_exec)
+ {
+ found_program = g_find_program_in_path (try_exec);
+ g_free (try_exec);
+
+ if (!found_program)
+ return FALSE;
+ g_free (found_program);
+ }
+ }
+
+ return TRUE;
+}
+
+/**
+ * egg_desktop_file_accepts_documents:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Tests if @desktop_file represents an application that can accept
+ * documents on the command line.
+ *
+ * Return value: %TRUE or %FALSE
+ **/
+gboolean
+egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file)
+{
+ return desktop_file->document_code != 0;
+}
+
+/**
+ * egg_desktop_file_accepts_multiple:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Tests if @desktop_file can accept multiple documents at once.
+ *
+ * If this returns %FALSE, you can still pass multiple documents to
+ * egg_desktop_file_launch(), but that will result in multiple copies
+ * of the application being launched. See egg_desktop_file_launch()
+ * for more details.
+ *
+ * Return value: %TRUE or %FALSE
+ **/
+gboolean
+egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file)
+{
+ return (desktop_file->document_code == 'F' ||
+ desktop_file->document_code == 'U');
+}
+
+/**
+ * egg_desktop_file_accepts_uris:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Tests if @desktop_file can accept (non-"file:") URIs as documents to
+ * open.
+ *
+ * Return value: %TRUE or %FALSE
+ **/
+gboolean
+egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file)
+{
+ return (desktop_file->document_code == 'U' ||
+ desktop_file->document_code == 'u');
+}
+
+static void
+append_quoted_word (GString *str,
+ const char *s,
+ gboolean in_single_quotes,
+ gboolean in_double_quotes)
+{
+ const char *p;
+
+ if (!in_single_quotes && !in_double_quotes)
+ g_string_append_c (str, '\'');
+ else if (!in_single_quotes && in_double_quotes)
+ g_string_append (str, "\"'");
+
+ if (!strchr (s, '\''))
+ g_string_append (str, s);
+ else
+ {
+ for (p = s; *p != '\0'; p++)
+ {
+ if (*p == '\'')
+ g_string_append (str, "'\\''");
+ else
+ g_string_append_c (str, *p);
+ }
+ }
+
+ if (!in_single_quotes && !in_double_quotes)
+ g_string_append_c (str, '\'');
+ else if (!in_single_quotes && in_double_quotes)
+ g_string_append (str, "'\"");
+}
+
+static void
+do_percent_subst (EggDesktopFile *desktop_file,
+ char code,
+ GString *str,
+ GSList **documents,
+ gboolean in_single_quotes,
+ gboolean in_double_quotes)
+{
+ GSList *d;
+ char *doc;
+
+ switch (code)
+ {
+ case '%':
+ g_string_append_c (str, '%');
+ break;
+
+ case 'F':
+ case 'U':
+ for (d = *documents; d; d = d->next)
+ {
+ doc = d->data;
+ g_string_append (str, " ");
+ append_quoted_word (str, doc, in_single_quotes, in_double_quotes);
+ }
+ *documents = NULL;
+ break;
+
+ case 'f':
+ case 'u':
+ if (*documents)
+ {
+ doc = (*documents)->data;
+ g_string_append (str, " ");
+ append_quoted_word (str, doc, in_single_quotes, in_double_quotes);
+ *documents = (*documents)->next;
+ }
+ break;
+
+ case 'i':
+ if (desktop_file->icon)
+ {
+ g_string_append (str, "--icon ");
+ append_quoted_word (str, desktop_file->icon,
+ in_single_quotes, in_double_quotes);
+ }
+ break;
+
+ case 'c':
+ if (desktop_file->name)
+ {
+ append_quoted_word (str, desktop_file->name,
+ in_single_quotes, in_double_quotes);
+ }
+ break;
+
+ case 'k':
+ if (desktop_file->source)
+ {
+ append_quoted_word (str, desktop_file->source,
+ in_single_quotes, in_double_quotes);
+ }
+ break;
+
+ case 'D':
+ case 'N':
+ case 'd':
+ case 'n':
+ case 'v':
+ case 'm':
+ /* Deprecated; skip */
+ break;
+
+ default:
+ g_warning ("Unrecognized %%-code '%%%c' in Exec", code);
+ break;
+ }
+}
+
+static char *
+parse_exec (EggDesktopFile *desktop_file,
+ GSList **documents,
+ GError **error)
+{
+ char *exec, *p, *command;
+ gboolean escape, single_quot, double_quot;
+ GString *gs;
+
+ exec = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ error);
+ if (!exec)
+ return NULL;
+
+ /* Build the command */
+ gs = g_string_new (NULL);
+ escape = single_quot = double_quot = FALSE;
+
+ for (p = exec; *p != '\0'; p++)
+ {
+ if (escape)
+ {
+ escape = FALSE;
+ g_string_append_c (gs, *p);
+ }
+ else if (*p == '\\')
+ {
+ if (!single_quot)
+ escape = TRUE;
+ g_string_append_c (gs, *p);
+ }
+ else if (*p == '\'')
+ {
+ g_string_append_c (gs, *p);
+ if (!single_quot && !double_quot)
+ single_quot = TRUE;
+ else if (single_quot)
+ single_quot = FALSE;
+ }
+ else if (*p == '"')
+ {
+ g_string_append_c (gs, *p);
+ if (!single_quot && !double_quot)
+ double_quot = TRUE;
+ else if (double_quot)
+ double_quot = FALSE;
+ }
+ else if (*p == '%' && p[1])
+ {
+ do_percent_subst (desktop_file, p[1], gs, documents,
+ single_quot, double_quot);
+ p++;
+ }
+ else
+ g_string_append_c (gs, *p);
+ }
+
+ g_free (exec);
+ command = g_string_free (gs, FALSE);
+
+ /* Prepend "xdg-terminal " if needed (FIXME: use gvfs) */
+ if (g_key_file_has_key (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TERMINAL,
+ NULL))
+ {
+ GError *terminal_error = NULL;
+ gboolean use_terminal =
+ g_key_file_get_boolean (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TERMINAL,
+ &terminal_error);
+ if (terminal_error)
+ {
+ g_free (command);
+ g_propagate_error (error, terminal_error);
+ return NULL;
+ }
+
+ if (use_terminal)
+ {
+ gs = g_string_new ("xdg-terminal ");
+ append_quoted_word (gs, command, FALSE, FALSE);
+ g_free (command);
+ command = g_string_free (gs, FALSE);
+ }
+ }
+
+ return command;
+}
+
+static GSList *
+translate_document_list (EggDesktopFile *desktop_file, GSList *documents)
+{
+ gboolean accepts_uris = egg_desktop_file_accepts_uris (desktop_file);
+ GSList *ret, *d;
+
+ for (d = documents, ret = NULL; d; d = d->next)
+ {
+ const char *document = d->data;
+ gboolean is_uri = !g_path_is_absolute (document);
+ char *translated;
+
+ if (accepts_uris)
+ {
+ if (is_uri)
+ translated = g_strdup (document);
+ else
+ translated = g_filename_to_uri (document, NULL, NULL);
+ }
+ else
+ {
+ if (is_uri)
+ translated = g_filename_from_uri (document, NULL, NULL);
+ else
+ translated = g_strdup (document);
+ }
+
+ if (translated)
+ ret = g_slist_prepend (ret, translated);
+ }
+
+ return g_slist_reverse (ret);
+}
+
+static void
+free_document_list (GSList *documents)
+{
+ GSList *d;
+
+ for (d = documents; d; d = d->next)
+ g_free (d->data);
+ g_slist_free (documents);
+}
+
+/**
+ * egg_desktop_file_parse_exec:
+ * @desktop_file: a #EggDesktopFile
+ * @documents: a list of document paths or URIs
+ * @error: error pointer
+ *
+ * Parses @desktop_file's Exec key, inserting @documents into it, and
+ * returns the result.
+ *
+ * If @documents contains non-file: URIs and @desktop_file does not
+ * accept URIs, those URIs will be ignored. Likewise, if @documents
+ * contains more elements than @desktop_file accepts, the extra
+ * documents will be ignored.
+ *
+ * Return value: the parsed Exec string
+ **/
+char *
+egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
+ GSList *documents,
+ GError **error)
+{
+ GSList *translated, *docs;
+ char *command;
+
+ docs = translated = translate_document_list (desktop_file, documents);
+ command = parse_exec (desktop_file, &docs, error);
+ free_document_list (translated);
+
+ return command;
+}
+
+static gboolean
+parse_link (EggDesktopFile *desktop_file,
+ EggDesktopFile **app_desktop_file,
+ GSList **documents,
+ GError **error)
+{
+ char *url;
+ GKeyFile *key_file;
+
+ url = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_URL,
+ error);
+ if (!url)
+ return FALSE;
+ *documents = g_slist_prepend (NULL, url);
+
+ /* FIXME: use gvfs */
+ key_file = g_key_file_new ();
+ g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_NAME,
+ "xdg-open");
+ g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TYPE,
+ "Application");
+ g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ "xdg-open %u");
+ *app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL);
+ return TRUE;
+}
+
+#if GTK_CHECK_VERSION (2, 12, 0)
+static char *
+start_startup_notification (GdkDisplay *display,
+ EggDesktopFile *desktop_file,
+ const char *argv0,
+ int screen,
+ int workspace,
+ guint32 launch_time)
+{
+ static int sequence = 0;
+ char *startup_id;
+ char *description, *wmclass;
+ char *screen_str, *workspace_str;
+
+ if (g_key_file_has_key (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY,
+ NULL))
+ {
+ if (!g_key_file_get_boolean (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY,
+ NULL))
+ return NULL;
+ wmclass = NULL;
+ }
+ else
+ {
+ wmclass = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS,
+ NULL);
+ if (!wmclass)
+ return NULL;
+ }
+
+ if (launch_time == (guint32)-1)
+ launch_time = gdk_x11_display_get_user_time (display);
+ startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu",
+ g_get_prgname (),
+ (unsigned long)getpid (),
+ g_get_host_name (),
+ argv0,
+ sequence++,
+ (unsigned long)launch_time);
+
+ description = g_strdup_printf (_("Starting %s"), desktop_file->name);
+ screen_str = g_strdup_printf ("%d", screen);
+ workspace_str = workspace == -1 ? NULL : g_strdup_printf ("%d", workspace);
+
+ gdk_x11_display_broadcast_startup_message (display, "new",
+ "ID", startup_id,
+ "NAME", desktop_file->name,
+ "SCREEN", screen_str,
+ "BIN", argv0,
+ "ICON", desktop_file->icon,
+ "DESKTOP", workspace_str,
+ "DESCRIPTION", description,
+ "WMCLASS", wmclass,
+ NULL);
+
+ g_free (description);
+ g_free (wmclass);
+ g_free (screen_str);
+ g_free (workspace_str);
+
+ return startup_id;
+}
+
+static void
+end_startup_notification (GdkDisplay *display,
+ const char *startup_id)
+{
+ gdk_x11_display_broadcast_startup_message (display, "remove",
+ "ID", startup_id,
+ NULL);
+}
+
+#define EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH (30 /* seconds */)
+
+typedef struct {
+ GdkDisplay *display;
+ char *startup_id;
+} StartupNotificationData;
+
+static gboolean
+startup_notification_timeout (gpointer data)
+{
+ StartupNotificationData *sn_data = data;
+
+ end_startup_notification (sn_data->display, sn_data->startup_id);
+ g_object_unref (sn_data->display);
+ g_free (sn_data->startup_id);
+ g_free (sn_data);
+
+ return FALSE;
+}
+
+static void
+set_startup_notification_timeout (GdkDisplay *display,
+ const char *startup_id)
+{
+ StartupNotificationData *sn_data;
+
+ sn_data = g_new (StartupNotificationData, 1);
+ sn_data->display = g_object_ref (display);
+ sn_data->startup_id = g_strdup (startup_id);
+
+ g_timeout_add_seconds (EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH,
+ startup_notification_timeout, sn_data);
+}
+#endif /* GTK 2.12 */
+
+static GPtrArray *
+array_putenv (GPtrArray *env, char *variable)
+{
+ guint i, keylen;
+
+ if (!env)
+ {
+ char **envp;
+
+ env = g_ptr_array_new ();
+
+ envp = g_listenv ();
+ for (i = 0; envp[i]; i++)
+ {
+ const char *value;
+
+ value = g_getenv (envp[i]);
+ g_ptr_array_add (env, g_strdup_printf ("%s=%s", envp[i],
+ value ? value : ""));
+ }
+ g_strfreev (envp);
+ }
+
+ keylen = strcspn (variable, "=");
+
+ /* Remove old value of key */
+ for (i = 0; i < env->len; i++)
+ {
+ char *envvar = env->pdata[i];
+
+ if (!strncmp (envvar, variable, keylen) && envvar[keylen] == '=')
+ {
+ g_free (envvar);
+ g_ptr_array_remove_index_fast (env, i);
+ break;
+ }
+ }
+
+ /* Add new value */
+ g_ptr_array_add (env, g_strdup (variable));
+
+ return env;
+}
+
+static gboolean
+egg_desktop_file_launchv (EggDesktopFile *desktop_file,
+ GSList *documents, va_list args,
+ GError **error)
+{
+ EggDesktopFileLaunchOption option;
+ GSList *translated_documents = NULL, *docs = NULL;
+ char *command, **argv;
+ int argc, i, screen_num;
+ gboolean success, current_success;
+ GdkDisplay *display;
+ char *startup_id;
+
+ GPtrArray *env = NULL;
+ char **variables = NULL;
+ GdkScreen *screen = NULL;
+ int workspace = -1;
+ const char *directory = NULL;
+ guint32 launch_time = (guint32)-1;
+ GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
+ GSpawnChildSetupFunc setup_func = NULL;
+ gpointer setup_data = NULL;
+
+ GPid *ret_pid = NULL;
+ int *ret_stdin = NULL, *ret_stdout = NULL, *ret_stderr = NULL;
+ char **ret_startup_id = NULL;
+
+ if (documents && desktop_file->document_code == 0)
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ _("Application does not accept documents on command line"));
+ return FALSE;
+ }
+
+ /* Read the options: technically it's incorrect for the caller to
+ * NULL-terminate the list of options (rather than 0-terminating
+ * it), but NULL-terminating lets us use G_GNUC_NULL_TERMINATED,
+ * it's more consistent with other glib/gtk methods, and it will
+ * work as long as sizeof (int) <= sizeof (NULL), and NULL is
+ * represented as 0. (Which is true everywhere we care about.)
+ */
+ while ((option = va_arg (args, EggDesktopFileLaunchOption)))
+ {
+ switch (option)
+ {
+ case EGG_DESKTOP_FILE_LAUNCH_CLEARENV:
+ if (env)
+ g_ptr_array_free (env, TRUE);
+ env = g_ptr_array_new ();
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_PUTENV:
+ variables = va_arg (args, char **);
+ for (i = 0; variables[i]; i++)
+ env = array_putenv (env, variables[i]);
+ break;
+
+ case EGG_DESKTOP_FILE_LAUNCH_SCREEN:
+ screen = va_arg (args, GdkScreen *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_WORKSPACE:
+ workspace = va_arg (args, int);
+ break;
+
+ case EGG_DESKTOP_FILE_LAUNCH_DIRECTORY:
+ directory = va_arg (args, const char *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_TIME:
+ launch_time = va_arg (args, guint32);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_FLAGS:
+ flags |= va_arg (args, GSpawnFlags);
+ /* Make sure they didn't set any flags that don't make sense. */
+ flags &= ~G_SPAWN_FILE_AND_ARGV_ZERO;
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC:
+ setup_func = va_arg (args, GSpawnChildSetupFunc);
+ setup_data = va_arg (args, gpointer);
+ break;
+
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_PID:
+ ret_pid = va_arg (args, GPid *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE:
+ ret_stdin = va_arg (args, int *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE:
+ ret_stdout = va_arg (args, int *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE:
+ ret_stderr = va_arg (args, int *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID:
+ ret_startup_id = va_arg (args, char **);
+ break;
+
+ default:
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION,
+ _("Unrecognized launch option: %d"),
+ GPOINTER_TO_INT (option));
+ success = FALSE;
+ goto out;
+ }
+ }
+
+ if (screen)
+ {
+ char *display_name = gdk_screen_make_display_name (screen);
+ char *display_env = g_strdup_printf ("DISPLAY=%s", display_name);
+ env = array_putenv (env, display_env);
+ g_free (display_name);
+ g_free (display_env);
+
+ display = gdk_screen_get_display (screen);
+ }
+ else
+ {
+ display = gdk_display_get_default ();
+ screen = gdk_display_get_default_screen (display);
+ }
+ screen_num = gdk_screen_get_number (screen);
+
+ translated_documents = translate_document_list (desktop_file, documents);
+ docs = translated_documents;
+
+ success = FALSE;
+
+ do
+ {
+ command = parse_exec (desktop_file, &docs, error);
+ if (!command)
+ goto out;
+
+ if (!g_shell_parse_argv (command, &argc, &argv, error))
+ {
+ g_free (command);
+ goto out;
+ }
+ g_free (command);
+
+#if GTK_CHECK_VERSION (2, 12, 0)
+ startup_id = start_startup_notification (display, desktop_file,
+ argv[0], screen_num,
+ workspace, launch_time);
+ if (startup_id)
+ {
+ char *startup_id_env = g_strdup_printf ("DESKTOP_STARTUP_ID=%s",
+ startup_id);
+ env = array_putenv (env, startup_id_env);
+ g_free (startup_id_env);
+ }
+#else
+ startup_id = NULL;
+#endif /* GTK 2.12 */
+
+ if (env != NULL)
+ g_ptr_array_add (env, NULL);
+
+ current_success =
+ g_spawn_async_with_pipes (directory,
+ argv,
+ env ? (char **)(env->pdata) : NULL,
+ flags,
+ setup_func, setup_data,
+ ret_pid,
+ ret_stdin, ret_stdout, ret_stderr,
+ error);
+ g_strfreev (argv);
+
+ if (startup_id)
+ {
+#if GTK_CHECK_VERSION (2, 12, 0)
+ if (current_success)
+ {
+ set_startup_notification_timeout (display, startup_id);
+
+ if (ret_startup_id)
+ *ret_startup_id = startup_id;
+ else
+ g_free (startup_id);
+ }
+ else
+#endif /* GTK 2.12 */
+ g_free (startup_id);
+ }
+ else if (ret_startup_id)
+ *ret_startup_id = NULL;
+
+ if (current_success)
+ {
+ /* If we successfully launch any instances of the app, make
+ * sure we return TRUE and don't set @error.
+ */
+ success = TRUE;
+ error = NULL;
+
+ /* Also, only set the output params on the first one */
+ ret_pid = NULL;
+ ret_stdin = ret_stdout = ret_stderr = NULL;
+ ret_startup_id = NULL;
+ }
+ }
+ while (docs && current_success);
+
+ out:
+ if (env)
+ {
+ g_ptr_array_foreach (env, (GFunc)g_free, NULL);
+ g_ptr_array_free (env, TRUE);
+ }
+ free_document_list (translated_documents);
+
+ return success;
+}
+
+/**
+ * egg_desktop_file_launch:
+ * @desktop_file: an #EggDesktopFile
+ * @documents: a list of URIs or paths to documents to open
+ * @error: error pointer
+ * @...: additional options
+ *
+ * Launches @desktop_file with the given arguments. Additional options
+ * can be specified as follows:
+ *
+ * %EGG_DESKTOP_FILE_LAUNCH_CLEARENV: (no arguments)
+ * clears the environment in the child process
+ * %EGG_DESKTOP_FILE_LAUNCH_PUTENV: (char **variables)
+ * adds the NAME=VALUE strings in the given %NULL-terminated
+ * array to the child process's environment
+ * %EGG_DESKTOP_FILE_LAUNCH_SCREEN: (GdkScreen *screen)
+ * causes the application to be launched on the given screen
+ * %EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: (int workspace)
+ * causes the application to be launched on the given workspace
+ * %EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: (char *dir)
+ * causes the application to be launched in the given directory
+ * %EGG_DESKTOP_FILE_LAUNCH_TIME: (guint32 launch_time)
+ * sets the "launch time" for the application. If the user
+ * interacts with another window after @launch_time but before
+ * the launched application creates its first window, the window
+ * manager may choose to not give focus to the new application.
+ * Passing 0 for @launch_time will explicitly request that the
+ * application not receive focus.
+ * %EGG_DESKTOP_FILE_LAUNCH_FLAGS (GSpawnFlags flags)
+ * Sets additional #GSpawnFlags to use. See g_spawn_async() for
+ * more details.
+ * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC (GSpawnChildSetupFunc, gpointer)
+ * Sets the child setup callback and the data to pass to it.
+ * (See g_spawn_async() for more details.)
+ *
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID (GPid **pid)
+ * On a successful launch, sets *@pid to the PID of the launched
+ * application.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID (char **startup_id)
+ * On a successful launch, sets *@startup_id to the Startup
+ * Notification "startup id" of the launched application.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE (int *fd)
+ * On a successful launch, sets *@fd to the file descriptor of
+ * a pipe connected to the application's stdin.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE (int *fd)
+ * On a successful launch, sets *@fd to the file descriptor of
+ * a pipe connected to the application's stdout.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE (int *fd)
+ * On a successful launch, sets *@fd to the file descriptor of
+ * a pipe connected to the application's stderr.
+ *
+ * The options should be terminated with a single %NULL.
+ *
+ * If @documents contains multiple documents, but
+ * egg_desktop_file_accepts_multiple() returns %FALSE for
+ * @desktop_file, then egg_desktop_file_launch() will actually launch
+ * multiple instances of the application. In that case, the return
+ * value (as well as any values passed via
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, etc) will only reflect the
+ * first instance of the application that was launched (but the
+ * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC will be called for each
+ * instance).
+ *
+ * Return value: %TRUE if the application was successfully launched.
+ **/
+gboolean
+egg_desktop_file_launch (EggDesktopFile *desktop_file,
+ GSList *documents, GError **error,
+ ...)
+{
+ va_list args;
+ gboolean success;
+ EggDesktopFile *app_desktop_file;
+
+ switch (desktop_file->type)
+ {
+ case EGG_DESKTOP_FILE_TYPE_APPLICATION:
+ va_start (args, error);
+ success = egg_desktop_file_launchv (desktop_file, documents,
+ args, error);
+ va_end (args);
+ break;
+
+ case EGG_DESKTOP_FILE_TYPE_LINK:
+ if (documents)
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ _("Can't pass document URIs to a 'Type=Link' desktop entry"));
+ return FALSE;
+ }
+
+ if (!parse_link (desktop_file, &app_desktop_file, &documents, error))
+ return FALSE;
+
+ va_start (args, error);
+ success = egg_desktop_file_launchv (app_desktop_file, documents,
+ args, error);
+ va_end (args);
+
+ egg_desktop_file_free (app_desktop_file);
+ free_document_list (documents);
+ break;
+
+ case EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED:
+ case EGG_DESKTOP_FILE_TYPE_DIRECTORY:
+ default:
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ _("Not a launchable item"));
+ success = FALSE;
+ break;
+ }
+
+ return success;
+}
+
+
+GQuark
+egg_desktop_file_error_quark (void)
+{
+ return g_quark_from_static_string ("egg-desktop_file-error-quark");
+}
+
+
+G_LOCK_DEFINE_STATIC (egg_desktop_file);
+static EggDesktopFile *egg_desktop_file;
+
+static void
+egg_set_desktop_file_internal (const char *desktop_file_path,
+ gboolean set_defaults)
+{
+ GError *error = NULL;
+
+ G_LOCK (egg_desktop_file);
+ if (egg_desktop_file)
+ egg_desktop_file_free (egg_desktop_file);
+
+ egg_desktop_file = egg_desktop_file_new (desktop_file_path, &error);
+ if (error)
+ {
+ g_warning ("Could not load desktop file '%s': %s",
+ desktop_file_path, error->message);
+ g_error_free (error);
+ }
+
+ if (set_defaults && egg_desktop_file != NULL) {
+ /* Set localized application name and default window icon */
+ if (egg_desktop_file->name)
+ g_set_application_name (egg_desktop_file->name);
+ if (egg_desktop_file->icon)
+ {
+ if (g_path_is_absolute (egg_desktop_file->icon))
+ gtk_window_set_default_icon_from_file (egg_desktop_file->icon, NULL);
+ else
+ gtk_window_set_default_icon_name (egg_desktop_file->icon);
+ }
+ }
+
+ G_UNLOCK (egg_desktop_file);
+}
+
+/**
+ * egg_set_desktop_file:
+ * @desktop_file_path: path to the application's desktop file
+ *
+ * Creates an #EggDesktopFile for the application from the data at
+ * @desktop_file_path. This will also call g_set_application_name()
+ * with the localized application name from the desktop file, and
+ * gtk_window_set_default_icon_name() or
+ * gtk_window_set_default_icon_from_file() with the application's
+ * icon. Other code may use additional information from the desktop
+ * file.
+ * See egg_set_desktop_file_without_defaults() for a variant of this
+ * function that does not set the application name and default window
+ * icon.
+ *
+ * Note that for thread safety reasons, this function can only
+ * be called once, and is mutually exclusive with calling
+ * egg_set_desktop_file_without_defaults().
+ **/
+void
+egg_set_desktop_file (const char *desktop_file_path)
+{
+ egg_set_desktop_file_internal (desktop_file_path, TRUE);
+}
+
+/**
+ * egg_set_desktop_file_without_defaults:
+ * @desktop_file_path: path to the application's desktop file
+ *
+ * Creates an #EggDesktopFile for the application from the data at
+ * @desktop_file_path.
+ * See egg_set_desktop_file() for a variant of this function that
+ * sets the application name and default window icon from the information
+ * in the desktop file.
+ *
+ * Note that for thread safety reasons, this function can only
+ * be called once, and is mutually exclusive with calling
+ * egg_set_desktop_file().
+ **/
+void
+egg_set_desktop_file_without_defaults (const char *desktop_file_path)
+{
+ egg_set_desktop_file_internal (desktop_file_path, FALSE);
+}
+
+/**
+ * egg_get_desktop_file:
+ *
+ * Gets the application's #EggDesktopFile, as set by
+ * egg_set_desktop_file().
+ *
+ * Return value: the #EggDesktopFile, or %NULL if it hasn't been set.
+ **/
+EggDesktopFile *
+egg_get_desktop_file (void)
+{
+ EggDesktopFile *retval;
+
+ G_LOCK (egg_desktop_file);
+ retval = egg_desktop_file;
+ G_UNLOCK (egg_desktop_file);
+
+ return retval;
+}
diff --git a/mate-panel/libegg/eggdesktopfile.h b/mate-panel/libegg/eggdesktopfile.h
new file mode 100644
index 00000000..68850b71
--- /dev/null
+++ b/mate-panel/libegg/eggdesktopfile.h
@@ -0,0 +1,164 @@
+/* eggdesktopfile.h - Freedesktop.Org Desktop Files
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; see the file COPYING.LIB. If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place -
+ * Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EGG_DESKTOP_FILE_H__
+#define __EGG_DESKTOP_FILE_H__
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct EggDesktopFile EggDesktopFile;
+
+typedef enum {
+ EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED,
+
+ EGG_DESKTOP_FILE_TYPE_APPLICATION,
+ EGG_DESKTOP_FILE_TYPE_LINK,
+ EGG_DESKTOP_FILE_TYPE_DIRECTORY
+} EggDesktopFileType;
+
+EggDesktopFile *egg_desktop_file_new (const char *desktop_file_path,
+ GError **error);
+
+EggDesktopFile *egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
+ GError **error);
+EggDesktopFile *egg_desktop_file_new_from_dirs (const char *desktop_file_path,
+ const char **search_dirs,
+ GError **error);
+EggDesktopFile *egg_desktop_file_new_from_key_file (GKeyFile *key_file,
+ const char *source,
+ GError **error);
+
+void egg_desktop_file_free (EggDesktopFile *desktop_file);
+
+const char *egg_desktop_file_get_source (EggDesktopFile *desktop_file);
+
+EggDesktopFileType egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file);
+
+const char *egg_desktop_file_get_name (EggDesktopFile *desktop_file);
+const char *egg_desktop_file_get_icon (EggDesktopFile *desktop_file);
+
+gboolean egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
+ const char *desktop_environment);
+
+gboolean egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file);
+gboolean egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file);
+gboolean egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file);
+
+char *egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
+ GSList *documents,
+ GError **error);
+
+gboolean egg_desktop_file_launch (EggDesktopFile *desktop_file,
+ GSList *documents,
+ GError **error,
+ ...) G_GNUC_NULL_TERMINATED;
+
+typedef enum {
+ EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1,
+ EGG_DESKTOP_FILE_LAUNCH_PUTENV,
+ EGG_DESKTOP_FILE_LAUNCH_SCREEN,
+ EGG_DESKTOP_FILE_LAUNCH_WORKSPACE,
+ EGG_DESKTOP_FILE_LAUNCH_DIRECTORY,
+ EGG_DESKTOP_FILE_LAUNCH_TIME,
+ EGG_DESKTOP_FILE_LAUNCH_FLAGS,
+ EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_PID,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID
+} EggDesktopFileLaunchOption;
+
+/* Standard Keys */
+#define EGG_DESKTOP_FILE_GROUP "Desktop Entry"
+
+#define EGG_DESKTOP_FILE_KEY_TYPE "Type"
+#define EGG_DESKTOP_FILE_KEY_VERSION "Version"
+#define EGG_DESKTOP_FILE_KEY_NAME "Name"
+#define EGG_DESKTOP_FILE_KEY_GENERIC_NAME "GenericName"
+#define EGG_DESKTOP_FILE_KEY_NO_DISPLAY "NoDisplay"
+#define EGG_DESKTOP_FILE_KEY_COMMENT "Comment"
+#define EGG_DESKTOP_FILE_KEY_ICON "Icon"
+#define EGG_DESKTOP_FILE_KEY_HIDDEN "Hidden"
+#define EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN "OnlyShowIn"
+#define EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN "NotShowIn"
+#define EGG_DESKTOP_FILE_KEY_TRY_EXEC "TryExec"
+#define EGG_DESKTOP_FILE_KEY_EXEC "Exec"
+#define EGG_DESKTOP_FILE_KEY_PATH "Path"
+#define EGG_DESKTOP_FILE_KEY_TERMINAL "Terminal"
+#define EGG_DESKTOP_FILE_KEY_MIME_TYPE "MimeType"
+#define EGG_DESKTOP_FILE_KEY_CATEGORIES "Categories"
+#define EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY "StartupNotify"
+#define EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS "StartupWMClass"
+#define EGG_DESKTOP_FILE_KEY_URL "URL"
+
+/* Accessors */
+gboolean egg_desktop_file_has_key (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error);
+char *egg_desktop_file_get_string (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error) G_GNUC_MALLOC;
+char *egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ GError **error) G_GNUC_MALLOC;
+gboolean egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error);
+double egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error);
+char **egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ gsize *length,
+ GError **error) G_GNUC_MALLOC;
+char **egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ gsize *length,
+ GError **error) G_GNUC_MALLOC;
+
+
+/* Errors */
+#define EGG_DESKTOP_FILE_ERROR egg_desktop_file_error_quark()
+
+GQuark egg_desktop_file_error_quark (void);
+
+typedef enum {
+ EGG_DESKTOP_FILE_ERROR_INVALID,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION
+} EggDesktopFileError;
+
+/* Global application desktop file */
+void egg_set_desktop_file (const char *desktop_file_path);
+void egg_set_desktop_file_without_defaults (const char *desktop_file_path);
+EggDesktopFile *egg_get_desktop_file (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __EGG_DESKTOP_FILE_H__ */
diff --git a/mate-panel/libegg/eggsmclient-private.h b/mate-panel/libegg/eggsmclient-private.h
new file mode 100644
index 00000000..9f2498ac
--- /dev/null
+++ b/mate-panel/libegg/eggsmclient-private.h
@@ -0,0 +1,57 @@
+/* eggsmclient-private.h
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EGG_SM_CLIENT_PRIVATE_H__
+#define __EGG_SM_CLIENT_PRIVATE_H__
+
+#include <gdkconfig.h>
+#include "eggsmclient.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GKeyFile *egg_sm_client_save_state (EggSMClient *client);
+void egg_sm_client_quit_requested (EggSMClient *client);
+void egg_sm_client_quit_cancelled (EggSMClient *client);
+void egg_sm_client_quit (EggSMClient *client);
+
+#if defined (GDK_WINDOWING_X11)
+# ifdef EGG_SM_CLIENT_BACKEND_XSMP
+GType egg_sm_client_xsmp_get_type (void);
+EggSMClient *egg_sm_client_xsmp_new (void);
+# endif
+# ifdef EGG_SM_CLIENT_BACKEND_DBUS
+GType egg_sm_client_dbus_get_type (void);
+EggSMClient *egg_sm_client_dbus_new (void);
+# endif
+#elif defined (GDK_WINDOWING_WIN32)
+GType egg_sm_client_win32_get_type (void);
+EggSMClient *egg_sm_client_win32_new (void);
+#elif defined (GDK_WINDOWING_QUARTZ)
+GType egg_sm_client_osx_get_type (void);
+EggSMClient *egg_sm_client_osx_new (void);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __EGG_SM_CLIENT_PRIVATE_H__ */
diff --git a/mate-panel/libegg/eggsmclient-xsmp.c b/mate-panel/libegg/eggsmclient-xsmp.c
new file mode 100644
index 00000000..a6d3f11f
--- /dev/null
+++ b/mate-panel/libegg/eggsmclient-xsmp.c
@@ -0,0 +1,1370 @@
+/*
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * Inspired by various other pieces of code including GsmClient (C)
+ * 2001 Havoc Pennington, MateClient (C) 1998 Carsten Schaar, and twm
+ * session code (C) 1998 The Open Group.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "eggsmclient.h"
+#include "eggsmclient-private.h"
+
+#include "eggdesktopfile.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <X11/SM/SMlib.h>
+
+#include <gdk/gdk.h>
+
+#define EGG_TYPE_SM_CLIENT_XSMP (egg_sm_client_xsmp_get_type ())
+#define EGG_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMP))
+#define EGG_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass))
+#define EGG_IS_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_XSMP))
+#define EGG_IS_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_XSMP))
+#define EGG_SM_CLIENT_XSMP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass))
+
+typedef struct _EggSMClientXSMP EggSMClientXSMP;
+typedef struct _EggSMClientXSMPClass EggSMClientXSMPClass;
+
+/* These mostly correspond to the similarly-named states in section
+ * 9.1 of the XSMP spec. Some of the states there aren't represented
+ * here, because we don't need them. SHUTDOWN_CANCELLED is slightly
+ * different from the spec; we use it when the client is IDLE after a
+ * ShutdownCancelled message, but the application is still interacting
+ * and doesn't know the shutdown has been cancelled yet.
+ */
+typedef enum
+{
+ XSMP_STATE_IDLE,
+ XSMP_STATE_SAVE_YOURSELF,
+ XSMP_STATE_INTERACT_REQUEST,
+ XSMP_STATE_INTERACT,
+ XSMP_STATE_SAVE_YOURSELF_DONE,
+ XSMP_STATE_SHUTDOWN_CANCELLED,
+ XSMP_STATE_CONNECTION_CLOSED
+} EggSMClientXSMPState;
+
+static const char *state_names[] = {
+ "idle",
+ "save-yourself",
+ "interact-request",
+ "interact",
+ "save-yourself-done",
+ "shutdown-cancelled",
+ "connection-closed"
+};
+
+#define EGG_SM_CLIENT_XSMP_STATE(xsmp) (state_names[(xsmp)->state])
+
+struct _EggSMClientXSMP
+{
+ EggSMClient parent;
+
+ SmcConn connection;
+ char *client_id;
+
+ EggSMClientXSMPState state;
+ char **restart_command;
+ gboolean set_restart_command;
+ int restart_style;
+
+ guint idle;
+
+ /* Current SaveYourself state */
+ guint expecting_initial_save_yourself : 1;
+ guint need_save_state : 1;
+ guint need_quit_requested : 1;
+ guint interact_errors : 1;
+ guint shutting_down : 1;
+
+ /* Todo list */
+ guint waiting_to_set_initial_properties : 1;
+ guint waiting_to_emit_quit : 1;
+ guint waiting_to_emit_quit_cancelled : 1;
+ guint waiting_to_save_myself : 1;
+
+};
+
+struct _EggSMClientXSMPClass
+{
+ EggSMClientClass parent_class;
+
+};
+
+static void sm_client_xsmp_startup (EggSMClient *client,
+ const char *client_id);
+static void sm_client_xsmp_set_restart_command (EggSMClient *client,
+ int argc,
+ const char **argv);
+static void sm_client_xsmp_will_quit (EggSMClient *client,
+ gboolean will_quit);
+static gboolean sm_client_xsmp_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation);
+
+static void xsmp_save_yourself (SmcConn smc_conn,
+ SmPointer client_data,
+ int save_style,
+ Bool shutdown,
+ int interact_style,
+ Bool fast);
+static void xsmp_die (SmcConn smc_conn,
+ SmPointer client_data);
+static void xsmp_save_complete (SmcConn smc_conn,
+ SmPointer client_data);
+static void xsmp_shutdown_cancelled (SmcConn smc_conn,
+ SmPointer client_data);
+static void xsmp_interact (SmcConn smc_conn,
+ SmPointer client_data);
+
+static SmProp *array_prop (const char *name,
+ ...);
+static SmProp *ptrarray_prop (const char *name,
+ GPtrArray *values);
+static SmProp *string_prop (const char *name,
+ const char *value);
+static SmProp *card8_prop (const char *name,
+ unsigned char value);
+
+static void set_properties (EggSMClientXSMP *xsmp, ...);
+static void delete_properties (EggSMClientXSMP *xsmp, ...);
+
+static GPtrArray *generate_command (char **restart_command,
+ const char *client_id,
+ const char *state_file);
+
+static void save_state (EggSMClientXSMP *xsmp);
+static void do_save_yourself (EggSMClientXSMP *xsmp);
+static void update_pending_events (EggSMClientXSMP *xsmp);
+
+static void ice_init (void);
+static gboolean process_ice_messages (IceConn ice_conn);
+static void smc_error_handler (SmcConn smc_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ SmPointer values);
+
+G_DEFINE_TYPE (EggSMClientXSMP, egg_sm_client_xsmp, EGG_TYPE_SM_CLIENT)
+
+static void
+egg_sm_client_xsmp_init (EggSMClientXSMP *xsmp)
+{
+ xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
+ xsmp->connection = NULL;
+ xsmp->restart_style = SmRestartIfRunning;
+}
+
+static void
+egg_sm_client_xsmp_class_init (EggSMClientXSMPClass *klass)
+{
+ EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
+
+ sm_client_class->startup = sm_client_xsmp_startup;
+ sm_client_class->set_restart_command = sm_client_xsmp_set_restart_command;
+ sm_client_class->will_quit = sm_client_xsmp_will_quit;
+ sm_client_class->end_session = sm_client_xsmp_end_session;
+}
+
+EggSMClient *
+egg_sm_client_xsmp_new (void)
+{
+ if (!g_getenv ("SESSION_MANAGER"))
+ return NULL;
+
+ return g_object_new (EGG_TYPE_SM_CLIENT_XSMP, NULL);
+}
+
+static gboolean
+sm_client_xsmp_set_initial_properties (gpointer user_data)
+{
+ EggSMClientXSMP *xsmp = user_data;
+ EggDesktopFile *desktop_file;
+ GPtrArray *clone, *restart;
+ char pid_str[64];
+
+ if (xsmp->idle)
+ {
+ g_source_remove (xsmp->idle);
+ xsmp->idle = 0;
+ }
+ xsmp->waiting_to_set_initial_properties = FALSE;
+
+ if (egg_sm_client_get_mode () == EGG_SM_CLIENT_MODE_NO_RESTART)
+ xsmp->restart_style = SmRestartNever;
+
+ /* Parse info out of desktop file */
+ desktop_file = egg_get_desktop_file ();
+ if (desktop_file)
+ {
+ GError *err = NULL;
+ char *cmdline, **argv;
+ int argc;
+
+ if (xsmp->restart_style == SmRestartIfRunning)
+ {
+ if (egg_desktop_file_get_boolean (desktop_file,
+ "X-MATE-AutoRestart", NULL))
+ xsmp->restart_style = SmRestartImmediately;
+ }
+
+ if (!xsmp->set_restart_command)
+ {
+ cmdline = egg_desktop_file_parse_exec (desktop_file, NULL, &err);
+ if (cmdline && g_shell_parse_argv (cmdline, &argc, &argv, &err))
+ {
+ egg_sm_client_set_restart_command (EGG_SM_CLIENT (xsmp),
+ argc, (const char **)argv);
+ g_strfreev (argv);
+ }
+ else
+ {
+ g_warning ("Could not parse Exec line in desktop file: %s",
+ err->message);
+ g_error_free (err);
+ }
+ g_free (cmdline);
+ }
+ }
+
+ if (!xsmp->set_restart_command)
+ xsmp->restart_command = g_strsplit (g_get_prgname (), " ", -1);
+
+ clone = generate_command (xsmp->restart_command, NULL, NULL);
+ restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL);
+
+ g_debug ("Setting initial properties");
+
+ /* Program, CloneCommand, RestartCommand, and UserID are required.
+ * ProcessID isn't required, but the SM may be able to do something
+ * useful with it.
+ */
+ g_snprintf (pid_str, sizeof (pid_str), "%lu", (gulong) getpid ());
+ set_properties (xsmp,
+ string_prop (SmProgram, g_get_prgname ()),
+ ptrarray_prop (SmCloneCommand, clone),
+ ptrarray_prop (SmRestartCommand, restart),
+ string_prop (SmUserID, g_get_user_name ()),
+ string_prop (SmProcessID, pid_str),
+ card8_prop (SmRestartStyleHint, xsmp->restart_style),
+ NULL);
+ g_ptr_array_free (clone, TRUE);
+ g_ptr_array_free (restart, TRUE);
+
+ if (desktop_file)
+ {
+ set_properties (xsmp,
+ string_prop ("_GSM_DesktopFile", egg_desktop_file_get_source (desktop_file)),
+ NULL);
+ }
+
+ update_pending_events (xsmp);
+ return FALSE;
+}
+
+/* This gets called from two different places: xsmp_die() (when the
+ * server asks us to disconnect) and process_ice_messages() (when the
+ * server disconnects unexpectedly).
+ */
+static void
+sm_client_xsmp_disconnect (EggSMClientXSMP *xsmp)
+{
+ SmcConn connection;
+
+ if (!xsmp->connection)
+ return;
+
+ g_debug ("Disconnecting");
+
+ connection = xsmp->connection;
+ xsmp->connection = NULL;
+ SmcCloseConnection (connection, 0, NULL);
+ xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
+
+ xsmp->waiting_to_save_myself = FALSE;
+ update_pending_events (xsmp);
+}
+
+static void
+sm_client_xsmp_startup (EggSMClient *client,
+ const char *client_id)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+ SmcCallbacks callbacks;
+ char *ret_client_id;
+ char error_string_ret[256];
+
+ xsmp->client_id = g_strdup (client_id);
+
+ ice_init ();
+ SmcSetErrorHandler (smc_error_handler);
+
+ callbacks.save_yourself.callback = xsmp_save_yourself;
+ callbacks.die.callback = xsmp_die;
+ callbacks.save_complete.callback = xsmp_save_complete;
+ callbacks.shutdown_cancelled.callback = xsmp_shutdown_cancelled;
+
+ callbacks.save_yourself.client_data = xsmp;
+ callbacks.die.client_data = xsmp;
+ callbacks.save_complete.client_data = xsmp;
+ callbacks.shutdown_cancelled.client_data = xsmp;
+
+ client_id = NULL;
+ error_string_ret[0] = '\0';
+ xsmp->connection =
+ SmcOpenConnection (NULL, xsmp, SmProtoMajor, SmProtoMinor,
+ SmcSaveYourselfProcMask | SmcDieProcMask |
+ SmcSaveCompleteProcMask |
+ SmcShutdownCancelledProcMask,
+ &callbacks,
+ xsmp->client_id, &ret_client_id,
+ sizeof (error_string_ret), error_string_ret);
+
+ if (!xsmp->connection)
+ {
+ g_warning ("Failed to connect to the session manager: %s\n",
+ error_string_ret[0] ?
+ error_string_ret : "no error message given");
+ xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
+ return;
+ }
+
+ /* We expect a pointless initial SaveYourself if either (a) we
+ * didn't have an initial client ID, or (b) we DID have an initial
+ * client ID, but the server rejected it and gave us a new one.
+ */
+ if (!xsmp->client_id ||
+ (ret_client_id && strcmp (xsmp->client_id, ret_client_id) != 0))
+ xsmp->expecting_initial_save_yourself = TRUE;
+
+ if (ret_client_id)
+ {
+ g_free (xsmp->client_id);
+ xsmp->client_id = g_strdup (ret_client_id);
+ free (ret_client_id);
+
+ gdk_threads_enter ();
+ gdk_set_sm_client_id (xsmp->client_id);
+ gdk_threads_leave ();
+
+ g_debug ("Got client ID \"%s\"", xsmp->client_id);
+ }
+
+ xsmp->state = XSMP_STATE_IDLE;
+
+ /* Do not set the initial properties until we reach the main loop,
+ * so that the application has a chance to call
+ * egg_set_desktop_file(). (This may also help the session manager
+ * have a better idea of when the application is fully up and
+ * running.)
+ */
+ xsmp->waiting_to_set_initial_properties = TRUE;
+ xsmp->idle = g_idle_add (sm_client_xsmp_set_initial_properties, client);
+}
+
+static void
+sm_client_xsmp_set_restart_command (EggSMClient *client,
+ int argc,
+ const char **argv)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+ int i;
+
+ g_strfreev (xsmp->restart_command);
+
+ xsmp->restart_command = g_new (char *, argc + 1);
+ for (i = 0; i < argc; i++)
+ xsmp->restart_command[i] = g_strdup (argv[i]);
+ xsmp->restart_command[i] = NULL;
+
+ xsmp->set_restart_command = TRUE;
+}
+
+static void
+sm_client_xsmp_will_quit (EggSMClient *client,
+ gboolean will_quit)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+
+ if (xsmp->state == XSMP_STATE_CONNECTION_CLOSED)
+ {
+ /* The session manager has already exited! Schedule a quit
+ * signal.
+ */
+ xsmp->waiting_to_emit_quit = TRUE;
+ update_pending_events (xsmp);
+ return;
+ }
+ else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ /* We received a ShutdownCancelled message while the application
+ * was interacting; Schedule a quit_cancelled signal.
+ */
+ xsmp->waiting_to_emit_quit_cancelled = TRUE;
+ update_pending_events (xsmp);
+ return;
+ }
+
+ g_return_if_fail (xsmp->state == XSMP_STATE_INTERACT);
+
+ g_debug ("Sending InteractDone(%s)", will_quit ? "False" : "True");
+ SmcInteractDone (xsmp->connection, !will_quit);
+
+ if (will_quit && xsmp->need_save_state)
+ save_state (xsmp);
+
+ g_debug ("Sending SaveYourselfDone(%s)", will_quit ? "True" : "False");
+ SmcSaveYourselfDone (xsmp->connection, will_quit);
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+}
+
+static gboolean
+sm_client_xsmp_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+ int save_type;
+
+ /* To end the session via XSMP, we have to send a
+ * SaveYourselfRequest. We aren't allowed to do that if anything
+ * else is going on, but we don't want to expose this fact to the
+ * application. So we do our best to patch things up here...
+ *
+ * In the worst case, this method might block for some length of
+ * time in process_ice_messages, but the only time that code path is
+ * honestly likely to get hit is if the application tries to end the
+ * session as the very first thing it does, in which case it
+ * probably won't actually block anyway. It's not worth gunking up
+ * the API to try to deal nicely with the other 0.01% of cases where
+ * this happens.
+ */
+
+ while (xsmp->state != XSMP_STATE_IDLE ||
+ xsmp->expecting_initial_save_yourself)
+ {
+ /* If we're already shutting down, we don't need to do anything. */
+ if (xsmp->shutting_down)
+ return TRUE;
+
+ switch (xsmp->state)
+ {
+ case XSMP_STATE_CONNECTION_CLOSED:
+ return FALSE;
+
+ case XSMP_STATE_SAVE_YOURSELF:
+ /* Trying to log out from the save_state callback? Whatever.
+ * Abort the save_state.
+ */
+ SmcSaveYourselfDone (xsmp->connection, FALSE);
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+ break;
+
+ case XSMP_STATE_INTERACT_REQUEST:
+ case XSMP_STATE_INTERACT:
+ case XSMP_STATE_SHUTDOWN_CANCELLED:
+ /* Already in a shutdown-related state, just ignore
+ * the new shutdown request...
+ */
+ return TRUE;
+
+ case XSMP_STATE_IDLE:
+ if (xsmp->waiting_to_set_initial_properties)
+ sm_client_xsmp_set_initial_properties (xsmp);
+
+ if (!xsmp->expecting_initial_save_yourself)
+ break;
+ /* else fall through */
+
+ case XSMP_STATE_SAVE_YOURSELF_DONE:
+ /* We need to wait for some response from the server.*/
+ process_ice_messages (SmcGetIceConnection (xsmp->connection));
+ break;
+
+ default:
+ /* Hm... shouldn't happen */
+ return FALSE;
+ }
+ }
+
+ /* xfce4-session will do the wrong thing if we pass SmSaveGlobal and
+ * the user chooses to save the session. But mate-session will do
+ * the wrong thing if we pass SmSaveBoth and the user chooses NOT to
+ * save the session... Sigh.
+ */
+ if (!strcmp (SmcVendor (xsmp->connection), "xfce4-session"))
+ save_type = SmSaveBoth;
+ else
+ save_type = SmSaveGlobal;
+
+ g_debug ("Sending SaveYourselfRequest(SmSaveGlobal, Shutdown, SmInteractStyleAny, %sFast)", request_confirmation ? "!" : "");
+ SmcRequestSaveYourself (xsmp->connection,
+ save_type,
+ True, /* shutdown */
+ SmInteractStyleAny,
+ !request_confirmation, /* fast */
+ True /* global */);
+ return TRUE;
+}
+
+static gboolean
+idle_do_pending_events (gpointer data)
+{
+ EggSMClientXSMP *xsmp = data;
+ EggSMClient *client = data;
+
+ gdk_threads_enter ();
+
+ xsmp->idle = 0;
+
+ if (xsmp->waiting_to_emit_quit)
+ {
+ xsmp->waiting_to_emit_quit = FALSE;
+ egg_sm_client_quit (client);
+ goto out;
+ }
+
+ if (xsmp->waiting_to_emit_quit_cancelled)
+ {
+ xsmp->waiting_to_emit_quit_cancelled = FALSE;
+ egg_sm_client_quit_cancelled (client);
+ xsmp->state = XSMP_STATE_IDLE;
+ }
+
+ if (xsmp->waiting_to_save_myself)
+ {
+ xsmp->waiting_to_save_myself = FALSE;
+ do_save_yourself (xsmp);
+ }
+
+ out:
+ gdk_threads_leave ();
+ return FALSE;
+}
+
+static void
+update_pending_events (EggSMClientXSMP *xsmp)
+{
+ gboolean want_idle =
+ xsmp->waiting_to_emit_quit ||
+ xsmp->waiting_to_emit_quit_cancelled ||
+ xsmp->waiting_to_save_myself;
+
+ if (want_idle)
+ {
+ if (xsmp->idle == 0)
+ xsmp->idle = g_idle_add (idle_do_pending_events, xsmp);
+ }
+ else
+ {
+ if (xsmp->idle != 0)
+ g_source_remove (xsmp->idle);
+ xsmp->idle = 0;
+ }
+}
+
+static void
+fix_broken_state (EggSMClientXSMP *xsmp, const char *message,
+ gboolean send_interact_done,
+ gboolean send_save_yourself_done)
+{
+ g_warning ("Received XSMP %s message in state %s: client or server error",
+ message, EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ /* Forget any pending SaveYourself plans we had */
+ xsmp->waiting_to_save_myself = FALSE;
+ update_pending_events (xsmp);
+
+ if (send_interact_done)
+ SmcInteractDone (xsmp->connection, False);
+ if (send_save_yourself_done)
+ SmcSaveYourselfDone (xsmp->connection, True);
+
+ xsmp->state = send_save_yourself_done ? XSMP_STATE_SAVE_YOURSELF_DONE : XSMP_STATE_IDLE;
+}
+
+/* SM callbacks */
+
+static void
+xsmp_save_yourself (SmcConn smc_conn,
+ SmPointer client_data,
+ int save_type,
+ Bool shutdown,
+ int interact_style,
+ Bool fast)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ gboolean wants_quit_requested;
+
+ g_debug ("Received SaveYourself(%s, %s, %s, %s) in state %s",
+ save_type == SmSaveLocal ? "SmSaveLocal" :
+ save_type == SmSaveGlobal ? "SmSaveGlobal" : "SmSaveBoth",
+ shutdown ? "Shutdown" : "!Shutdown",
+ interact_style == SmInteractStyleAny ? "SmInteractStyleAny" :
+ interact_style == SmInteractStyleErrors ? "SmInteractStyleErrors" :
+ "SmInteractStyleNone", fast ? "Fast" : "!Fast",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ if (xsmp->state != XSMP_STATE_IDLE &&
+ xsmp->state != XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ fix_broken_state (xsmp, "SaveYourself", FALSE, TRUE);
+ return;
+ }
+
+ if (xsmp->waiting_to_set_initial_properties)
+ sm_client_xsmp_set_initial_properties (xsmp);
+
+ /* If this is the initial SaveYourself, ignore it; we've already set
+ * properties and there's no reason to actually save state too.
+ */
+ if (xsmp->expecting_initial_save_yourself)
+ {
+ xsmp->expecting_initial_save_yourself = FALSE;
+
+ if (save_type == SmSaveLocal &&
+ interact_style == SmInteractStyleNone &&
+ !shutdown && !fast)
+ {
+ g_debug ("Sending SaveYourselfDone(True) for initial SaveYourself");
+ SmcSaveYourselfDone (xsmp->connection, True);
+ /* As explained in the comment at the end of
+ * do_save_yourself(), SAVE_YOURSELF_DONE is the correct
+ * state here, not IDLE.
+ */
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+ return;
+ }
+ else
+ g_warning ("First SaveYourself was not the expected one!");
+ }
+
+ /* Even ignoring the "fast" flag completely, there are still 18
+ * different combinations of save_type, shutdown and interact_style.
+ * We interpret them as follows:
+ *
+ * Type Shutdown Interact Interpretation
+ * G F A/E/N do nothing (1)
+ * G T N do nothing (1)*
+ * G T A/E quit_requested (2)
+ * L/B F A/E/N save_state (3)
+ * L/B T N save_state (3)*
+ * L/B T A/E quit_requested, then save_state (4)
+ *
+ * 1. Do nothing, because the SM asked us to do something
+ * uninteresting (save open files, but then don't quit
+ * afterward) or rude (save open files without asking the user
+ * for confirmation).
+ *
+ * 2. Request interaction and then emit ::quit_requested. This
+ * perhaps isn't quite correct for the SmInteractStyleErrors
+ * case, but we don't care.
+ *
+ * 3. Emit ::save_state. The SmSaveBoth SaveYourselfs in these
+ * rows essentially get demoted to SmSaveLocal, because their
+ * Global halves correspond to "do nothing".
+ *
+ * 4. Request interaction, emit ::quit_requested, and then emit
+ * ::save_state after interacting. This is the SmSaveBoth
+ * equivalent of #2, but we also promote SmSaveLocal shutdown
+ * SaveYourselfs to SmSaveBoth here, because we want to give
+ * the user a chance to save open files before quitting.
+ *
+ * (* It would be nice if we could do something useful when the
+ * session manager sends a SaveYourself with shutdown True and
+ * SmInteractStyleNone. But we can't, so we just pretend it didn't
+ * even tell us it was shutting down. The docs for ::quit mention
+ * that it might not always be preceded by ::quit_requested.)
+ */
+
+ /* As an optimization, we don't actually request interaction and
+ * emit ::quit_requested if the application isn't listening to the
+ * signal.
+ */
+ wants_quit_requested = g_signal_has_handler_pending (xsmp, g_signal_lookup ("quit_requested", EGG_TYPE_SM_CLIENT), 0, FALSE);
+
+ xsmp->need_save_state = (save_type != SmSaveGlobal);
+ xsmp->need_quit_requested = (shutdown && wants_quit_requested &&
+ interact_style != SmInteractStyleNone);
+ xsmp->interact_errors = (interact_style == SmInteractStyleErrors);
+
+ xsmp->shutting_down = shutdown;
+
+ do_save_yourself (xsmp);
+}
+
+static void
+do_save_yourself (EggSMClientXSMP *xsmp)
+{
+ if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ /* The SM cancelled a previous SaveYourself, but we haven't yet
+ * had a chance to tell the application, so we can't start
+ * processing this SaveYourself yet.
+ */
+ xsmp->waiting_to_save_myself = TRUE;
+ update_pending_events (xsmp);
+ return;
+ }
+
+ if (xsmp->need_quit_requested)
+ {
+ xsmp->state = XSMP_STATE_INTERACT_REQUEST;
+
+ g_debug ("Sending InteractRequest(%s)",
+ xsmp->interact_errors ? "Error" : "Normal");
+ SmcInteractRequest (xsmp->connection,
+ xsmp->interact_errors ? SmDialogError : SmDialogNormal,
+ xsmp_interact,
+ xsmp);
+ return;
+ }
+
+ if (xsmp->need_save_state)
+ {
+ save_state (xsmp);
+
+ /* Though unlikely, the client could have been disconnected
+ * while the application was saving its state.
+ */
+ if (!xsmp->connection)
+ return;
+ }
+
+ g_debug ("Sending SaveYourselfDone(True)");
+ SmcSaveYourselfDone (xsmp->connection, True);
+
+ /* The client state diagram in the XSMP spec says that after a
+ * non-shutdown SaveYourself, we go directly back to "idle". But
+ * everything else in both the XSMP spec and the libSM docs
+ * disagrees.
+ */
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+}
+
+static void
+save_state (EggSMClientXSMP *xsmp)
+{
+ GKeyFile *state_file;
+ char *state_file_path, *data;
+ EggDesktopFile *desktop_file;
+ GPtrArray *restart;
+ int offset, fd;
+
+ /* We set xsmp->state before emitting save_state, but our caller is
+ * responsible for setting it back afterward.
+ */
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF;
+
+ state_file = egg_sm_client_save_state ((EggSMClient *)xsmp);
+ if (!state_file)
+ {
+ restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL);
+ set_properties (xsmp,
+ ptrarray_prop (SmRestartCommand, restart),
+ NULL);
+ g_ptr_array_free (restart, TRUE);
+ delete_properties (xsmp, SmDiscardCommand, NULL);
+ return;
+ }
+
+ desktop_file = egg_get_desktop_file ();
+ if (desktop_file)
+ {
+ GKeyFile *merged_file;
+ char *desktop_file_path;
+
+ merged_file = g_key_file_new ();
+ desktop_file_path =
+ g_filename_from_uri (egg_desktop_file_get_source (desktop_file),
+ NULL, NULL);
+ if (desktop_file_path &&
+ g_key_file_load_from_file (merged_file, desktop_file_path,
+ G_KEY_FILE_KEEP_COMMENTS |
+ G_KEY_FILE_KEEP_TRANSLATIONS, NULL))
+ {
+ guint g, k, i;
+ char **groups, **keys, *value, *exec;
+
+ groups = g_key_file_get_groups (state_file, NULL);
+ for (g = 0; groups[g]; g++)
+ {
+ keys = g_key_file_get_keys (state_file, groups[g], NULL, NULL);
+ for (k = 0; keys[k]; k++)
+ {
+ value = g_key_file_get_value (state_file, groups[g],
+ keys[k], NULL);
+ if (value)
+ {
+ g_key_file_set_value (merged_file, groups[g],
+ keys[k], value);
+ g_free (value);
+ }
+ }
+ g_strfreev (keys);
+ }
+ g_strfreev (groups);
+
+ g_key_file_free (state_file);
+ state_file = merged_file;
+
+ /* Update Exec key using "--sm-client-state-file %k" */
+ restart = generate_command (xsmp->restart_command,
+ NULL, "%k");
+ for (i = 0; i < restart->len; i++)
+ restart->pdata[i] = g_shell_quote (restart->pdata[i]);
+ g_ptr_array_add (restart, NULL);
+ exec = g_strjoinv (" ", (char **)restart->pdata);
+ g_strfreev ((char **)restart->pdata);
+ g_ptr_array_free (restart, FALSE);
+
+ g_key_file_set_string (state_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ exec);
+ g_free (exec);
+ }
+ else
+ desktop_file = NULL;
+
+ g_free (desktop_file_path);
+ }
+
+ /* Now write state_file to disk. (We can't use mktemp(), because
+ * that requires the filename to end with "XXXXXX", and we want
+ * it to end with ".desktop".)
+ */
+
+ data = g_key_file_to_data (state_file, NULL, NULL);
+ g_key_file_free (state_file);
+
+ offset = 0;
+ while (1)
+ {
+ state_file_path = g_strdup_printf ("%s%csession-state%c%s-%ld.%s",
+ g_get_user_config_dir (),
+ G_DIR_SEPARATOR, G_DIR_SEPARATOR,
+ g_get_prgname (),
+ (long)time (NULL) + offset,
+ desktop_file ? "desktop" : "state");
+
+ fd = open (state_file_path, O_WRONLY | O_CREAT | O_EXCL, 0644);
+ if (fd == -1)
+ {
+ if (errno == EEXIST)
+ {
+ offset++;
+ g_free (state_file_path);
+ continue;
+ }
+ else if (errno == ENOTDIR || errno == ENOENT)
+ {
+ char *sep = strrchr (state_file_path, G_DIR_SEPARATOR);
+
+ *sep = '\0';
+ if (g_mkdir_with_parents (state_file_path, 0755) != 0)
+ {
+ g_warning ("Could not create directory '%s'",
+ state_file_path);
+ g_free (state_file_path);
+ state_file_path = NULL;
+ break;
+ }
+
+ continue;
+ }
+
+ g_warning ("Could not create file '%s': %s",
+ state_file_path, g_strerror (errno));
+ g_free (state_file_path);
+ state_file_path = NULL;
+ break;
+ }
+
+ close (fd);
+ g_file_set_contents (state_file_path, data, -1, NULL);
+ break;
+ }
+ g_free (data);
+
+ restart = generate_command (xsmp->restart_command, xsmp->client_id,
+ state_file_path);
+ set_properties (xsmp,
+ ptrarray_prop (SmRestartCommand, restart),
+ NULL);
+ g_ptr_array_free (restart, TRUE);
+
+ if (state_file_path)
+ {
+ set_properties (xsmp,
+ array_prop (SmDiscardCommand,
+ "/bin/rm", "-rf", state_file_path,
+ NULL),
+ NULL);
+ g_free (state_file_path);
+ }
+}
+
+static void
+xsmp_interact (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ EggSMClient *client = client_data;
+
+ g_debug ("Received Interact message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ if (xsmp->state != XSMP_STATE_INTERACT_REQUEST)
+ {
+ fix_broken_state (xsmp, "Interact", TRUE, TRUE);
+ return;
+ }
+
+ xsmp->state = XSMP_STATE_INTERACT;
+ egg_sm_client_quit_requested (client);
+}
+
+static void
+xsmp_die (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ EggSMClient *client = client_data;
+
+ g_debug ("Received Die message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ sm_client_xsmp_disconnect (xsmp);
+ egg_sm_client_quit (client);
+}
+
+static void
+xsmp_save_complete (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+
+ g_debug ("Received SaveComplete message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE)
+ xsmp->state = XSMP_STATE_IDLE;
+ else
+ fix_broken_state (xsmp, "SaveComplete", FALSE, FALSE);
+}
+
+static void
+xsmp_shutdown_cancelled (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ EggSMClient *client = client_data;
+
+ g_debug ("Received ShutdownCancelled message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ xsmp->shutting_down = FALSE;
+
+ if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE)
+ {
+ /* We've finished interacting and now the SM has agreed to
+ * cancel the shutdown.
+ */
+ xsmp->state = XSMP_STATE_IDLE;
+ egg_sm_client_quit_cancelled (client);
+ }
+ else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ /* Hm... ok, so we got a shutdown SaveYourself, which got
+ * cancelled, but the application was still interacting, so we
+ * didn't tell it yet, and then *another* SaveYourself arrived,
+ * which we must still be waiting to tell the app about, except
+ * that now that SaveYourself has been cancelled too! Dizzy yet?
+ */
+ xsmp->waiting_to_save_myself = FALSE;
+ update_pending_events (xsmp);
+ }
+ else
+ {
+ g_debug ("Sending SaveYourselfDone(False)");
+ SmcSaveYourselfDone (xsmp->connection, False);
+
+ if (xsmp->state == XSMP_STATE_INTERACT)
+ {
+ /* The application is currently interacting, so we can't
+ * tell it about the cancellation yet; we will wait until
+ * after it calls egg_sm_client_will_quit().
+ */
+ xsmp->state = XSMP_STATE_SHUTDOWN_CANCELLED;
+ }
+ else
+ {
+ /* The shutdown was cancelled before the application got a
+ * chance to interact.
+ */
+ xsmp->state = XSMP_STATE_IDLE;
+ }
+ }
+}
+
+/* Utilities */
+
+/* Create a restart/clone/Exec command based on @restart_command.
+ * If @client_id is non-%NULL, add "--sm-client-id @client_id".
+ * If @state_file is non-%NULL, add "--sm-client-state-file @state_file".
+ *
+ * None of the input strings are g_strdup()ed; the caller must keep
+ * them around until it is done with the returned GPtrArray, and must
+ * then free the array, but not its contents.
+ */
+static GPtrArray *
+generate_command (char **restart_command, const char *client_id,
+ const char *state_file)
+{
+ GPtrArray *cmd;
+ int i;
+
+ cmd = g_ptr_array_new ();
+ g_ptr_array_add (cmd, restart_command[0]);
+
+ if (client_id)
+ {
+ g_ptr_array_add (cmd, (char *)"--sm-client-id");
+ g_ptr_array_add (cmd, (char *)client_id);
+ }
+
+ if (state_file)
+ {
+ g_ptr_array_add (cmd, (char *)"--sm-client-state-file");
+ g_ptr_array_add (cmd, (char *)state_file);
+ }
+
+ for (i = 1; restart_command[i]; i++)
+ g_ptr_array_add (cmd, restart_command[i]);
+
+ return cmd;
+}
+
+/* Takes a NULL-terminated list of SmProp * values, created by
+ * array_prop, ptrarray_prop, string_prop, card8_prop, sets them, and
+ * frees them.
+ */
+static void
+set_properties (EggSMClientXSMP *xsmp, ...)
+{
+ GPtrArray *props;
+ SmProp *prop;
+ va_list ap;
+ guint i;
+
+ props = g_ptr_array_new ();
+
+ va_start (ap, xsmp);
+ while ((prop = va_arg (ap, SmProp *)))
+ g_ptr_array_add (props, prop);
+ va_end (ap);
+
+ if (xsmp->connection)
+ {
+ SmcSetProperties (xsmp->connection, props->len,
+ (SmProp **)props->pdata);
+ }
+
+ for (i = 0; i < props->len; i++)
+ {
+ prop = props->pdata[i];
+ g_free (prop->vals);
+ g_free (prop);
+ }
+ g_ptr_array_free (props, TRUE);
+}
+
+/* Takes a NULL-terminated list of property names and deletes them. */
+static void
+delete_properties (EggSMClientXSMP *xsmp, ...)
+{
+ GPtrArray *props;
+ char *prop;
+ va_list ap;
+
+ if (!xsmp->connection)
+ return;
+
+ props = g_ptr_array_new ();
+
+ va_start (ap, xsmp);
+ while ((prop = va_arg (ap, char *)))
+ g_ptr_array_add (props, prop);
+ va_end (ap);
+
+ SmcDeleteProperties (xsmp->connection, props->len,
+ (char **)props->pdata);
+
+ g_ptr_array_free (props, TRUE);
+}
+
+/* Takes an array of strings and creates a LISTofARRAY8 property. The
+ * strings are neither dupped nor freed; they need to remain valid
+ * until you're done with the SmProp.
+ */
+static SmProp *
+array_prop (const char *name, ...)
+{
+ SmProp *prop;
+ SmPropValue pv;
+ GArray *vals;
+ char *value;
+ va_list ap;
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = (char *)SmLISTofARRAY8;
+
+ vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue));
+
+ va_start (ap, name);
+ while ((value = va_arg (ap, char *)))
+ {
+ pv.length = strlen (value);
+ pv.value = value;
+ g_array_append_val (vals, pv);
+ }
+
+ prop->num_vals = vals->len;
+ prop->vals = (SmPropValue *)vals->data;
+
+ g_array_free (vals, FALSE);
+
+ return prop;
+}
+
+/* Takes a GPtrArray of strings and creates a LISTofARRAY8 property.
+ * The array contents are neither dupped nor freed; they need to
+ * remain valid until you're done with the SmProp.
+ */
+static SmProp *
+ptrarray_prop (const char *name, GPtrArray *values)
+{
+ SmProp *prop;
+ SmPropValue pv;
+ GArray *vals;
+ guint i;
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = (char *)SmLISTofARRAY8;
+
+ vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue));
+
+ for (i = 0; i < values->len; i++)
+ {
+ pv.length = strlen (values->pdata[i]);
+ pv.value = values->pdata[i];
+ g_array_append_val (vals, pv);
+ }
+
+ prop->num_vals = vals->len;
+ prop->vals = (SmPropValue *)vals->data;
+
+ g_array_free (vals, FALSE);
+
+ return prop;
+}
+
+/* Takes a string and creates an ARRAY8 property. The string is
+ * neither dupped nor freed; it needs to remain valid until you're
+ * done with the SmProp.
+ */
+static SmProp *
+string_prop (const char *name, const char *value)
+{
+ SmProp *prop;
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = (char *)SmARRAY8;
+
+ prop->num_vals = 1;
+ prop->vals = g_new (SmPropValue, 1);
+
+ prop->vals[0].length = strlen (value);
+ prop->vals[0].value = (char *)value;
+
+ return prop;
+}
+
+/* Takes a char and creates a CARD8 property. */
+static SmProp *
+card8_prop (const char *name, unsigned char value)
+{
+ SmProp *prop;
+ char *card8val;
+
+ /* To avoid having to allocate and free prop->vals[0], we cheat and
+ * make vals a 2-element-long array and then use the second element
+ * to store value.
+ */
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = (char *)SmCARD8;
+
+ prop->num_vals = 1;
+ prop->vals = g_new (SmPropValue, 2);
+ card8val = (char *)(&prop->vals[1]);
+ card8val[0] = value;
+
+ prop->vals[0].length = 1;
+ prop->vals[0].value = card8val;
+
+ return prop;
+}
+
+/* ICE code. This makes no effort to play nice with anyone else trying
+ * to use libICE. Fortunately, no one uses libICE for anything other
+ * than SM. (DCOP uses ICE, but it has its own private copy of
+ * libICE.)
+ *
+ * When this moves to gtk, it will need to be cleverer, to avoid
+ * tripping over old apps that use MateClient or that use libSM
+ * directly.
+ */
+
+#include <X11/ICE/ICElib.h>
+#include <fcntl.h>
+
+static void ice_error_handler (IceConn ice_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ IcePointer values);
+static void ice_io_error_handler (IceConn ice_conn);
+static void ice_connection_watch (IceConn ice_conn,
+ IcePointer client_data,
+ Bool opening,
+ IcePointer *watch_data);
+
+static void
+ice_init (void)
+{
+ IceSetIOErrorHandler (ice_io_error_handler);
+ IceSetErrorHandler (ice_error_handler);
+ IceAddConnectionWatch (ice_connection_watch, NULL);
+}
+
+static gboolean
+process_ice_messages (IceConn ice_conn)
+{
+ IceProcessMessagesStatus status;
+
+ gdk_threads_enter ();
+ status = IceProcessMessages (ice_conn, NULL, NULL);
+ gdk_threads_leave ();
+
+ switch (status)
+ {
+ case IceProcessMessagesSuccess:
+ return TRUE;
+
+ case IceProcessMessagesIOError:
+ sm_client_xsmp_disconnect (IceGetConnectionContext (ice_conn));
+ return FALSE;
+
+ case IceProcessMessagesConnectionClosed:
+ return FALSE;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static gboolean
+ice_iochannel_watch (GIOChannel *channel,
+ GIOCondition condition,
+ gpointer client_data)
+{
+ return process_ice_messages (client_data);
+}
+
+static void
+ice_connection_watch (IceConn ice_conn,
+ IcePointer client_data,
+ Bool opening,
+ IcePointer *watch_data)
+{
+ guint watch_id;
+
+ if (opening)
+ {
+ GIOChannel *channel;
+ int fd = IceConnectionNumber (ice_conn);
+
+ fcntl (fd, F_SETFD, fcntl (fd, F_GETFD, 0) | FD_CLOEXEC);
+ channel = g_io_channel_unix_new (fd);
+ watch_id = g_io_add_watch (channel, G_IO_IN | G_IO_ERR,
+ ice_iochannel_watch, ice_conn);
+ g_io_channel_unref (channel);
+
+ *watch_data = GUINT_TO_POINTER (watch_id);
+ }
+ else
+ {
+ watch_id = GPOINTER_TO_UINT (*watch_data);
+ g_source_remove (watch_id);
+ }
+}
+
+static void
+ice_error_handler (IceConn ice_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ IcePointer values)
+{
+ /* Do nothing */
+}
+
+static void
+ice_io_error_handler (IceConn ice_conn)
+{
+ /* Do nothing */
+}
+
+static void
+smc_error_handler (SmcConn smc_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ SmPointer values)
+{
+ /* Do nothing */
+}
diff --git a/mate-panel/libegg/eggsmclient.c b/mate-panel/libegg/eggsmclient.c
new file mode 100644
index 00000000..2b480cca
--- /dev/null
+++ b/mate-panel/libegg/eggsmclient.c
@@ -0,0 +1,604 @@
+/*
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "eggsmclient.h"
+#include "eggsmclient-private.h"
+
+static void egg_sm_client_debug_handler (const char *log_domain,
+ GLogLevelFlags log_level,
+ const char *message,
+ gpointer user_data);
+
+enum {
+ SAVE_STATE,
+ QUIT_REQUESTED,
+ QUIT_CANCELLED,
+ QUIT,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+struct _EggSMClientPrivate {
+ GKeyFile *state_file;
+};
+
+#define EGG_SM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EGG_TYPE_SM_CLIENT, EggSMClientPrivate))
+
+G_DEFINE_TYPE (EggSMClient, egg_sm_client, G_TYPE_OBJECT)
+
+static EggSMClient *global_client;
+static EggSMClientMode global_client_mode = EGG_SM_CLIENT_MODE_NORMAL;
+
+static void
+egg_sm_client_init (EggSMClient *client)
+{
+ ;
+}
+
+static void
+egg_sm_client_class_init (EggSMClientClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (EggSMClientPrivate));
+
+ /**
+ * EggSMClient::save_state:
+ * @client: the client
+ * @state_file: a #GKeyFile to save state information into
+ *
+ * Emitted when the session manager has requested that the
+ * application save information about its current state. The
+ * application should save its state into @state_file, and then the
+ * session manager may then restart the application in a future
+ * session and tell it to initialize itself from that state.
+ *
+ * You should not save any data into @state_file's "start group"
+ * (ie, the %NULL group). Instead, applications should save their
+ * data into groups with names that start with the application name,
+ * and libraries that connect to this signal should save their data
+ * into groups with names that start with the library name.
+ *
+ * Alternatively, rather than (or in addition to) using @state_file,
+ * the application can save its state by calling
+ * egg_sm_client_set_restart_command() during the processing of this
+ * signal (eg, to include a list of files to open).
+ **/
+ signals[SAVE_STATE] =
+ g_signal_new ("save_state",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggSMClientClass, save_state),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE,
+ 1, G_TYPE_POINTER);
+
+ /**
+ * EggSMClient::quit_requested:
+ * @client: the client
+ *
+ * Emitted when the session manager requests that the application
+ * exit (generally because the user is logging out). The application
+ * should decide whether or not it is willing to quit (perhaps after
+ * asking the user what to do with documents that have unsaved
+ * changes) and then call egg_sm_client_will_quit(), passing %TRUE
+ * or %FALSE to give its answer to the session manager. (It does not
+ * need to give an answer before returning from the signal handler;
+ * it can interact with the user asynchronously and then give its
+ * answer later on.) If the application does not connect to this
+ * signal, then #EggSMClient will automatically return %TRUE on its
+ * behalf.
+ *
+ * The application should not save its session state as part of
+ * handling this signal; if the user has requested that the session
+ * be saved when logging out, then ::save_state will be emitted
+ * separately.
+ *
+ * If the application agrees to quit, it should then wait for either
+ * the ::quit_cancelled or ::quit signals to be emitted.
+ **/
+ signals[QUIT_REQUESTED] =
+ g_signal_new ("quit_requested",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggSMClientClass, quit_requested),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,