drop support for win32/osx and checkupdate plugin
that plugin has never been built in linux anyway due to logic in configure.ac
This commit is contained in:
parent
f6d7a422f3
commit
b24934e186
|
@ -1,11 +1,7 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
SUBDIRS = pluma pixmaps po data plugin-loaders plugins docs tests win32 osx
|
SUBDIRS = pluma pixmaps po data plugin-loaders plugins docs tests help
|
||||||
|
|
||||||
if !OS_OSX
|
|
||||||
SUBDIRS += help
|
|
||||||
endif
|
|
||||||
|
|
||||||
distuninstallcheck_listfiles = find . -type f -print
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
|
|
||||||
|
|
168
configure.ac
168
configure.ac
|
@ -32,8 +32,6 @@ AC_PROG_INSTALL
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
PKG_PROG_PKG_CONFIG
|
PKG_PROG_PKG_CONFIG
|
||||||
# needed on osx
|
|
||||||
AC_PROG_OBJC
|
|
||||||
|
|
||||||
# Initialize libtool
|
# Initialize libtool
|
||||||
LT_PREREQ([2.2.6])
|
LT_PREREQ([2.2.6])
|
||||||
|
@ -51,84 +49,10 @@ AC_CHECK_LIB(m, floor)
|
||||||
dnl make sure we keep ACLOCAL_FLAGS around for maintainer builds to work
|
dnl make sure we keep ACLOCAL_FLAGS around for maintainer builds to work
|
||||||
AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS -I m4")
|
AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS -I m4")
|
||||||
|
|
||||||
dnl active plugins for GSettings schema
|
|
||||||
ACTIVE_PLUGINS="'docinfo', 'modelines', 'filebrowser', 'spell', 'time'"
|
|
||||||
AC_SUBST(ACTIVE_PLUGINS)
|
|
||||||
|
|
||||||
dnl toolbar style for GSettings schemas
|
dnl toolbar style for GSettings schemas
|
||||||
TOOLBAR_STYLE="PLUMA_TOOLBAR_SYSTEM"
|
TOOLBAR_STYLE="PLUMA_TOOLBAR_SYSTEM"
|
||||||
AC_SUBST(TOOLBAR_STYLE)
|
AC_SUBST(TOOLBAR_STYLE)
|
||||||
|
|
||||||
dnl check for win32 platform
|
|
||||||
AC_MSG_CHECKING([for Win32 platform])
|
|
||||||
case "$host" in
|
|
||||||
*-*-mingw*|*-*-cygwin*)
|
|
||||||
platform_win32=yes
|
|
||||||
TOOLBAR_STYLE="PLUMA_TOOLBAR_ICONS"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
platform_win32=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
AC_MSG_RESULT([$platform_win32])
|
|
||||||
AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for native Win32])
|
|
||||||
case "$host" in
|
|
||||||
*-*-mingw*)
|
|
||||||
os_win32=yes
|
|
||||||
AC_CHECK_TOOL(WINDRES, windres)
|
|
||||||
ACTIVE_PLUGINS="${ACTIVE_PLUGINS}, 'checkupdate'"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
os_win32=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
AC_MSG_RESULT([$os_win32])
|
|
||||||
AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
|
|
||||||
|
|
||||||
dnl check for osx platform
|
|
||||||
AC_MSG_CHECKING([for Mac OS X platform])
|
|
||||||
case "$host" in
|
|
||||||
*-*-darwin*)
|
|
||||||
platform_osx=yes
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
platform_osx=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
AC_MSG_RESULT([$platform_osx])
|
|
||||||
AM_CONDITIONAL(PLATFORM_OSX, test "$platform_osx" = "yes")
|
|
||||||
|
|
||||||
dnl check for native osx
|
|
||||||
gdk_windowing=`$PKG_CONFIG --variable=target gdk-2.0`
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for native Mac OS X])
|
|
||||||
if test "$gdk_windowing" = "quartz"; then
|
|
||||||
os_osx=yes
|
|
||||||
ACTIVE_PLUGINS="${ACTIVE_PLUGINS}, 'checkupdate'"
|
|
||||||
else
|
|
||||||
os_osx=no
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT([$os_osx])
|
|
||||||
AM_CONDITIONAL(OS_OSX, test "$os_osx" = "yes")
|
|
||||||
|
|
||||||
if test "$platform_osx" = "yes"; then
|
|
||||||
AC_DEFINE([PLATFORM_OSX],[1],[Defined if platform is Mac OSX])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(DEFAULT_FONT)
|
|
||||||
AC_SUBST(DEFAULT_PRINT_FONT)
|
|
||||||
|
|
||||||
if test "$os_osx" = "yes"; then
|
|
||||||
AC_DEFINE([OS_OSX],[1],[Defined if os is Mac OSX])
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES(IGE_MAC, ige-mac-integration)
|
|
||||||
|
|
||||||
AC_SUBST(IGE_MAC_CFLAGS)
|
|
||||||
AC_SUBST(IGE_MAC_LIBS)
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl ===============================================================
|
dnl ===============================================================
|
||||||
dnl Expanded dirs
|
dnl Expanded dirs
|
||||||
dnl ===============================================================
|
dnl ===============================================================
|
||||||
|
@ -164,16 +88,10 @@ dnl ================================================================
|
||||||
dnl Use gvfs metadata or the old xml file store.
|
dnl Use gvfs metadata or the old xml file store.
|
||||||
dnl ================================================================
|
dnl ================================================================
|
||||||
|
|
||||||
if test "x$os_osx" != "xno" || test "x$os_win32" != "xno"; then
|
|
||||||
gvfs_metadata_default="no"
|
|
||||||
else
|
|
||||||
gvfs_metadata_default="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([gvfs-metadata],
|
AC_ARG_ENABLE([gvfs-metadata],
|
||||||
AS_HELP_STRING([--enable-gvfs-metadata], [Enable using gvfs to store metadata]),
|
AS_HELP_STRING([--enable-gvfs-metadata], [Enable using gvfs to store metadata]),
|
||||||
[enable_gvfs_metadata=$enableval],
|
[enable_gvfs_metadata=$enableval],
|
||||||
[enable_gvfs_metadata=$gvfs_metadata_default])
|
[enable_gvfs_metadata=yes])
|
||||||
|
|
||||||
AM_CONDITIONAL(ENABLE_GVFS_METADATA, test "x$enable_gvfs_metadata" != "xno")
|
AM_CONDITIONAL(ENABLE_GVFS_METADATA, test "x$enable_gvfs_metadata" != "xno")
|
||||||
|
|
||||||
|
@ -181,36 +99,6 @@ if test "x$enable_gvfs_metadata" != "xno"; then
|
||||||
AC_DEFINE([ENABLE_GVFS_METADATA], [1], [Define to enable using gvfs metadata])
|
AC_DEFINE([ENABLE_GVFS_METADATA], [1], [Define to enable using gvfs metadata])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl ================================================================
|
|
||||||
dnl check update plugin
|
|
||||||
dnl ================================================================
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([updater],
|
|
||||||
AS_HELP_STRING([--disable-updater],[Disable check update plugin (default: enabled)]),
|
|
||||||
[enable_updater=$enableval],
|
|
||||||
[enable_updater=yes])
|
|
||||||
|
|
||||||
if test "x$enable_updater" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES(LIBSOUP, \
|
|
||||||
libsoup-2.4,
|
|
||||||
have_libsoup=yes,
|
|
||||||
have_libsoup=no)
|
|
||||||
|
|
||||||
if test "x$have_libsoup" = "xyes"; then
|
|
||||||
if test "x$os_win32" = "xyes"; then
|
|
||||||
enable_updater=yes
|
|
||||||
elif test "x$os_osx" = "xyes"; then
|
|
||||||
enable_updater=yes
|
|
||||||
else
|
|
||||||
enable_updater=no
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
enable_updater=no
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL(ENABLE_UPDATER, test x"$enable_updater" = "xyes")
|
|
||||||
|
|
||||||
dnl ================================================================
|
dnl ================================================================
|
||||||
dnl spell plugins checks: enchant and iso-codes
|
dnl spell plugins checks: enchant and iso-codes
|
||||||
dnl ================================================================
|
dnl ================================================================
|
||||||
|
@ -300,15 +188,7 @@ PKG_CHECK_MODULES(PLUMA, [
|
||||||
mate-desktop-2.0 >= 1.9.0
|
mate-desktop-2.0 >= 1.9.0
|
||||||
])
|
])
|
||||||
|
|
||||||
if test "$os_osx" = "no" &&
|
PKG_CHECK_MODULES(X11, [x11])
|
||||||
test "$os_win32" = "no"; then
|
|
||||||
PKG_CHECK_MODULES(X11, [
|
|
||||||
x11
|
|
||||||
])
|
|
||||||
else
|
|
||||||
X11_CFLAGS=
|
|
||||||
X11_LIBS=
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLUMA_CFLAGS="$PLUMA_CFLAGS $X11_CFLAGS"
|
PLUMA_CFLAGS="$PLUMA_CFLAGS $X11_CFLAGS"
|
||||||
PLUMA_LIBS="$PLUMA_LIBS $X11_LIBS"
|
PLUMA_LIBS="$PLUMA_LIBS $X11_LIBS"
|
||||||
|
@ -316,15 +196,7 @@ PLUMA_LIBS="$PLUMA_LIBS $X11_LIBS"
|
||||||
AC_SUBST(PLUMA_CFLAGS)
|
AC_SUBST(PLUMA_CFLAGS)
|
||||||
AC_SUBST(PLUMA_LIBS)
|
AC_SUBST(PLUMA_LIBS)
|
||||||
|
|
||||||
if test "$os_osx" = "no" &&
|
PKG_CHECK_MODULES(EGG_SMCLIENT, [sm >= 1.0.0])
|
||||||
test "$os_win32" = "no"; then
|
|
||||||
PKG_CHECK_MODULES(EGG_SMCLIENT, [
|
|
||||||
sm >= 1.0.0
|
|
||||||
])
|
|
||||||
else
|
|
||||||
EGG_SMCLIENT_CFLAGS=
|
|
||||||
EGG_SMCLIENT_LIBS=
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(EGG_SMCLIENT_CFLAGS)
|
AC_SUBST(EGG_SMCLIENT_CFLAGS)
|
||||||
AC_SUBST(EGG_SMCLIENT_LIBS)
|
AC_SUBST(EGG_SMCLIENT_LIBS)
|
||||||
|
@ -361,12 +233,6 @@ if test "x$have_python" != "xno"; then
|
||||||
PY_EXEC_PREFIX=`$PYTHON -c 'import sys ; print sys.exec_prefix'`
|
PY_EXEC_PREFIX=`$PYTHON -c 'import sys ; print sys.exec_prefix'`
|
||||||
PYTHON_LIBS="-lpython$PYTHON_VERSION"
|
PYTHON_LIBS="-lpython$PYTHON_VERSION"
|
||||||
|
|
||||||
if test "$os_win32" = yes; then
|
|
||||||
PYTHON_LIBS=`echo $PYTHON_LIBS | sed 's/\.//g'`
|
|
||||||
PYTHON_LIB_LOC="-I$PY_EXEC_PREFIX/libs"
|
|
||||||
PYTHON_CFLAGS="-I$PY_EXEC_PREFIX/include"
|
|
||||||
PYTHON_EXTRA_LIBS=
|
|
||||||
else
|
|
||||||
PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'`
|
PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'`
|
||||||
PYTHON_LIB_LOC="-L$libdir/python$PYTHON_VERSION/config"
|
PYTHON_LIB_LOC="-L$libdir/python$PYTHON_VERSION/config"
|
||||||
PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION"
|
PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION"
|
||||||
|
@ -374,7 +240,7 @@ if test "x$have_python" != "xno"; then
|
||||||
PYTHON_BASEMODLIBS=`sed -n -e 's/^BASEMODLIBS=\(.*\)/\1/p' $PYTHON_MAKEFILE`
|
PYTHON_BASEMODLIBS=`sed -n -e 's/^BASEMODLIBS=\(.*\)/\1/p' $PYTHON_MAKEFILE`
|
||||||
PYTHON_OTHER_LIBS=`sed -n -e 's/^LIBS=\(.*\)/\1/p' $PYTHON_MAKEFILE`
|
PYTHON_OTHER_LIBS=`sed -n -e 's/^LIBS=\(.*\)/\1/p' $PYTHON_MAKEFILE`
|
||||||
PYTHON_EXTRA_LIBS="$PYTHON_BASEMODLIBS $PYTHON_OTHER_LIBS"
|
PYTHON_EXTRA_LIBS="$PYTHON_BASEMODLIBS $PYTHON_OTHER_LIBS"
|
||||||
fi
|
|
||||||
AC_SUBST([PYTHON_LIBS])
|
AC_SUBST([PYTHON_LIBS])
|
||||||
AC_SUBST([PYTHON_LIB_LOC])
|
AC_SUBST([PYTHON_LIB_LOC])
|
||||||
AC_SUBST([PYTHON_CFLAGS])
|
AC_SUBST([PYTHON_CFLAGS])
|
||||||
|
@ -481,22 +347,9 @@ if test "x$enable_deprecations" = "xyes"; then
|
||||||
AC_SUBST(DISABLE_DEPRECATED_CFLAGS)
|
AC_SUBST(DISABLE_DEPRECATED_CFLAGS)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# on win32 plugins must be able to resolve all symbols at link time
|
PLUGIN_LIBTOOL_FLAGS="-module -avoid-version"
|
||||||
# so we create a lib
|
LOADER_LIBTOOL_FLAGS="-module -avoid-version"
|
||||||
if test "$platform_win32" = yes; then
|
|
||||||
PLUMA_IMPLIB="-lpluma"
|
|
||||||
PLUGIN_LIBTOOL_FLAGS="-module -avoid-version -no-undefined -Wl,\$(top_builddir)/pluma/libpluma.a"
|
|
||||||
LOADER_LIBTOOL_FLAGS="-module -avoid-version -no-undefined -Wl,\$(top_builddir)/pluma/libpluma.a"
|
|
||||||
if test "$os_win32" = yes; then
|
|
||||||
PLUGIN_LIBTOOL_FLAGS="${PLUGIN_LIBTOOL_FLAGS} -mwindows"
|
|
||||||
LOADER_LIBTOOL_FLAGS="${LOADER_LIBTOOL_FLAGS} -mwindows"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
PLUMA_IMPLIB=""
|
|
||||||
PLUGIN_LIBTOOL_FLAGS="-module -avoid-version"
|
|
||||||
LOADER_LIBTOOL_FLAGS="-module -avoid-version"
|
|
||||||
fi
|
|
||||||
AC_SUBST(PLUMA_IMPLIB)
|
|
||||||
AC_SUBST(PLUGIN_LIBTOOL_FLAGS)
|
AC_SUBST(PLUGIN_LIBTOOL_FLAGS)
|
||||||
AC_SUBST(LOADER_LIBTOOL_FLAGS)
|
AC_SUBST(LOADER_LIBTOOL_FLAGS)
|
||||||
|
|
||||||
|
@ -519,7 +372,6 @@ docs/Makefile
|
||||||
docs/reference/Makefile
|
docs/reference/Makefile
|
||||||
pluma/dialogs/Makefile
|
pluma/dialogs/Makefile
|
||||||
pluma/smclient/Makefile
|
pluma/smclient/Makefile
|
||||||
pluma/osx/Makefile
|
|
||||||
pluma/Makefile
|
pluma/Makefile
|
||||||
help/Makefile
|
help/Makefile
|
||||||
pixmaps/Makefile
|
pixmaps/Makefile
|
||||||
|
@ -529,7 +381,6 @@ plugin-loaders/python/Makefile
|
||||||
plugin-loaders/python/bindings/Makefile
|
plugin-loaders/python/bindings/Makefile
|
||||||
plugins/Makefile
|
plugins/Makefile
|
||||||
plugins/changecase/Makefile
|
plugins/changecase/Makefile
|
||||||
plugins/checkupdate/Makefile
|
|
||||||
plugins/docinfo/Makefile
|
plugins/docinfo/Makefile
|
||||||
plugins/externaltools/data/Makefile
|
plugins/externaltools/data/Makefile
|
||||||
plugins/externaltools/Makefile
|
plugins/externaltools/Makefile
|
||||||
|
@ -551,10 +402,7 @@ plugins/taglist/Makefile
|
||||||
plugins/time/Makefile
|
plugins/time/Makefile
|
||||||
po/Makefile.in
|
po/Makefile.in
|
||||||
tests/Makefile
|
tests/Makefile
|
||||||
win32/pluma.iss
|
])
|
||||||
win32/Makefile
|
|
||||||
osx/Info.plist
|
|
||||||
osx/Makefile])
|
|
||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,4 @@ Description: pluma
|
||||||
Requires: gtksourceview-@GTK_API_VERSION@
|
Requires: gtksourceview-@GTK_API_VERSION@
|
||||||
Version: @VERSION@
|
Version: @VERSION@
|
||||||
Cflags: -I${includedir}/pluma
|
Cflags: -I${includedir}/pluma
|
||||||
Libs: -L${libdir} @PLUMA_IMPLIB@
|
Libs: -L${libdir}
|
||||||
|
|
|
@ -1,260 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>English</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>pluma</string>
|
|
||||||
<key>CFBundleGetInfoString</key>
|
|
||||||
<string>@VERSION@ Copyright 2009, pluma</string>
|
|
||||||
<key>CFBundleIconFile</key>
|
|
||||||
<string>pluma.icns</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>org.mate.pluma</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>@VERSION@</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>@VERSION@</string>
|
|
||||||
<key>NSHumanReadableCopyright</key>
|
|
||||||
<string>Copyright 2009 pluma, GNU General Public License.</string>
|
|
||||||
<key>LSMinimumSystemVersion</key>
|
|
||||||
<string>10.4</string>
|
|
||||||
<key>CFBundleDocumentTypes</key>
|
|
||||||
<array>
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleTypeExtensions</key>
|
|
||||||
<array>
|
|
||||||
<string>*</string>
|
|
||||||
<string>F</string>
|
|
||||||
<string>F90</string>
|
|
||||||
<string>Filemaker</string>
|
|
||||||
<string>M</string>
|
|
||||||
<string>act3</string>
|
|
||||||
<string>ada</string>
|
|
||||||
<string>applescript</string>
|
|
||||||
<string>as</string>
|
|
||||||
<string>asm</string>
|
|
||||||
<string>asp</string>
|
|
||||||
<string>awk</string>
|
|
||||||
<string>bak</string>
|
|
||||||
<string>bash</string>
|
|
||||||
<string>b</string>
|
|
||||||
<string>bf</string>
|
|
||||||
<string>brainfuck</string>
|
|
||||||
<string>c</string>
|
|
||||||
<string>cgi</string>
|
|
||||||
<string>c++</string>
|
|
||||||
<string>cfm</string>
|
|
||||||
<string>cob</string>
|
|
||||||
<string>conf</string>
|
|
||||||
<string>cp</string>
|
|
||||||
<string>cpp</string>
|
|
||||||
<string>cs</string>
|
|
||||||
<string>csh</string>
|
|
||||||
<string>css</string>
|
|
||||||
<string>CSS</string>
|
|
||||||
<string>csv</string>
|
|
||||||
<string>custom</string>
|
|
||||||
<string>cxx</string>
|
|
||||||
<string>def</string>
|
|
||||||
<string>default</string>
|
|
||||||
<string>do</string>
|
|
||||||
<string>dtd</string>
|
|
||||||
<string>dxf</string>
|
|
||||||
<string>enc</string>
|
|
||||||
<string>eps</string>
|
|
||||||
<string>err</string>
|
|
||||||
<string>f</string>
|
|
||||||
<string>f90</string>
|
|
||||||
<string>fcgi</string>
|
|
||||||
<string>for</string>
|
|
||||||
<string>fs</string>
|
|
||||||
<string>fscript</string>
|
|
||||||
<string>gcc</string>
|
|
||||||
<string>h</string>
|
|
||||||
<string>hpgl</string>
|
|
||||||
<string>htm</string>
|
|
||||||
<string>HTM</string>
|
|
||||||
<string>html</string>
|
|
||||||
<string>ics</string>
|
|
||||||
<string>idl</string>
|
|
||||||
<string>inc</string>
|
|
||||||
<string>ini</string>
|
|
||||||
<string>java</string>
|
|
||||||
<string>javascript</string>
|
|
||||||
<string>js</string>
|
|
||||||
<string>las</string>
|
|
||||||
<string>lasso</string>
|
|
||||||
<string>latex</string>
|
|
||||||
<string>lgt</string>
|
|
||||||
<string>lisp</string>
|
|
||||||
<string>log</string>
|
|
||||||
<string>ltx</string>
|
|
||||||
<string>lua</string>
|
|
||||||
<string>m</string>
|
|
||||||
<string>m1s</string>
|
|
||||||
<string>mel</string>
|
|
||||||
<string>m4</string>
|
|
||||||
<string>mk</string>
|
|
||||||
<string>mm</string>
|
|
||||||
<string>msl</string>
|
|
||||||
<string>mtl</string>
|
|
||||||
<string>mws</string>
|
|
||||||
<string>mx</string>
|
|
||||||
<string>mxo</string>
|
|
||||||
<string>mysql</string>
|
|
||||||
<string>njs</string>
|
|
||||||
<string>p</string>
|
|
||||||
<string>ps</string>
|
|
||||||
<string>pas</string>
|
|
||||||
<string>pch</string>
|
|
||||||
<string>php</string>
|
|
||||||
<string>php3</string>
|
|
||||||
<string>php4</string>
|
|
||||||
<string>phtml</string>
|
|
||||||
<string>pl</string>
|
|
||||||
<string>plist</string>
|
|
||||||
<string>pm</string>
|
|
||||||
<string>pod</string>
|
|
||||||
<string>postgresql</string>
|
|
||||||
<string>pike</string>
|
|
||||||
<string>pp</string>
|
|
||||||
<string>pro</string>
|
|
||||||
<string>py</string>
|
|
||||||
<string>python</string>
|
|
||||||
<string>pyw</string>
|
|
||||||
<string>r</string>
|
|
||||||
<string>rb</string>
|
|
||||||
<string>rc</string>
|
|
||||||
<string>reb</string>
|
|
||||||
<string>rebol</string>
|
|
||||||
<string>rsp</string>
|
|
||||||
<string>rtf</string>
|
|
||||||
<string>ruby</string>
|
|
||||||
<string>rxp</string>
|
|
||||||
<string>s</string>
|
|
||||||
<string>sgml</string>
|
|
||||||
<string>sh</string>
|
|
||||||
<string>shtm</string>
|
|
||||||
<string>shtml</string>
|
|
||||||
<string>sieve</string>
|
|
||||||
<string>sl</string>
|
|
||||||
<string>strings</string>
|
|
||||||
<string>sty</string>
|
|
||||||
<string>sps</string>
|
|
||||||
<string>spss</string>
|
|
||||||
<string>sql</string>
|
|
||||||
<string>SQL</string>
|
|
||||||
<string>st</string>
|
|
||||||
<string>svg</string>
|
|
||||||
<string>tab</string>
|
|
||||||
<string>tcl</string>
|
|
||||||
<string>tcsh</string>
|
|
||||||
<string>tex</string>
|
|
||||||
<string>text</string>
|
|
||||||
<string>txt</string>
|
|
||||||
<string>types</string>
|
|
||||||
<string>uue</string>
|
|
||||||
<string>v</string>
|
|
||||||
<string>vbs</string>
|
|
||||||
<string>vcard</string>
|
|
||||||
<string>vcs</string>
|
|
||||||
<string>verilog</string>
|
|
||||||
<string>vhd</string>
|
|
||||||
<string>vhdl</string>
|
|
||||||
<string>vrm</string>
|
|
||||||
<string>vrml</string>
|
|
||||||
<string>wmk</string>
|
|
||||||
<string>x</string>
|
|
||||||
<string>xhtml</string>
|
|
||||||
<string>xml</string>
|
|
||||||
<string>xsl</string>
|
|
||||||
<string>xslt</string>
|
|
||||||
<string>yaml</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeIconFile</key>
|
|
||||||
<string>plumadoc</string>
|
|
||||||
<key>CFBundleTypeMIMETypes</key>
|
|
||||||
<array>
|
|
||||||
<string>application/base64</string>
|
|
||||||
<string>application/dxf</string>
|
|
||||||
<string>application/php</string>
|
|
||||||
<string>application/plain</string>
|
|
||||||
<string>application/postscript</string>
|
|
||||||
<string>application/rtf</string>
|
|
||||||
<string>application/vnd.hp-hpgl</string>
|
|
||||||
<string>application/x-bsh</string>
|
|
||||||
<string>application/x-csh</string>
|
|
||||||
<string>application/x-javascript</string>
|
|
||||||
<string>application/x-latex</string>
|
|
||||||
<string>application/x-meme</string>
|
|
||||||
<string>application/x-pointplus</string>
|
|
||||||
<string>application/x-rtf</string>
|
|
||||||
<string>application/x-seelogo</string>
|
|
||||||
<string>application/x-sh</string>
|
|
||||||
<string>application/x-shar</string>
|
|
||||||
<string>application/x-tcl</string>
|
|
||||||
<string>application/x-tex</string>
|
|
||||||
<string>application/x-vrml</string>
|
|
||||||
<string>application/xml</string>
|
|
||||||
<string>image/svg+xml</string>
|
|
||||||
<string>image/svg-xml</string>
|
|
||||||
<string>image/vnd.dwg</string>
|
|
||||||
<string>image/x-dwg</string>
|
|
||||||
<string>image/x-xpixmap</string>
|
|
||||||
<string>model/vrml</string>
|
|
||||||
<string>text/asp</string>
|
|
||||||
<string>text/calendar</string>
|
|
||||||
<string>text/css</string>
|
|
||||||
<string>text/directory</string>
|
|
||||||
<string>text/html</string>
|
|
||||||
<string>text/javascript</string>
|
|
||||||
<string>text/pascal</string>
|
|
||||||
<string>text/php</string>
|
|
||||||
<string>text/plain</string>
|
|
||||||
<string>text/richtext</string>
|
|
||||||
<string>text/sgml</string>
|
|
||||||
<string>text/vcard</string>
|
|
||||||
<string>text/x-asm</string>
|
|
||||||
<string>text/x-c</string>
|
|
||||||
<string>text/x-fortran</string>
|
|
||||||
<string>text/x-h</string>
|
|
||||||
<string>text/x-java-source</string>
|
|
||||||
<string>text/x-m</string>
|
|
||||||
<string>text/x-pascal</string>
|
|
||||||
<string>text/x-perl-script</string>
|
|
||||||
<string>text/x-php-script</string>
|
|
||||||
<string>text/x-script.csh</string>
|
|
||||||
<string>text/x-script.perl-module</string>
|
|
||||||
<string>text/x-script.perl</string>
|
|
||||||
<string>text/x-script.phyton</string>
|
|
||||||
<string>text/x-script.sh</string>
|
|
||||||
<string>text/x-script.tcl</string>
|
|
||||||
<string>text/x-script.tcsh</string>
|
|
||||||
<string>text/x-server-parsed-html</string>
|
|
||||||
<string>text/x-sgml</string>
|
|
||||||
<string>text/x-uuencode</string>
|
|
||||||
<string>text/x-vcalendar</string>
|
|
||||||
<string>text/x-vcard</string>
|
|
||||||
<string>text/xml</string>
|
|
||||||
<string>x-world/x-vrml</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeName</key>
|
|
||||||
<string>Pluma Document</string>
|
|
||||||
<key>CFBundleTypeOSTypes</key>
|
|
||||||
<array>
|
|
||||||
<string>****</string>
|
|
||||||
</array>
|
|
||||||
<key>CFBundleTypeRole</key>
|
|
||||||
<string>Editor</string>
|
|
||||||
</dict>
|
|
||||||
</array>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
|
@ -1,3 +0,0 @@
|
||||||
EXTRA_DIST = Info.plist.in
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
|
|
@ -1,6 +1,5 @@
|
||||||
DIST_SUBDIRS = \
|
DIST_SUBDIRS = \
|
||||||
changecase \
|
changecase \
|
||||||
checkupdate \
|
|
||||||
docinfo \
|
docinfo \
|
||||||
externaltools \
|
externaltools \
|
||||||
filebrowser \
|
filebrowser \
|
||||||
|
@ -16,6 +15,7 @@ DIST_SUBDIRS = \
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
changecase \
|
changecase \
|
||||||
docinfo \
|
docinfo \
|
||||||
|
externaltools \
|
||||||
filebrowser \
|
filebrowser \
|
||||||
modelines \
|
modelines \
|
||||||
sort \
|
sort \
|
||||||
|
@ -24,19 +24,10 @@ SUBDIRS = \
|
||||||
|
|
||||||
if ENABLE_PYTHON
|
if ENABLE_PYTHON
|
||||||
SUBDIRS += pythonconsole snippets quickopen
|
SUBDIRS += pythonconsole snippets quickopen
|
||||||
|
|
||||||
if !OS_WIN32
|
|
||||||
SUBDIRS += externaltools
|
|
||||||
endif
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if ENABLE_ENCHANT
|
if ENABLE_ENCHANT
|
||||||
SUBDIRS += spell
|
SUBDIRS += spell
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if ENABLE_UPDATER
|
|
||||||
SUBDIRS += checkupdate
|
|
||||||
endif
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
-include $(top_srcdir)/git.mk
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
# pluma win32 updater
|
|
||||||
|
|
||||||
plugindir = $(PLUMA_PLUGINS_LIBS_DIR)
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
$(PLUMA_CFLAGS) \
|
|
||||||
$(LIBSOUP_CFLAGS) \
|
|
||||||
$(WARN_CFLAGS) \
|
|
||||||
$(DISABLE_DEPRECATED_CFLAGS)
|
|
||||||
|
|
||||||
plugin_LTLIBRARIES = libcheckupdate.la
|
|
||||||
|
|
||||||
libcheckupdate_la_SOURCES = \
|
|
||||||
pluma-check-update-plugin.h \
|
|
||||||
pluma-check-update-plugin.c
|
|
||||||
|
|
||||||
libcheckupdate_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
|
|
||||||
libcheckupdate_la_LIBADD = $(PLUMA_LIBS) $(LIBSOUP_LIBS)
|
|
||||||
|
|
||||||
plugin_in_files = checkupdate.pluma-plugin.desktop.in
|
|
||||||
|
|
||||||
%.pluma-plugin: %.pluma-plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
|
|
||||||
|
|
||||||
plugin_DATA = $(plugin_in_files:.pluma-plugin.desktop.in=.pluma-plugin)
|
|
||||||
|
|
||||||
@INTLTOOL_XML_NOMERGE_RULE@
|
|
||||||
gsettings_SCHEMAS = org.mate.pluma.plugins.checkupdate.gschema.xml
|
|
||||||
@GSETTINGS_RULES@
|
|
||||||
|
|
||||||
%.gschema.xml.in: %.gschema.xml.in.in Makefile
|
|
||||||
$(AM_V_GEN) $(SED) -e 's^\@GETTEXT_PACKAGE\@^$(GETTEXT_PACKAGE)^g' < $< > $@
|
|
||||||
|
|
||||||
EXTRA_DIST = $(plugin_in_files) $(gsettings_SCHEMAS).in.in
|
|
||||||
|
|
||||||
CLEANFILES = $(plugin_DATA) $(gsettings_SCHEMAS).in $(gsettings_SCHEMAS)
|
|
||||||
|
|
||||||
DISTCLEANFILES = $(plugin_DATA) $(gsettings_SCHEMAS).in $(gsettings_SCHEMAS)
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
|
|
@ -1,9 +0,0 @@
|
||||||
[Pluma Plugin]
|
|
||||||
Module=checkupdate
|
|
||||||
IAge=2
|
|
||||||
_Name=Check update
|
|
||||||
_Description=Check for latest version of pluma
|
|
||||||
Icon=pluma-plugin
|
|
||||||
Authors=Ignacio Casal Quinteiro <icq@gnome.org>
|
|
||||||
Copyright=Copyright © 2009 Ignacio Casal Quinteiro
|
|
||||||
Website=http://www.mate-desktop.org
|
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<schemalist gettext-domain="@GETTEXT_PACKAGE@">
|
|
||||||
<schema id="org.mate.pluma.plugins.checkupdate" path="/org/mate/pluma/plugins/checkupdate/">
|
|
||||||
<key name="ignore-version" type="s">
|
|
||||||
<default>''</default>
|
|
||||||
<_summary>Version to ignore until the next version is released</_summary>
|
|
||||||
</key>
|
|
||||||
</schema>
|
|
||||||
</schemalist>
|
|
|
@ -1,663 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2009 - Ignacio Casal Quinteiro <icq@gnome.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pluma-check-update-plugin.h"
|
|
||||||
|
|
||||||
#include <glib/gi18n-lib.h>
|
|
||||||
#include <pluma/pluma-debug.h>
|
|
||||||
#include <pluma/pluma-utils.h>
|
|
||||||
#include <libsoup/soup.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include <gio/gio.h>
|
|
||||||
|
|
||||||
#define SETTINGS_SCHEMA "org.mate.pluma.plugins.checkupdate"
|
|
||||||
#define SETTINGS_IGNORE_VERSION "ignore-version"
|
|
||||||
|
|
||||||
#define WINDOW_DATA_KEY "PlumaCheckUpdatePluginWindowData"
|
|
||||||
|
|
||||||
#define VERSION_PLACE "<a href=\"[0-9]\\.[0-9]+/\">"
|
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#define PLUMA_URL "http://pub.mate-desktop.org/sources/pluma/"
|
|
||||||
#define FILE_REGEX "pluma\\-setup\\-[0-9]+\\.[0-9]+\\.[0-9]+(\\-[0-9]+)?\\.exe"
|
|
||||||
#else
|
|
||||||
#define PLUMA_URL "http://pub.mate-desktop.org/sources/pluma/"
|
|
||||||
#define FILE_REGEX "pluma\\-[0-9]+\\.[0-9]+\\.[0-9]+(\\-[0-9]+)?\\.dmg"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include "pluma/osx/pluma-osx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PLUMA_CHECK_UPDATE_PLUGIN_GET_PRIVATE(object) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
|
|
||||||
PLUMA_TYPE_CHECK_UPDATE_PLUGIN, \
|
|
||||||
PlumaCheckUpdatePluginPrivate))
|
|
||||||
|
|
||||||
PLUMA_PLUGIN_REGISTER_TYPE (PlumaCheckUpdatePlugin, pluma_check_update_plugin)
|
|
||||||
|
|
||||||
struct _PlumaCheckUpdatePluginPrivate
|
|
||||||
{
|
|
||||||
SoupSession *session;
|
|
||||||
|
|
||||||
GSettings *settings;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
PlumaCheckUpdatePlugin *plugin;
|
|
||||||
|
|
||||||
gchar *url;
|
|
||||||
gchar *version;
|
|
||||||
} WindowData;
|
|
||||||
|
|
||||||
static void
|
|
||||||
free_window_data (gpointer data)
|
|
||||||
{
|
|
||||||
WindowData *window_data;
|
|
||||||
|
|
||||||
if (data == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
window_data = (WindowData *)data;
|
|
||||||
|
|
||||||
g_free (window_data->url);
|
|
||||||
g_free (window_data->version);
|
|
||||||
g_slice_free (WindowData, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pluma_check_update_plugin_init (PlumaCheckUpdatePlugin *plugin)
|
|
||||||
{
|
|
||||||
plugin->priv = PLUMA_CHECK_UPDATE_PLUGIN_GET_PRIVATE (plugin);
|
|
||||||
|
|
||||||
pluma_debug_message (DEBUG_PLUGINS,
|
|
||||||
"PlumaCheckUpdatePlugin initializing");
|
|
||||||
|
|
||||||
plugin->priv->session = soup_session_async_new ();
|
|
||||||
|
|
||||||
plugin->priv->settings = g_settings_new (SETTINGS_SCHEMA);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pluma_check_update_plugin_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
PlumaCheckUpdatePlugin *plugin = PLUMA_CHECK_UPDATE_PLUGIN (object);
|
|
||||||
|
|
||||||
if (plugin->priv->session != NULL)
|
|
||||||
{
|
|
||||||
g_object_unref (plugin->priv->session);
|
|
||||||
plugin->priv->session = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin->priv->settings != NULL)
|
|
||||||
{
|
|
||||||
g_object_unref (G_OBJECT (plugin->priv->settings));
|
|
||||||
|
|
||||||
plugin->priv->settings = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
pluma_debug_message (DEBUG_PLUGINS,
|
|
||||||
"PlumaCheckUpdatePlugin disposing");
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (pluma_check_update_plugin_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pluma_check_update_plugin_finalize (GObject *object)
|
|
||||||
{
|
|
||||||
pluma_debug_message (DEBUG_PLUGINS,
|
|
||||||
"PlumaCheckUpdatePlugin finalizing");
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (pluma_check_update_plugin_parent_class)->finalize (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_contents (GtkWidget *infobar,
|
|
||||||
GtkWidget *contents)
|
|
||||||
{
|
|
||||||
GtkWidget *content_area;
|
|
||||||
|
|
||||||
content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar));
|
|
||||||
gtk_container_add (GTK_CONTAINER (content_area), contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
set_message_area_text_and_icon (GtkWidget *message_area,
|
|
||||||
const gchar *icon_stock_id,
|
|
||||||
const gchar *primary_text,
|
|
||||||
const gchar *secondary_text)
|
|
||||||
{
|
|
||||||
GtkWidget *hbox_content;
|
|
||||||
GtkWidget *image;
|
|
||||||
GtkWidget *vbox;
|
|
||||||
gchar *primary_markup;
|
|
||||||
gchar *secondary_markup;
|
|
||||||
GtkWidget *primary_label;
|
|
||||||
GtkWidget *secondary_label;
|
|
||||||
|
|
||||||
hbox_content = gtk_hbox_new (FALSE, 8);
|
|
||||||
gtk_widget_show (hbox_content);
|
|
||||||
|
|
||||||
image = gtk_image_new_from_stock (icon_stock_id, GTK_ICON_SIZE_DIALOG);
|
|
||||||
gtk_widget_show (image);
|
|
||||||
gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
|
|
||||||
|
|
||||||
vbox = gtk_vbox_new (FALSE, 6);
|
|
||||||
gtk_widget_show (vbox);
|
|
||||||
gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
|
|
||||||
|
|
||||||
primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
|
|
||||||
primary_label = gtk_label_new (primary_markup);
|
|
||||||
g_free (primary_markup);
|
|
||||||
gtk_widget_show (primary_label);
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
|
|
||||||
gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
|
|
||||||
gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
|
|
||||||
gtk_widget_set_can_focus (primary_label, TRUE);
|
|
||||||
gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
|
|
||||||
|
|
||||||
if (secondary_text != NULL)
|
|
||||||
{
|
|
||||||
secondary_markup = g_strdup_printf ("<small>%s</small>",
|
|
||||||
secondary_text);
|
|
||||||
secondary_label = gtk_label_new (secondary_markup);
|
|
||||||
g_free (secondary_markup);
|
|
||||||
gtk_widget_show (secondary_label);
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
|
|
||||||
gtk_widget_set_can_focus (secondary_label, TRUE);
|
|
||||||
gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
|
|
||||||
gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
|
|
||||||
gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
set_contents (message_area, hbox_content);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_response_cb (GtkWidget *infobar,
|
|
||||||
gint response_id,
|
|
||||||
PlumaWindow *window)
|
|
||||||
{
|
|
||||||
if (response_id == GTK_RESPONSE_YES)
|
|
||||||
{
|
|
||||||
GError *error = NULL;
|
|
||||||
WindowData *data;
|
|
||||||
|
|
||||||
data = g_object_get_data (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY);
|
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
pluma_osx_show_url (data->url);
|
|
||||||
#else
|
|
||||||
gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (window)),
|
|
||||||
data->url,
|
|
||||||
GDK_CURRENT_TIME,
|
|
||||||
&error);
|
|
||||||
#endif
|
|
||||||
if (error != NULL)
|
|
||||||
{
|
|
||||||
GtkWidget *dialog;
|
|
||||||
|
|
||||||
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
||||||
GTK_MESSAGE_ERROR,
|
|
||||||
GTK_BUTTONS_CLOSE,
|
|
||||||
_("There was an error displaying the URI."));
|
|
||||||
|
|
||||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
|
|
||||||
"%s", error->message);
|
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (dialog),
|
|
||||||
"response",
|
|
||||||
G_CALLBACK (gtk_widget_destroy),
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
|
|
||||||
|
|
||||||
gtk_widget_show (dialog);
|
|
||||||
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (response_id == GTK_RESPONSE_NO)
|
|
||||||
{
|
|
||||||
WindowData *data;
|
|
||||||
|
|
||||||
data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
|
|
||||||
|
|
||||||
g_settings_set_string (data->plugin->priv->settings,
|
|
||||||
SETTINGS_IGNORE_VERSION,
|
|
||||||
data->version);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
gtk_widget_destroy (infobar);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
create_infobar (PlumaWindow *window,
|
|
||||||
const gchar *version)
|
|
||||||
{
|
|
||||||
GtkWidget *infobar;
|
|
||||||
gchar *message;
|
|
||||||
|
|
||||||
GtkWidget *button;
|
|
||||||
|
|
||||||
infobar = gtk_info_bar_new ();
|
|
||||||
|
|
||||||
button = pluma_gtk_button_new_with_stock_icon (_("_Download"),
|
|
||||||
GTK_STOCK_SAVE);
|
|
||||||
gtk_widget_show (button);
|
|
||||||
|
|
||||||
gtk_info_bar_add_action_widget (GTK_INFO_BAR (infobar),
|
|
||||||
button,
|
|
||||||
GTK_RESPONSE_YES);
|
|
||||||
|
|
||||||
button = pluma_gtk_button_new_with_stock_icon (_("_Ignore Version"),
|
|
||||||
GTK_STOCK_DISCARD);
|
|
||||||
gtk_widget_show (button);
|
|
||||||
|
|
||||||
gtk_info_bar_add_action_widget (GTK_INFO_BAR (infobar),
|
|
||||||
button,
|
|
||||||
GTK_RESPONSE_NO);
|
|
||||||
|
|
||||||
gtk_info_bar_add_button (GTK_INFO_BAR (infobar),
|
|
||||||
GTK_STOCK_CANCEL,
|
|
||||||
GTK_RESPONSE_CANCEL);
|
|
||||||
|
|
||||||
gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar),
|
|
||||||
GTK_MESSAGE_INFO);
|
|
||||||
|
|
||||||
message = g_strdup_printf ("%s (%s)", _("There is a new version of pluma"), version);
|
|
||||||
set_message_area_text_and_icon (infobar,
|
|
||||||
"gtk-dialog-info",
|
|
||||||
message,
|
|
||||||
_("You can download the new version of pluma"
|
|
||||||
" by clicking on the download button or"
|
|
||||||
" ignore that version and wait for a new one"));
|
|
||||||
|
|
||||||
g_free (message);
|
|
||||||
|
|
||||||
g_signal_connect (infobar, "response",
|
|
||||||
G_CALLBACK (on_response_cb),
|
|
||||||
window);
|
|
||||||
|
|
||||||
return infobar;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pack_infobar (GtkWidget *window,
|
|
||||||
GtkWidget *infobar)
|
|
||||||
{
|
|
||||||
GtkWidget *vbox;
|
|
||||||
|
|
||||||
vbox = gtk_bin_get_child (GTK_BIN (window));
|
|
||||||
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox), infobar, FALSE, FALSE, 0);
|
|
||||||
gtk_box_reorder_child (GTK_BOX (vbox), infobar, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gchar *
|
|
||||||
get_file (const gchar *text,
|
|
||||||
const gchar *regex_place)
|
|
||||||
{
|
|
||||||
GRegex *regex;
|
|
||||||
GMatchInfo *match_info;
|
|
||||||
gchar *word = NULL;
|
|
||||||
|
|
||||||
regex = g_regex_new (regex_place, 0, 0, NULL);
|
|
||||||
g_regex_match (regex, text, 0, &match_info);
|
|
||||||
while (g_match_info_matches (match_info))
|
|
||||||
{
|
|
||||||
g_free (word);
|
|
||||||
|
|
||||||
word = g_match_info_fetch (match_info, 0);
|
|
||||||
|
|
||||||
g_match_info_next (match_info, NULL);
|
|
||||||
}
|
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
return word;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
get_numbers (const gchar *version,
|
|
||||||
gint *major,
|
|
||||||
gint *minor,
|
|
||||||
gint *micro)
|
|
||||||
{
|
|
||||||
gchar **split;
|
|
||||||
gint num = 2;
|
|
||||||
|
|
||||||
if (micro != NULL)
|
|
||||||
num = 3;
|
|
||||||
|
|
||||||
split = g_strsplit (version, ".", num);
|
|
||||||
*major = atoi (split[0]);
|
|
||||||
*minor = atoi (split[1]);
|
|
||||||
if (micro != NULL)
|
|
||||||
*micro = atoi (split[2]);
|
|
||||||
|
|
||||||
g_strfreev (split);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
newer_version (const gchar *v1,
|
|
||||||
const gchar *v2,
|
|
||||||
gboolean with_micro)
|
|
||||||
{
|
|
||||||
gboolean newer = FALSE;
|
|
||||||
gint major1, minor1, micro1;
|
|
||||||
gint major2, minor2, micro2;
|
|
||||||
|
|
||||||
if (v1 == NULL || v2 == NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (with_micro)
|
|
||||||
{
|
|
||||||
get_numbers (v1, &major1, &minor1, µ1);
|
|
||||||
get_numbers (v2, &major2, &minor2, µ2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
get_numbers (v1, &major1, &minor1, NULL);
|
|
||||||
get_numbers (v2, &major2, &minor2, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (major1 > major2)
|
|
||||||
{
|
|
||||||
newer = TRUE;
|
|
||||||
}
|
|
||||||
else if (minor1 > minor2 && major1 == major2)
|
|
||||||
{
|
|
||||||
newer = TRUE;
|
|
||||||
}
|
|
||||||
else if (with_micro && micro1 > micro2 && minor1 == minor2)
|
|
||||||
{
|
|
||||||
newer = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return newer;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gchar *
|
|
||||||
parse_file_version (const gchar *file)
|
|
||||||
{
|
|
||||||
gchar *p, *aux;
|
|
||||||
|
|
||||||
p = (gchar *)file;
|
|
||||||
|
|
||||||
while (*p != '\0' && !g_ascii_isdigit (*p))
|
|
||||||
{
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*p == '\0')
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
aux = g_strrstr (p, "-");
|
|
||||||
if (aux == NULL)
|
|
||||||
aux = g_strrstr (p, ".");
|
|
||||||
|
|
||||||
return g_strndup (p, aux - p);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gchar *
|
|
||||||
get_ignore_version (PlumaCheckUpdatePlugin *plugin)
|
|
||||||
{
|
|
||||||
return g_settings_get_string (plugin->priv->settings,
|
|
||||||
SETTINGS_IGNORE_VERSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
parse_page_file (SoupSession *session,
|
|
||||||
SoupMessage *msg,
|
|
||||||
PlumaWindow *window)
|
|
||||||
{
|
|
||||||
if (msg->status_code == SOUP_STATUS_OK)
|
|
||||||
{
|
|
||||||
gchar *file;
|
|
||||||
gchar *file_version;
|
|
||||||
gchar *ignore_version;
|
|
||||||
WindowData *data;
|
|
||||||
|
|
||||||
data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
|
|
||||||
|
|
||||||
file = get_file (msg->response_body->data, FILE_REGEX);
|
|
||||||
file_version = parse_file_version (file);
|
|
||||||
ignore_version = get_ignore_version (data->plugin);
|
|
||||||
|
|
||||||
if (newer_version (file_version, VERSION, TRUE) &&
|
|
||||||
(ignore_version == NULL || *ignore_version == '\0' ||
|
|
||||||
newer_version (file_version, ignore_version, TRUE)))
|
|
||||||
{
|
|
||||||
GtkWidget *infobar;
|
|
||||||
WindowData *data;
|
|
||||||
gchar *file_url;
|
|
||||||
|
|
||||||
data = g_object_get_data (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY);
|
|
||||||
|
|
||||||
file_url = g_strconcat (data->url, file, NULL);
|
|
||||||
|
|
||||||
g_free (data->url);
|
|
||||||
data->url = file_url;
|
|
||||||
data->version = g_strdup (file_version);
|
|
||||||
|
|
||||||
infobar = create_infobar (window, file_version);
|
|
||||||
pack_infobar (GTK_WIDGET (window), infobar);
|
|
||||||
gtk_widget_show (infobar);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (ignore_version);
|
|
||||||
g_free (file_version);
|
|
||||||
g_free (file);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_object_set_data (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
is_unstable (const gchar *version)
|
|
||||||
{
|
|
||||||
gchar **split;
|
|
||||||
gint minor;
|
|
||||||
gboolean unstable = TRUE;;
|
|
||||||
|
|
||||||
split = g_strsplit (version, ".", 2);
|
|
||||||
minor = atoi (split[1]);
|
|
||||||
g_strfreev (split);
|
|
||||||
|
|
||||||
if ((minor % 2) == 0)
|
|
||||||
unstable = FALSE;
|
|
||||||
|
|
||||||
return unstable;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gchar *
|
|
||||||
get_file_page_version (const gchar *text,
|
|
||||||
const gchar *regex_place)
|
|
||||||
{
|
|
||||||
GRegex *regex;
|
|
||||||
GMatchInfo *match_info;
|
|
||||||
GString *string = NULL;
|
|
||||||
gchar *unstable = NULL;
|
|
||||||
gchar *stable = NULL;
|
|
||||||
|
|
||||||
regex = g_regex_new (regex_place, 0, 0, NULL);
|
|
||||||
g_regex_match (regex, text, 0, &match_info);
|
|
||||||
while (g_match_info_matches (match_info))
|
|
||||||
{
|
|
||||||
gint end;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
g_match_info_fetch_pos (match_info, 0, NULL, &end);
|
|
||||||
|
|
||||||
string = g_string_new ("");
|
|
||||||
|
|
||||||
i = end;
|
|
||||||
while (text[i] != '/')
|
|
||||||
{
|
|
||||||
string = g_string_append_c (string, text[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_unstable (string->str))
|
|
||||||
{
|
|
||||||
g_free (unstable);
|
|
||||||
unstable = g_string_free (string, FALSE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_free (stable);
|
|
||||||
stable = g_string_free (string, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_match_info_next (match_info, NULL);
|
|
||||||
}
|
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
if ((PLUMA_MINOR_VERSION % 2) == 0)
|
|
||||||
{
|
|
||||||
g_free (unstable);
|
|
||||||
|
|
||||||
return stable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* We need to check that stable isn't newer than unstable */
|
|
||||||
if (newer_version (stable, unstable, FALSE))
|
|
||||||
{
|
|
||||||
g_free (unstable);
|
|
||||||
|
|
||||||
return stable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_free (stable);
|
|
||||||
|
|
||||||
return unstable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
parse_page_version (SoupSession *session,
|
|
||||||
SoupMessage *msg,
|
|
||||||
PlumaWindow *window)
|
|
||||||
{
|
|
||||||
if (msg->status_code == SOUP_STATUS_OK)
|
|
||||||
{
|
|
||||||
gchar *version;
|
|
||||||
SoupMessage *msg2;
|
|
||||||
WindowData *data;
|
|
||||||
|
|
||||||
data = g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
|
|
||||||
|
|
||||||
version = get_file_page_version (msg->response_body->data,
|
|
||||||
VERSION_PLACE);
|
|
||||||
|
|
||||||
data->url = g_strconcat (PLUMA_URL, version, "/", NULL);
|
|
||||||
g_free (version);
|
|
||||||
msg2 = soup_message_new ("GET", data->url);
|
|
||||||
|
|
||||||
soup_session_queue_message (session, msg2,
|
|
||||||
(SoupSessionCallback)parse_page_file,
|
|
||||||
window);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_object_set_data (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
impl_activate (PlumaPlugin *plugin,
|
|
||||||
PlumaWindow *window)
|
|
||||||
{
|
|
||||||
SoupMessage *msg;
|
|
||||||
WindowData *data;
|
|
||||||
|
|
||||||
pluma_debug (DEBUG_PLUGINS);
|
|
||||||
|
|
||||||
data = g_slice_new (WindowData);
|
|
||||||
data->plugin = PLUMA_CHECK_UPDATE_PLUGIN (plugin);
|
|
||||||
data->url = NULL;
|
|
||||||
data->version = NULL;
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY,
|
|
||||||
data,
|
|
||||||
free_window_data);
|
|
||||||
|
|
||||||
msg = soup_message_new ("GET", PLUMA_URL);
|
|
||||||
|
|
||||||
soup_session_queue_message (PLUMA_CHECK_UPDATE_PLUGIN (plugin)->priv->session, msg,
|
|
||||||
(SoupSessionCallback)parse_page_version,
|
|
||||||
window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
impl_deactivate (PlumaPlugin *plugin,
|
|
||||||
PlumaWindow *window)
|
|
||||||
{
|
|
||||||
|
|
||||||
pluma_debug (DEBUG_PLUGINS);
|
|
||||||
|
|
||||||
soup_session_abort (PLUMA_CHECK_UPDATE_PLUGIN (plugin)->priv->session);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (window),
|
|
||||||
WINDOW_DATA_KEY,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pluma_check_update_plugin_class_init (PlumaCheckUpdatePluginClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
PlumaPluginClass *plugin_class = PLUMA_PLUGIN_CLASS (klass);
|
|
||||||
|
|
||||||
g_type_class_add_private (object_class, sizeof (PlumaCheckUpdatePluginPrivate));
|
|
||||||
|
|
||||||
object_class->finalize = pluma_check_update_plugin_finalize;
|
|
||||||
object_class->dispose = pluma_check_update_plugin_dispose;
|
|
||||||
|
|
||||||
plugin_class->activate = impl_activate;
|
|
||||||
plugin_class->deactivate = impl_deactivate;
|
|
||||||
}
|
|
|
@ -1,74 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2009 - Ignacio Casal Quinteiro <icq@gnome.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __PLUMA_CHECK_UPDATE_PLUGIN_H__
|
|
||||||
#define __PLUMA_CHECK_UPDATE_PLUGIN_H__
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib-object.h>
|
|
||||||
#include <pluma/pluma-plugin.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Type checking and casting macros
|
|
||||||
*/
|
|
||||||
#define PLUMA_TYPE_CHECK_UPDATE_PLUGIN (pluma_check_update_plugin_get_type ())
|
|
||||||
#define PLUMA_CHECK_UPDATE_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), PLUMA_TYPE_CHECK_UPDATE_PLUGIN, PlumaCheckUpdatePlugin))
|
|
||||||
#define PLUMA_CHECK_UPDATE_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), PLUMA_TYPE_CHECK_UPDATE_PLUGIN, PlumaCheckUpdatePluginClass))
|
|
||||||
#define IS_PLUMA_CHECK_UPDATE_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), PLUMA_TYPE_CHECK_UPDATE_PLUGIN))
|
|
||||||
#define IS_PLUMA_CHECK_UPDATE_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), PLUMA_TYPE_CHECK_UPDATE_PLUGIN))
|
|
||||||
#define PLUMA_CHECK_UPDATE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), PLUMA_TYPE_CHECK_UPDATE_PLUGIN, PlumaCheckUpdatePluginClass))
|
|
||||||
|
|
||||||
/* Private structure type */
|
|
||||||
typedef struct _PlumaCheckUpdatePluginPrivate PlumaCheckUpdatePluginPrivate;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Main object structure
|
|
||||||
*/
|
|
||||||
typedef struct _PlumaCheckUpdatePlugin PlumaCheckUpdatePlugin;
|
|
||||||
|
|
||||||
struct _PlumaCheckUpdatePlugin
|
|
||||||
{
|
|
||||||
PlumaPlugin parent_instance;
|
|
||||||
|
|
||||||
/*< private >*/
|
|
||||||
PlumaCheckUpdatePluginPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Class definition
|
|
||||||
*/
|
|
||||||
typedef struct _PlumaCheckUpdatePluginClass PlumaCheckUpdatePluginClass;
|
|
||||||
|
|
||||||
struct _PlumaCheckUpdatePluginClass
|
|
||||||
{
|
|
||||||
PlumaPluginClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Public methods
|
|
||||||
*/
|
|
||||||
GType pluma_check_update_plugin_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
/* All the plugins must implement this function */
|
|
||||||
G_MODULE_EXPORT GType register_pluma_plugin (GTypeModule *module);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __PLUMA_CHECK_UPDATE_PLUGIN_H__ */
|
|
|
@ -2,31 +2,14 @@ TOOL_MERGE=$(top_srcdir)/plugins/externaltools/scripts/pluma-tool-merge.pl
|
||||||
|
|
||||||
tools_in_files = \
|
tools_in_files = \
|
||||||
build.tool.in \
|
build.tool.in \
|
||||||
remove-trailing-spaces.tool.in
|
|
||||||
|
|
||||||
tools_in_linux = \
|
|
||||||
open-terminal-here.tool.in \
|
open-terminal-here.tool.in \
|
||||||
|
remove-trailing-spaces.tool.in \
|
||||||
run-command.tool.in \
|
run-command.tool.in \
|
||||||
search-recursive.tool.in \
|
search-recursive.tool.in \
|
||||||
switch-c.tool.in
|
switch-c.tool.in
|
||||||
|
|
||||||
tools_in_osx = \
|
|
||||||
open-terminal-here-osx.tool.in
|
|
||||||
|
|
||||||
tools_in_win32 =
|
|
||||||
|
|
||||||
install_tools_in_files = $(tools_in_files)
|
install_tools_in_files = $(tools_in_files)
|
||||||
|
|
||||||
if PLATFORM_OSX
|
|
||||||
install_tools_in_files += $(tools_in_osx)
|
|
||||||
else
|
|
||||||
if PLATFORM_WIN32
|
|
||||||
install_tools_in_files += $(tools_in_win32)
|
|
||||||
else
|
|
||||||
install_tools_in_files += $(tools_in_linux)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
desktop_in_files = $(install_tools_in_files:.tool.in=.desktop.in)
|
desktop_in_files = $(install_tools_in_files:.tool.in=.desktop.in)
|
||||||
desktop_files = $(install_tools_in_files:.tool.in=.desktop)
|
desktop_files = $(install_tools_in_files:.tool.in=.desktop)
|
||||||
|
|
||||||
|
@ -34,10 +17,7 @@ tools_SCRIPTS = $(install_tools_in_files:.tool.in=)
|
||||||
toolsdir = $(PLUMA_PLUGINS_DATA_DIR)/externaltools/tools
|
toolsdir = $(PLUMA_PLUGINS_DATA_DIR)/externaltools/tools
|
||||||
|
|
||||||
all_tools_in_files = \
|
all_tools_in_files = \
|
||||||
$(tools_in_files) \
|
$(tools_in_files)
|
||||||
$(tools_in_linux) \
|
|
||||||
$(tools_in_osx) \
|
|
||||||
$(tools_in_win32)
|
|
||||||
|
|
||||||
all_desktop_in_files = $(all_tools_in_files:.tool.in=.desktop.in)
|
all_desktop_in_files = $(all_tools_in_files:.tool.in=.desktop.in)
|
||||||
all_desktop_files = $(all_tools_in_files:.tool.in=.desktop)
|
all_desktop_files = $(all_tools_in_files:.tool.in=.desktop)
|
||||||
|
@ -63,5 +43,4 @@ DISTCLEANFILES = \
|
||||||
$(all_desktop_files) \
|
$(all_desktop_files) \
|
||||||
$(all_tools_files)
|
$(all_tools_files)
|
||||||
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
-include $(top_srcdir)/git.mk
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
[Pluma Tool]
|
|
||||||
_Name=Open terminal here
|
|
||||||
_Comment=Open a terminal in the document location
|
|
||||||
Input=nothing
|
|
||||||
Output=output-panel
|
|
||||||
Applicability=local
|
|
||||||
Save-files=nothing
|
|
||||||
Languages=
|
|
|
@ -1,16 +0,0 @@
|
||||||
#!/usr/bin/osascript
|
|
||||||
|
|
||||||
set the_path to system attribute "PLUMA_CURRENT_DOCUMENT_DIR"
|
|
||||||
set cmd to "cd " & quoted form of the_path
|
|
||||||
|
|
||||||
tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
|
|
||||||
|
|
||||||
tell application "Terminal"
|
|
||||||
activate
|
|
||||||
|
|
||||||
if terminalIsRunning is true then
|
|
||||||
do script with command cmd
|
|
||||||
else
|
|
||||||
do script with command cmd in window 1
|
|
||||||
end if
|
|
||||||
end tell
|
|
|
@ -2257,7 +2257,6 @@ model_iterate_next_files_cb (GFileEnumerator * enumerator,
|
||||||
* FIXME: This is temporarly, it is a bug in gio:
|
* FIXME: This is temporarly, it is a bug in gio:
|
||||||
* http://bugzilla.gnome.org/show_bug.cgi?id=565924
|
* http://bugzilla.gnome.org/show_bug.cgi?id=565924
|
||||||
*/
|
*/
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
if (g_file_is_native (parent->file) && dir->monitor == NULL) {
|
if (g_file_is_native (parent->file) && dir->monitor == NULL) {
|
||||||
dir->monitor = g_file_monitor_directory (parent->file,
|
dir->monitor = g_file_monitor_directory (parent->file,
|
||||||
G_FILE_MONITOR_NONE,
|
G_FILE_MONITOR_NONE,
|
||||||
|
@ -2271,7 +2270,6 @@ model_iterate_next_files_cb (GFileEnumerator * enumerator,
|
||||||
parent);
|
parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
model_check_dummy (dir->model, parent);
|
model_check_dummy (dir->model, parent);
|
||||||
model_end_loading (dir->model, parent);
|
model_end_loading (dir->model, parent);
|
||||||
|
|
|
@ -41,14 +41,8 @@
|
||||||
#include "pluma-spell-language-dialog.h"
|
#include "pluma-spell-language-dialog.h"
|
||||||
#include "pluma-automatic-spell-checker.h"
|
#include "pluma-automatic-spell-checker.h"
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#include <pluma/pluma-metadata-manager.h>
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_SPELL_LANGUAGE "spell-language"
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_SPELL_ENABLED "spell-enabled"
|
|
||||||
#else
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_SPELL_LANGUAGE "metadata::pluma-spell-language"
|
#define PLUMA_METADATA_ATTRIBUTE_SPELL_LANGUAGE "metadata::pluma-spell-language"
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_SPELL_ENABLED "metadata::pluma-spell-enabled"
|
#define PLUMA_METADATA_ATTRIBUTE_SPELL_ENABLED "metadata::pluma-spell-enabled"
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WINDOW_DATA_KEY "PlumaSpellPluginWindowData"
|
#define WINDOW_DATA_KEY "PlumaSpellPluginWindowData"
|
||||||
#define MENU_PATH "/MenuBar/ToolsMenu/ToolsOps_1"
|
#define MENU_PATH "/MenuBar/ToolsMenu/ToolsOps_1"
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
/* FIXME: we should rewrite the parser to avoid using DOM */
|
/* FIXME: we should rewrite the parser to avoid using DOM */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -602,7 +602,6 @@ TagList* create_taglist(const gchar* data_dir)
|
||||||
return taglist;
|
return taglist;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
const gchar* home;
|
const gchar* home;
|
||||||
const gchar* envvar;
|
const gchar* envvar;
|
||||||
|
|
||||||
|
@ -636,12 +635,6 @@ TagList* create_taglist(const gchar* data_dir)
|
||||||
g_free (pdir);
|
g_free (pdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
pdir = g_build_filename(g_get_user_config_dir(), "pluma", "taglist", NULL);
|
|
||||||
parse_taglist_dir(pdir);
|
|
||||||
g_free(pdir);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* load system's taglists */
|
/* load system's taglists */
|
||||||
parse_taglist_dir(data_dir);
|
parse_taglist_dir(data_dir);
|
||||||
|
|
||||||
|
|
|
@ -72,9 +72,7 @@ static const gchar *formats[] =
|
||||||
"%a %d %b %Y %H:%M:%S",
|
"%a %d %b %Y %H:%M:%S",
|
||||||
"%d/%m/%Y",
|
"%d/%m/%Y",
|
||||||
"%d/%m/%y",
|
"%d/%m/%y",
|
||||||
#ifndef G_OS_WIN32
|
"%D",
|
||||||
"%D", /* This one is not supported on win32 */
|
|
||||||
#endif
|
|
||||||
"%A %d %B %Y",
|
"%A %d %B %Y",
|
||||||
"%A %B %d %Y",
|
"%A %B %d %Y",
|
||||||
"%Y-%m-%d",
|
"%Y-%m-%d",
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
SUBDIRS = dialogs smclient
|
SUBDIRS = dialogs smclient
|
||||||
|
|
||||||
if OS_OSX
|
|
||||||
SUBDIRS += osx
|
|
||||||
endif
|
|
||||||
|
|
||||||
bin_PROGRAMS = pluma
|
bin_PROGRAMS = pluma
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libpluma.la
|
noinst_LTLIBRARIES = libpluma.la
|
||||||
|
@ -14,7 +10,6 @@ AM_CPPFLAGS = \
|
||||||
-I$(srcdir) \
|
-I$(srcdir) \
|
||||||
-I$(srcdir)/smclient \
|
-I$(srcdir)/smclient \
|
||||||
$(PLUMA_CFLAGS) \
|
$(PLUMA_CFLAGS) \
|
||||||
$(IGE_MAC_CFLAGS) \
|
|
||||||
$(WARN_CFLAGS) \
|
$(WARN_CFLAGS) \
|
||||||
$(DISABLE_DEPRECATED_CFLAGS) \
|
$(DISABLE_DEPRECATED_CFLAGS) \
|
||||||
-DDATADIR=\""$(datadir)"\" \
|
-DDATADIR=\""$(datadir)"\" \
|
||||||
|
@ -23,16 +18,9 @@ AM_CPPFLAGS = \
|
||||||
pluma_SOURCES = \
|
pluma_SOURCES = \
|
||||||
pluma.c
|
pluma.c
|
||||||
|
|
||||||
pluma_LDADD = libpluma.la $(PLUMA_LIBS) $(IGE_MAC_LIBS) $(EGG_SMCLIENT_LIBS)
|
pluma_LDADD = libpluma.la $(PLUMA_LIBS) $(EGG_SMCLIENT_LIBS)
|
||||||
|
|
||||||
if PLATFORM_WIN32
|
|
||||||
pluma_LDFLAGS = -Wl,--export-all-symbols -Wl,--out-implib,libpluma.a
|
|
||||||
if OS_WIN32
|
|
||||||
pluma_LDFLAGS += -mwindows
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
pluma_LDFLAGS = -export-dynamic -no-undefined -export-symbols-regex "^[[^_]].*"
|
pluma_LDFLAGS = -export-dynamic -no-undefined -export-symbols-regex "^[[^_]].*"
|
||||||
endif
|
|
||||||
|
|
||||||
libpluma_la_LDFLAGS = -export-dynamic -no-undefined -export-symbols-regex "^[[^_]].*"
|
libpluma_la_LDFLAGS = -export-dynamic -no-undefined -export-symbols-regex "^[[^_]].*"
|
||||||
|
|
||||||
|
@ -43,24 +31,12 @@ libpluma_la_LIBADD = \
|
||||||
# PLUMA_LIBS must be the last to ensure correct order on some platforms
|
# PLUMA_LIBS must be the last to ensure correct order on some platforms
|
||||||
libpluma_la_LIBADD += $(PLUMA_LIBS) -lICE
|
libpluma_la_LIBADD += $(PLUMA_LIBS) -lICE
|
||||||
|
|
||||||
if OS_OSX
|
|
||||||
pluma_LDFLAGS += -framework Carbon
|
|
||||||
|
|
||||||
libpluma_la_LIBADD += osx/libosx.la
|
|
||||||
endif
|
|
||||||
|
|
||||||
BUILT_SOURCES = \
|
BUILT_SOURCES = \
|
||||||
pluma-enum-types.c \
|
pluma-enum-types.c \
|
||||||
pluma-enum-types.h \
|
pluma-enum-types.h \
|
||||||
pluma-marshal.c \
|
pluma-marshal.c \
|
||||||
pluma-marshal.h
|
pluma-marshal.h
|
||||||
|
|
||||||
if OS_WIN32
|
|
||||||
pluma-res.o: pluma.rc
|
|
||||||
$(WINDRES) -i pluma.rc --input-format=rc -o pluma-res.o -O coff
|
|
||||||
|
|
||||||
pluma_LDADD += pluma-res.o
|
|
||||||
endif
|
|
||||||
|
|
||||||
NOINST_H_FILES = \
|
NOINST_H_FILES = \
|
||||||
pluma-close-button.h \
|
pluma-close-button.h \
|
||||||
|
@ -222,20 +198,10 @@ CLEANFILES = $(BUILT_SOURCES)
|
||||||
dist-hook:
|
dist-hook:
|
||||||
cd $(distdir); rm -f $(BUILT_SOURCES)
|
cd $(distdir); rm -f $(BUILT_SOURCES)
|
||||||
|
|
||||||
install-exec-hook:
|
|
||||||
if PLATFORM_WIN32
|
|
||||||
$(mkinstalldirs) "$(DESTDIR)$(libdir)"
|
|
||||||
$(INSTALL_DATA) libpluma.a "$(DESTDIR)$(libdir)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !OS_WIN32
|
|
||||||
BACON_DIR=$(srcdir)/../../libbacon/src/
|
BACON_DIR=$(srcdir)/../../libbacon/src/
|
||||||
BACON_FILES=bacon-message-connection.h bacon-message-connection.c
|
BACON_FILES=bacon-message-connection.h bacon-message-connection.c
|
||||||
|
|
||||||
regenerate-built-sources:
|
regenerate-built-sources:
|
||||||
BACONFILES="$(BACON_FILES)" BACONDIR="$(BACON_DIR)" $(top_srcdir)/pluma/update-from-bacon.sh
|
BACONFILES="$(BACON_FILES)" BACONDIR="$(BACON_DIR)" $(top_srcdir)/pluma/update-from-bacon.sh
|
||||||
else
|
|
||||||
BACON_DIR=
|
|
||||||
endif
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
-include $(top_srcdir)/git.mk
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
AM_CPPFLAGS = \
|
|
||||||
-I$(top_srcdir) \
|
|
||||||
-I$(top_builddir) \
|
|
||||||
-I$(top_srcdir)/pluma \
|
|
||||||
-I$(top_builddir)/pluma \
|
|
||||||
$(PLUMA_CFLAGS) \
|
|
||||||
$(IGE_MAC_CFLAGS) \
|
|
||||||
$(WARN_CFLAGS) \
|
|
||||||
$(DISABLE_DEPRECATED_CFLAGS)
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libosx.la
|
|
||||||
|
|
||||||
libosx_la_LDFLAGS = -framework Carbon -framework ApplicationServices -framework Cocoa
|
|
||||||
libosx_la_LIBADD = -lobjc
|
|
||||||
libosx_la_CFLAGS = -xobjective-c
|
|
||||||
|
|
||||||
libosx_la_SOURCES = \
|
|
||||||
pluma-osx.c \
|
|
||||||
pluma-osx.h \
|
|
||||||
pluma-osx-delegate.m \
|
|
||||||
pluma-osx-delegate.h
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
|
|
@ -1,16 +0,0 @@
|
||||||
#ifndef PLUMA_OSX_DELEGATE_H_
|
|
||||||
#define PLUMA_OSX_DELEGATE_H_
|
|
||||||
|
|
||||||
#import <Foundation/NSAppleEventManager.h>
|
|
||||||
|
|
||||||
@interface PlumaOSXDelegate : NSObject
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
-(id) init;
|
|
||||||
-(void) openFiles:(NSAppleEventDescriptor*)event
|
|
||||||
withReply:(NSAppleEventDescriptor*)reply;
|
|
||||||
|
|
||||||
@end
|
|
||||||
|
|
||||||
#endif /* PLUMA_OSX_DELEGATE_H_ */
|
|
|
@ -1,84 +0,0 @@
|
||||||
#import "pluma-osx-delegate.h"
|
|
||||||
#import <Foundation/NSAppleEventManager.h>
|
|
||||||
#import <Foundation/NSAppleEventDescriptor.h>
|
|
||||||
#import <Foundation/NSData.h>
|
|
||||||
#include <glib.h>
|
|
||||||
#include <pluma/pluma-app.h>
|
|
||||||
#include <pluma/pluma-commands.h>
|
|
||||||
|
|
||||||
@implementation PlumaOSXDelegate
|
|
||||||
-(id)init
|
|
||||||
{
|
|
||||||
if ((self = [super init]))
|
|
||||||
{
|
|
||||||
NSAppleEventManager* em = [NSAppleEventManager sharedAppleEventManager];
|
|
||||||
|
|
||||||
[em setEventHandler:self
|
|
||||||
andSelector:@selector(openFiles:withReply:)
|
|
||||||
forEventClass:kCoreEventClass
|
|
||||||
andEventID:kAEOpenDocuments];
|
|
||||||
}
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PlumaWindow *
|
|
||||||
get_window(NSAppleEventDescriptor *event)
|
|
||||||
{
|
|
||||||
PlumaApp *app = pluma_app_get_default ();
|
|
||||||
return pluma_app_get_active_window (app);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)openFiles:(NSAppleEventDescriptor*)event
|
|
||||||
withReply:(NSAppleEventDescriptor*)reply
|
|
||||||
{
|
|
||||||
NSAppleEventDescriptor *fileList = [event paramDescriptorForKeyword:keyDirectObject];
|
|
||||||
NSInteger i;
|
|
||||||
GSList *uris = NULL;
|
|
||||||
|
|
||||||
if (!fileList)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 1; i <= [fileList numberOfItems]; ++i)
|
|
||||||
{
|
|
||||||
NSAppleEventDescriptor *fileAliasDesc = [fileList descriptorAtIndex:i];
|
|
||||||
NSAppleEventDescriptor *fileURLDesc;
|
|
||||||
NSData *fileURLData;
|
|
||||||
gchar *url;
|
|
||||||
|
|
||||||
if (!fileAliasDesc)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
fileURLDesc = [fileAliasDesc coerceToDescriptorType:typeFileURL];
|
|
||||||
|
|
||||||
if (!fileURLDesc)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
fileURLData = [fileURLDesc data];
|
|
||||||
|
|
||||||
if (!fileURLData)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
url = g_strndup([fileURLData bytes], [fileURLData length]);
|
|
||||||
uris = g_slist_prepend (uris, url);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uris != NULL)
|
|
||||||
{
|
|
||||||
PlumaWindow *window = get_window (event);
|
|
||||||
pluma_commands_load_uris (window, uris, NULL, 0);
|
|
||||||
|
|
||||||
g_slist_foreach (uris, (GFunc)g_free, NULL);
|
|
||||||
g_slist_free (uris);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
|
|
@ -1,94 +0,0 @@
|
||||||
#include "pluma-osx.h"
|
|
||||||
#include <gdk/gdkquartz.h>
|
|
||||||
#include <Carbon/Carbon.h>
|
|
||||||
|
|
||||||
#import "pluma-osx-delegate.h"
|
|
||||||
|
|
||||||
void
|
|
||||||
pluma_osx_set_window_title (PlumaWindow *window,
|
|
||||||
gchar const *title,
|
|
||||||
PlumaDocument *document)
|
|
||||||
{
|
|
||||||
NSWindow *native;
|
|
||||||
|
|
||||||
g_return_if_fail (PLUMA_IS_WINDOW (window));
|
|
||||||
|
|
||||||
if (GTK_WIDGET (window)->window == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
native = gdk_quartz_window_get_nswindow (GTK_WIDGET (window)->window);
|
|
||||||
|
|
||||||
if (document)
|
|
||||||
{
|
|
||||||
bool ismodified;
|
|
||||||
|
|
||||||
if (pluma_document_is_untitled (document))
|
|
||||||
{
|
|
||||||
[native setRepresentedURL:nil];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const gchar *uri = pluma_document_get_uri (document);
|
|
||||||
NSURL *nsurl = [NSURL URLWithString:[NSString stringWithUTF8String:uri]];
|
|
||||||
|
|
||||||
[native setRepresentedURL:nsurl];
|
|
||||||
}
|
|
||||||
|
|
||||||
ismodified = !pluma_document_is_untouched (document);
|
|
||||||
[native setDocumentEdited:ismodified];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
[native setRepresentedURL:nil];
|
|
||||||
[native setDocumentEdited:false];
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), title);
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
pluma_osx_show_url (const gchar *url)
|
|
||||||
{
|
|
||||||
return [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[NSString stringWithUTF8String:url]]];
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
pluma_osx_show_help (const gchar *link_id)
|
|
||||||
{
|
|
||||||
gchar *link;
|
|
||||||
gboolean ret;
|
|
||||||
|
|
||||||
if (link_id)
|
|
||||||
{
|
|
||||||
link = g_strdup_printf ("http://library.gnome.org/users/pluma/stable/%s",
|
|
||||||
link_id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
link = g_strdup ("http://library.gnome.org/users/pluma/stable/");
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = pluma_osx_show_url (link);
|
|
||||||
g_free (link);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
destroy_delegate (PlumaOSXDelegate *delegate)
|
|
||||||
{
|
|
||||||
[delegate dealloc];
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
pluma_osx_init(PlumaApp *app)
|
|
||||||
{
|
|
||||||
PlumaOSXDelegate *delegate = [[PlumaOSXDelegate alloc] init];
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (app),
|
|
||||||
"PlumaOSXDelegate",
|
|
||||||
delegate,
|
|
||||||
(GDestroyNotify)destroy_delegate);
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
#ifndef __PLUMA_OSX_H__
|
|
||||||
#define __PLUMA_OSX_H__
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <pluma/pluma-window.h>
|
|
||||||
#include <pluma/pluma-app.h>
|
|
||||||
|
|
||||||
void pluma_osx_init (PlumaApp *app);
|
|
||||||
|
|
||||||
void pluma_osx_set_window_title (PlumaWindow *window,
|
|
||||||
gchar const *title,
|
|
||||||
PlumaDocument *document);
|
|
||||||
|
|
||||||
gboolean pluma_osx_show_url (const gchar *url);
|
|
||||||
gboolean pluma_osx_show_help (const gchar *link_id);
|
|
||||||
|
|
||||||
#endif /* __PLUMA_OSX_H__ */
|
|
|
@ -46,10 +46,6 @@
|
||||||
#include "pluma-enum-types.h"
|
#include "pluma-enum-types.h"
|
||||||
#include "pluma-dirs.h"
|
#include "pluma-dirs.h"
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include <ige-mac-integration.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define PLUMA_PAGE_SETUP_FILE "pluma-page-setup"
|
#define PLUMA_PAGE_SETUP_FILE "pluma-page-setup"
|
||||||
#define PLUMA_PRINT_SETTINGS_FILE "pluma-print-settings"
|
#define PLUMA_PRINT_SETTINGS_FILE "pluma-print-settings"
|
||||||
|
|
||||||
|
@ -440,14 +436,6 @@ window_destroy (PlumaWindow *window,
|
||||||
*/
|
*/
|
||||||
if (app->priv->windows == NULL)
|
if (app->priv->windows == NULL)
|
||||||
{
|
{
|
||||||
#ifdef OS_OSX
|
|
||||||
if (!GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "pluma-is-quitting-all")))
|
|
||||||
{
|
|
||||||
/* Create hidden proxy window on OS X to handle the menu */
|
|
||||||
pluma_app_create_window (app, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* Last window is gone... save some settings and exit */
|
/* Last window is gone... save some settings and exit */
|
||||||
ensure_user_config_dir ();
|
ensure_user_config_dir ();
|
||||||
|
|
||||||
|
|
|
@ -1647,11 +1647,6 @@ close_confirmation_dialog_response_handler (PlumaCloseConfirmationDialog *dlg,
|
||||||
PLUMA_IS_QUITTING,
|
PLUMA_IS_QUITTING,
|
||||||
GBOOLEAN_TO_POINTER (FALSE));
|
GBOOLEAN_TO_POINTER (FALSE));
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
g_object_set_data (G_OBJECT (window),
|
|
||||||
PLUMA_IS_QUITTING_ALL,
|
|
||||||
GINT_TO_POINTER (FALSE));
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1734,10 +1729,6 @@ _pluma_cmd_file_close (GtkAction *action,
|
||||||
|
|
||||||
if (active_tab == NULL)
|
if (active_tab == NULL)
|
||||||
{
|
{
|
||||||
#ifdef OS_OSX
|
|
||||||
/* Close the window on OS X */
|
|
||||||
gtk_widget_destroy (GTK_WIDGET (window));
|
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1829,53 +1820,12 @@ _pluma_cmd_file_close_all (GtkAction *action,
|
||||||
file_close_all (window, FALSE);
|
file_close_all (window, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Quit */
|
|
||||||
#ifdef OS_OSX
|
|
||||||
static void
|
|
||||||
quit_all ()
|
|
||||||
{
|
|
||||||
GList *windows;
|
|
||||||
GList *item;
|
|
||||||
PlumaApp *app;
|
|
||||||
|
|
||||||
app = pluma_app_get_default ();
|
|
||||||
windows = g_list_copy ((GList *)pluma_app_get_windows (app));
|
|
||||||
|
|
||||||
for (item = windows; item; item = g_list_next (item))
|
|
||||||
{
|
|
||||||
PlumaWindow *window = PLUMA_WINDOW (item->data);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (window),
|
|
||||||
PLUMA_IS_QUITTING_ALL,
|
|
||||||
GINT_TO_POINTER (TRUE));
|
|
||||||
|
|
||||||
if (!(pluma_window_get_state (window) &
|
|
||||||
(PLUMA_WINDOW_STATE_SAVING |
|
|
||||||
PLUMA_WINDOW_STATE_PRINTING |
|
|
||||||
PLUMA_WINDOW_STATE_SAVING_SESSION)))
|
|
||||||
{
|
|
||||||
file_close_all (window, TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_list_free (windows);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_pluma_cmd_file_quit (GtkAction *action,
|
_pluma_cmd_file_quit (GtkAction *action,
|
||||||
PlumaWindow *window)
|
PlumaWindow *window)
|
||||||
{
|
{
|
||||||
pluma_debug (DEBUG_COMMANDS);
|
pluma_debug (DEBUG_COMMANDS);
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
if (action != NULL)
|
|
||||||
{
|
|
||||||
quit_all ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
g_return_if_fail (!(pluma_window_get_state (window) &
|
g_return_if_fail (!(pluma_window_get_state (window) &
|
||||||
(PLUMA_WINDOW_STATE_SAVING |
|
(PLUMA_WINDOW_STATE_SAVING |
|
||||||
PLUMA_WINDOW_STATE_PRINTING |
|
PLUMA_WINDOW_STATE_PRINTING |
|
||||||
|
|
|
@ -22,15 +22,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "pluma-dirs.h"
|
#include "pluma-dirs.h"
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include <ige-mac-bundle.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gchar* pluma_dirs_get_user_config_dir(void)
|
gchar* pluma_dirs_get_user_config_dir(void)
|
||||||
{
|
{
|
||||||
gchar* config_dir = NULL;
|
gchar* config_dir = NULL;
|
||||||
|
@ -73,102 +69,17 @@ gchar* pluma_dirs_get_user_accels_file(void)
|
||||||
|
|
||||||
gchar* pluma_dirs_get_pluma_data_dir(void)
|
gchar* pluma_dirs_get_pluma_data_dir(void)
|
||||||
{
|
{
|
||||||
gchar* data_dir;
|
return g_build_filename(DATADIR, "pluma", NULL);
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
gchar* win32_dir;
|
|
||||||
|
|
||||||
win32_dir = g_win32_get_package_installation_directory_of_module(NULL);
|
|
||||||
|
|
||||||
data_dir = g_build_filename(win32_dir, "share", "pluma", NULL);
|
|
||||||
|
|
||||||
g_free(win32_dir);
|
|
||||||
|
|
||||||
#elif defined(OS_OSX)
|
|
||||||
|
|
||||||
IgeMacBundle* bundle = ige_mac_bundle_get_default();
|
|
||||||
|
|
||||||
if (ige_mac_bundle_get_is_app_bundle(bundle))
|
|
||||||
{
|
|
||||||
const gchar* bundle_data_dir = ige_mac_bundle_get_datadir(bundle);
|
|
||||||
|
|
||||||
data_dir = g_build_filename(bundle_data_dir, "pluma", NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data_dir = g_build_filename(DATADIR, "pluma", NULL);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
data_dir = g_build_filename(DATADIR, "pluma", NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return data_dir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar* pluma_dirs_get_pluma_locale_dir(void)
|
gchar* pluma_dirs_get_pluma_locale_dir(void)
|
||||||
{
|
{
|
||||||
gchar* locale_dir;
|
return g_build_filename(DATADIR, "locale", NULL);
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
|
|
||||||
gchar* win32_dir;
|
|
||||||
|
|
||||||
win32_dir = g_win32_get_package_installation_directory_of_module(NULL);
|
|
||||||
|
|
||||||
locale_dir = g_build_filename(win32_dir, "share", "locale", NULL);
|
|
||||||
|
|
||||||
g_free(win32_dir);
|
|
||||||
|
|
||||||
#elif defined(OS_OSX)
|
|
||||||
|
|
||||||
IgeMacBundle *bundle = ige_mac_bundle_get_default();
|
|
||||||
|
|
||||||
if (ige_mac_bundle_get_is_app_bundle(bundle))
|
|
||||||
{
|
|
||||||
locale_dir = g_strdup(ige_mac_bundle_get_localedir(bundle));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
locale_dir = g_build_filename(DATADIR, "locale", NULL);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
locale_dir = g_build_filename(DATADIR, "locale", NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return locale_dir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar* pluma_dirs_get_pluma_lib_dir(void)
|
gchar* pluma_dirs_get_pluma_lib_dir(void)
|
||||||
{
|
{
|
||||||
gchar* lib_dir;
|
return g_build_filename(LIBDIR, "pluma", NULL);
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
|
|
||||||
gchar* win32_dir;
|
|
||||||
|
|
||||||
win32_dir = g_win32_get_package_installation_directory_of_module(NULL);
|
|
||||||
|
|
||||||
lib_dir = g_build_filename(win32_dir, "lib", "pluma", NULL);
|
|
||||||
|
|
||||||
g_free(win32_dir);
|
|
||||||
|
|
||||||
#elif defined(OS_OSX)
|
|
||||||
IgeMacBundle* bundle = ige_mac_bundle_get_default();
|
|
||||||
|
|
||||||
if (ige_mac_bundle_get_is_app_bundle(bundle))
|
|
||||||
{
|
|
||||||
const gchar* path = ige_mac_bundle_get_resourcesdir(bundle);
|
|
||||||
lib_dir = g_build_filename(path, "lib", "pluma", NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lib_dir = g_build_filename(LIBDIR, "pluma", NULL);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
lib_dir = g_build_filename(LIBDIR, "pluma", NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return lib_dir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar* pluma_dirs_get_pluma_plugins_dir(void)
|
gchar* pluma_dirs_get_pluma_plugins_dir(void)
|
||||||
|
|
|
@ -51,15 +51,9 @@ G_BEGIN_DECLS
|
||||||
#define PLUMA_IS_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLUMA_TYPE_DOCUMENT))
|
#define PLUMA_IS_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLUMA_TYPE_DOCUMENT))
|
||||||
#define PLUMA_DOCUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PLUMA_TYPE_DOCUMENT, PlumaDocumentClass))
|
#define PLUMA_DOCUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PLUMA_TYPE_DOCUMENT, PlumaDocumentClass))
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_POSITION "position"
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_ENCODING "encoding"
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_LANGUAGE "language"
|
|
||||||
#else
|
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_POSITION "metadata::pluma-position"
|
#define PLUMA_METADATA_ATTRIBUTE_POSITION "metadata::pluma-position"
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_ENCODING "metadata::pluma-encoding"
|
#define PLUMA_METADATA_ATTRIBUTE_ENCODING "metadata::pluma-encoding"
|
||||||
#define PLUMA_METADATA_ATTRIBUTE_LANGUAGE "metadata::pluma-language"
|
#define PLUMA_METADATA_ATTRIBUTE_LANGUAGE "metadata::pluma-language"
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -68,11 +62,7 @@ typedef enum
|
||||||
PLUMA_DOCUMENT_NEWLINE_TYPE_CR_LF
|
PLUMA_DOCUMENT_NEWLINE_TYPE_CR_LF
|
||||||
} PlumaDocumentNewlineType;
|
} PlumaDocumentNewlineType;
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#define PLUMA_DOCUMENT_NEWLINE_TYPE_DEFAULT PLUMA_DOCUMENT_NEWLINE_TYPE_CR_LF
|
|
||||||
#else
|
|
||||||
#define PLUMA_DOCUMENT_NEWLINE_TYPE_DEFAULT PLUMA_DOCUMENT_NEWLINE_TYPE_LF
|
#define PLUMA_DOCUMENT_NEWLINE_TYPE_DEFAULT PLUMA_DOCUMENT_NEWLINE_TYPE_LF
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|
|
@ -38,10 +38,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include "osx/pluma-osx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
pluma_help_display (GtkWindow *parent,
|
pluma_help_display (GtkWindow *parent,
|
||||||
const gchar *name, /* "pluma" if NULL */
|
const gchar *name, /* "pluma" if NULL */
|
||||||
|
@ -53,17 +49,6 @@ pluma_help_display (GtkWindow *parent,
|
||||||
|
|
||||||
g_return_val_if_fail ((parent == NULL) || GTK_IS_WINDOW (parent), FALSE);
|
g_return_val_if_fail ((parent == NULL) || GTK_IS_WINDOW (parent), FALSE);
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
if (name == NULL || strcmp(name, "pluma.xml") == NULL || strcmp(name, "pluma") == 0)
|
|
||||||
{
|
|
||||||
return pluma_osx_show_help (link_id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
name = "pluma";
|
name = "pluma";
|
||||||
else if (strcmp (name, "pluma.xml") == 0)
|
else if (strcmp (name, "pluma.xml") == 0)
|
||||||
|
@ -73,18 +58,10 @@ pluma_help_display (GtkWindow *parent,
|
||||||
name = "pluma";
|
name = "pluma";
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
if (link_id)
|
if (link_id)
|
||||||
link = g_strdup_printf ("help:%s/%s", name, link_id);
|
link = g_strdup_printf ("help:%s/%s", name, link_id);
|
||||||
else
|
else
|
||||||
link = g_strdup_printf ("help:%s", name);
|
link = g_strdup_printf ("help:%s", name);
|
||||||
#else
|
|
||||||
if (link_id)
|
|
||||||
link = g_strdup_printf ("http://library.gnome.org/users/pluma/stable/%s",
|
|
||||||
link_id);
|
|
||||||
else
|
|
||||||
link = g_strdup ("http://library.gnome.org/users/pluma/stable/");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ret = gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (parent)),
|
ret = gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (parent)),
|
||||||
link,
|
link,
|
||||||
|
|
|
@ -114,13 +114,8 @@ static const GtkActionEntry pluma_menu_entries[] =
|
||||||
N_("Search forwards for the same text"), G_CALLBACK (_pluma_cmd_search_find_next) },
|
N_("Search forwards for the same text"), G_CALLBACK (_pluma_cmd_search_find_next) },
|
||||||
{ "SearchFindPrevious", NULL, N_("Find Pre_vious"), "<shift><control>G",
|
{ "SearchFindPrevious", NULL, N_("Find Pre_vious"), "<shift><control>G",
|
||||||
N_("Search backwards for the same text"), G_CALLBACK (_pluma_cmd_search_find_prev) },
|
N_("Search backwards for the same text"), G_CALLBACK (_pluma_cmd_search_find_prev) },
|
||||||
#ifndef OS_OSX
|
|
||||||
{ "SearchReplace", GTK_STOCK_FIND_AND_REPLACE, N_("_Replace..."), "<control>H",
|
{ "SearchReplace", GTK_STOCK_FIND_AND_REPLACE, N_("_Replace..."), "<control>H",
|
||||||
N_("Search for and replace text"), G_CALLBACK (_pluma_cmd_search_replace) },
|
N_("Search for and replace text"), G_CALLBACK (_pluma_cmd_search_replace) },
|
||||||
#else
|
|
||||||
{ "SearchReplace", GTK_STOCK_FIND_AND_REPLACE, N_("_Replace..."), "<control><alt>F",
|
|
||||||
N_("Search for and replace text"), G_CALLBACK (_pluma_cmd_search_replace) },
|
|
||||||
#endif
|
|
||||||
{ "SearchClearHighlight", NULL, N_("_Clear Highlight"), "<shift><control>K",
|
{ "SearchClearHighlight", NULL, N_("_Clear Highlight"), "<shift><control>K",
|
||||||
N_("Clear highlighting of search matches"), G_CALLBACK (_pluma_cmd_search_clear_highlight) },
|
N_("Clear highlighting of search matches"), G_CALLBACK (_pluma_cmd_search_clear_highlight) },
|
||||||
{ "SearchGoToLine", GTK_STOCK_JUMP_TO, N_("Go to _Line..."), "<control>I",
|
{ "SearchGoToLine", GTK_STOCK_JUMP_TO, N_("Go to _Line..."), "<control>I",
|
||||||
|
|
|
@ -35,10 +35,6 @@
|
||||||
#include "pluma-prefs-manager.h"
|
#include "pluma-prefs-manager.h"
|
||||||
#include "pluma-message-bus.h"
|
#include "pluma-message-bus.h"
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include <ige-mac-integration.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
/* WindowPrivate is in a separate .h so that we can access it from pluma-commands */
|
/* WindowPrivate is in a separate .h so that we can access it from pluma-commands */
|
||||||
|
@ -111,10 +107,6 @@ struct _PlumaWindowPrivate
|
||||||
|
|
||||||
GFile *default_location;
|
GFile *default_location;
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
IgeMacMenuGroup *mac_menu_group;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gboolean removing_tabs : 1;
|
gboolean removing_tabs : 1;
|
||||||
gboolean dispose_has_run : 1;
|
gboolean dispose_has_run : 1;
|
||||||
};
|
};
|
||||||
|
|
|
@ -61,10 +61,6 @@
|
||||||
#include "pluma-dirs.h"
|
#include "pluma-dirs.h"
|
||||||
#include "pluma-status-combo-box.h"
|
#include "pluma-status-combo-box.h"
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include "osx/pluma-osx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define LANGUAGE_NONE (const gchar *)"LangNone"
|
#define LANGUAGE_NONE (const gchar *)"LangNone"
|
||||||
#define PLUMA_UIFILE "pluma-ui.xml"
|
#define PLUMA_UIFILE "pluma-ui.xml"
|
||||||
#define TAB_WIDTH_DATA "PlumaWindowTabWidthData"
|
#define TAB_WIDTH_DATA "PlumaWindowTabWidthData"
|
||||||
|
@ -159,58 +155,6 @@ save_panes_state (PlumaWindow *window)
|
||||||
pluma_prefs_manager_set_bottom_panel_active_page (pane_page);
|
pluma_prefs_manager_set_bottom_panel_active_page (pane_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
static GtkMenuItem *
|
|
||||||
ui_manager_menu_item (GtkUIManager *uimanager,
|
|
||||||
const gchar *path)
|
|
||||||
{
|
|
||||||
return GTK_MENU_ITEM (gtk_ui_manager_get_widget (uimanager, path));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
add_mac_root_menu (PlumaWindow *window)
|
|
||||||
{
|
|
||||||
if (window->priv->mac_menu_group != NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
window->priv->mac_menu_group = ige_mac_menu_add_app_menu_group ();
|
|
||||||
|
|
||||||
ige_mac_menu_add_app_menu_item (window->priv->mac_menu_group,
|
|
||||||
ui_manager_menu_item (window->priv->manager, "/ui/MenuBar/HelpMenu/HelpAboutMenu"),
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
remove_mac_root_menu (PlumaWindow *window)
|
|
||||||
{
|
|
||||||
if (window->priv->mac_menu_group == NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ige_mac_menu_remove_app_menu_group (window->priv->mac_menu_group);
|
|
||||||
window->priv->mac_menu_group = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
pluma_window_focus_in_event (GtkWidget *widget,
|
|
||||||
GdkEventFocus *event)
|
|
||||||
{
|
|
||||||
add_mac_root_menu (PLUMA_WINDOW (widget));
|
|
||||||
return GTK_WIDGET_CLASS (pluma_window_parent_class)->focus_in_event (widget, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
pluma_window_focus_out_event (GtkWidget *widget,
|
|
||||||
GdkEventFocus *event)
|
|
||||||
{
|
|
||||||
remove_mac_root_menu (PLUMA_WINDOW (widget));
|
|
||||||
return GTK_WIDGET_CLASS (pluma_window_parent_class)->focus_out_event (widget, event);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pluma_window_dispose (GObject *object)
|
pluma_window_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
|
@ -292,10 +236,6 @@ pluma_window_dispose (GObject *object)
|
||||||
*/
|
*/
|
||||||
pluma_plugins_engine_garbage_collect (pluma_plugins_engine_get_default ());
|
pluma_plugins_engine_garbage_collect (pluma_plugins_engine_get_default ());
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
remove_mac_root_menu (window);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (pluma_window_parent_class)->dispose (object);
|
G_OBJECT_CLASS (pluma_window_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -403,11 +343,6 @@ pluma_window_class_init (PlumaWindowClass *klass)
|
||||||
widget_class->configure_event = pluma_window_configure_event;
|
widget_class->configure_event = pluma_window_configure_event;
|
||||||
widget_class->key_press_event = pluma_window_key_press_event;
|
widget_class->key_press_event = pluma_window_key_press_event;
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
widget_class->focus_in_event = pluma_window_focus_in_event;
|
|
||||||
widget_class->focus_out_event = pluma_window_focus_out_event;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
signals[TAB_ADDED] =
|
signals[TAB_ADDED] =
|
||||||
g_signal_new ("tab_added",
|
g_signal_new ("tab_added",
|
||||||
G_OBJECT_CLASS_TYPE (object_class),
|
G_OBJECT_CLASS_TYPE (object_class),
|
||||||
|
@ -2183,11 +2118,7 @@ set_title (PlumaWindow *window)
|
||||||
|
|
||||||
if (window->priv->active_tab == NULL)
|
if (window->priv->active_tab == NULL)
|
||||||
{
|
{
|
||||||
#ifdef OS_OSX
|
|
||||||
pluma_osx_set_window_title (window, "pluma", NULL);
|
|
||||||
#else
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "pluma");
|
gtk_window_set_title (GTK_WINDOW (window), "pluma");
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2267,11 +2198,7 @@ set_title (PlumaWindow *window)
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
pluma_osx_set_window_title (window, title, doc);
|
|
||||||
#else
|
|
||||||
gtk_window_set_title (GTK_WINDOW (window), title);
|
gtk_window_set_title (GTK_WINDOW (window), title);
|
||||||
#endif
|
|
||||||
|
|
||||||
g_free (dirname);
|
g_free (dirname);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
|
@ -2583,14 +2510,8 @@ set_sensitivity_according_to_window_state (PlumaWindow *window)
|
||||||
window->priv->num_tabs > 0);
|
window->priv->num_tabs > 0);
|
||||||
if (!gtk_action_group_get_sensitive (window->priv->close_action_group))
|
if (!gtk_action_group_get_sensitive (window->priv->close_action_group))
|
||||||
{
|
{
|
||||||
#ifdef OS_OSX
|
|
||||||
/* On OS X, File Close is always sensitive */
|
|
||||||
gtk_action_group_set_sensitive (window->priv->close_action_group,
|
|
||||||
TRUE);
|
|
||||||
#else
|
|
||||||
gtk_action_group_set_sensitive (window->priv->close_action_group,
|
gtk_action_group_set_sensitive (window->priv->close_action_group,
|
||||||
window->priv->num_tabs > 0);
|
window->priv->num_tabs > 0);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3212,11 +3133,8 @@ update_sensitivity_according_to_open_tabs (PlumaWindow *window)
|
||||||
gtk_action_set_sensitive (action,
|
gtk_action_set_sensitive (action,
|
||||||
window->priv->num_tabs > 1);
|
window->priv->num_tabs > 1);
|
||||||
|
|
||||||
/* Do not set close action insensitive on OS X */
|
|
||||||
#ifndef OS_OSX
|
|
||||||
gtk_action_group_set_sensitive (window->priv->close_action_group,
|
gtk_action_group_set_sensitive (window->priv->close_action_group,
|
||||||
window->priv->num_tabs != 0);
|
window->priv->num_tabs != 0);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3840,27 +3758,6 @@ check_window_is_active (PlumaWindow *window,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
static void
|
|
||||||
setup_mac_menu (PlumaWindow *window)
|
|
||||||
{
|
|
||||||
GtkAction *action;
|
|
||||||
|
|
||||||
gtk_widget_hide (window->priv->menubar);
|
|
||||||
action = gtk_ui_manager_get_action (window->priv->manager, "/ui/MenuBar/HelpMenu/HelpAboutMenu");
|
|
||||||
|
|
||||||
gtk_action_set_label (action, _("About pluma"));
|
|
||||||
|
|
||||||
ige_mac_menu_set_menu_bar (GTK_MENU_SHELL (window->priv->menubar));
|
|
||||||
ige_mac_menu_set_quit_menu_item (ui_manager_menu_item (window->priv->manager, "/ui/MenuBar/FileMenu/FileQuitMenu"));
|
|
||||||
|
|
||||||
ige_mac_menu_set_preferences_menu_item (ui_manager_menu_item (window->priv->manager, "/ui/MenuBar/EditMenu/EditPreferencesMenu"));
|
|
||||||
|
|
||||||
add_mac_root_menu (window);
|
|
||||||
ige_mac_menu_connect_window_key_handler (GTK_WINDOW (window));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
connect_notebook_signals (PlumaWindow *window,
|
connect_notebook_signals (PlumaWindow *window,
|
||||||
GtkWidget *notebook)
|
GtkWidget *notebook)
|
||||||
|
@ -4042,10 +3939,6 @@ pluma_window_init (PlumaWindow *window)
|
||||||
|
|
||||||
update_sensitivity_according_to_open_tabs (window);
|
update_sensitivity_according_to_open_tabs (window);
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
setup_mac_menu (window);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pluma_debug_message (DEBUG_WINDOW, "END");
|
pluma_debug_message (DEBUG_WINDOW, "END");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
102
pluma/pluma.c
102
pluma/pluma.c
|
@ -40,10 +40,7 @@
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "pluma-app.h"
|
#include "pluma-app.h"
|
||||||
#include "pluma-commands.h"
|
#include "pluma-commands.h"
|
||||||
|
@ -59,34 +56,15 @@
|
||||||
#include "eggsmclient.h"
|
#include "eggsmclient.h"
|
||||||
#include "eggdesktopfile.h"
|
#include "eggdesktopfile.h"
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#define SAVE_DATADIR DATADIR
|
|
||||||
#undef DATADIR
|
|
||||||
#include <io.h>
|
|
||||||
#include <conio.h>
|
|
||||||
#define _WIN32_WINNT 0x0500
|
|
||||||
#include <windows.h>
|
|
||||||
#define DATADIR SAVE_DATADIR
|
|
||||||
#undef SAVE_DATADIR
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
#include <ige-mac-dock.h>
|
|
||||||
#include <ige-mac-integration.h>
|
|
||||||
#include "osx/pluma-osx.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ENABLE_GVFS_METADATA
|
#ifndef ENABLE_GVFS_METADATA
|
||||||
#include "pluma-metadata-manager.h"
|
#include "pluma-metadata-manager.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static guint32 startup_timestamp = 0;
|
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
#include "bacon-message-connection.h"
|
#include "bacon-message-connection.h"
|
||||||
|
|
||||||
|
static guint32 startup_timestamp = 0;
|
||||||
|
|
||||||
static BaconMessageConnection *connection;
|
static BaconMessageConnection *connection;
|
||||||
#endif
|
|
||||||
|
|
||||||
/* command line */
|
/* command line */
|
||||||
static gint line_position = 0;
|
static gint line_position = 0;
|
||||||
|
@ -234,7 +212,6 @@ get_startup_timestamp (void)
|
||||||
return (retval > 0) ? retval : 0;
|
return (retval > 0) ? retval : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
static GdkDisplay *
|
static GdkDisplay *
|
||||||
display_open_if_needed (const gchar *name)
|
display_open_if_needed (const gchar *name)
|
||||||
{
|
{
|
||||||
|
@ -400,13 +377,11 @@ on_message_received (const char *message,
|
||||||
if (!gtk_widget_get_realized (GTK_WIDGET (window)))
|
if (!gtk_widget_get_realized (GTK_WIDGET (window)))
|
||||||
gtk_widget_realize (GTK_WIDGET (window));
|
gtk_widget_realize (GTK_WIDGET (window));
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
|
||||||
if (startup_timestamp <= 0)
|
if (startup_timestamp <= 0)
|
||||||
startup_timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (window)));
|
startup_timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (window)));
|
||||||
|
|
||||||
gdk_x11_window_set_user_time (gtk_widget_get_window (GTK_WIDGET (window)),
|
gdk_x11_window_set_user_time (gtk_widget_get_window (GTK_WIDGET (window)),
|
||||||
startup_timestamp);
|
startup_timestamp);
|
||||||
#endif
|
|
||||||
|
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_window_present (GTK_WINDOW (window));
|
||||||
|
|
||||||
|
@ -513,35 +488,6 @@ send_bacon_message (void)
|
||||||
|
|
||||||
g_string_free (command, TRUE);
|
g_string_free (command, TRUE);
|
||||||
}
|
}
|
||||||
#endif /* G_OS_WIN32 */
|
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
static void
|
|
||||||
setup_path (void)
|
|
||||||
{
|
|
||||||
gchar *path;
|
|
||||||
gchar *installdir;
|
|
||||||
gchar *bin;
|
|
||||||
|
|
||||||
installdir = g_win32_get_package_installation_directory_of_module (NULL);
|
|
||||||
|
|
||||||
bin = g_build_filename (installdir,
|
|
||||||
"bin", NULL);
|
|
||||||
g_free (installdir);
|
|
||||||
|
|
||||||
/* Set PATH to include the pluma executable's folder */
|
|
||||||
path = g_build_path (";",
|
|
||||||
bin,
|
|
||||||
g_getenv ("PATH"),
|
|
||||||
NULL);
|
|
||||||
g_free (bin);
|
|
||||||
|
|
||||||
if (!g_setenv ("PATH", path, TRUE))
|
|
||||||
g_warning ("Could not set PATH for pluma");
|
|
||||||
|
|
||||||
g_free (path);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
|
@ -576,33 +522,6 @@ main (int argc, char *argv[])
|
||||||
g_option_context_add_group (context, gtk_get_option_group (FALSE));
|
g_option_context_add_group (context, gtk_get_option_group (FALSE));
|
||||||
g_option_context_add_group (context, egg_sm_client_get_option_group ());
|
g_option_context_add_group (context, egg_sm_client_get_option_group ());
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
setup_path ();
|
|
||||||
|
|
||||||
/* If we open pluma from a console get the stdout printing */
|
|
||||||
if (fileno (stdout) != -1 &&
|
|
||||||
_get_osfhandle (fileno (stdout)) != -1)
|
|
||||||
{
|
|
||||||
/* stdout is fine, presumably redirected to a file or pipe */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
typedef BOOL (* WINAPI AttachConsole_t) (DWORD);
|
|
||||||
|
|
||||||
AttachConsole_t p_AttachConsole =
|
|
||||||
(AttachConsole_t) GetProcAddress (GetModuleHandle ("kernel32.dll"),
|
|
||||||
"AttachConsole");
|
|
||||||
|
|
||||||
if (p_AttachConsole != NULL && p_AttachConsole (ATTACH_PARENT_PROCESS))
|
|
||||||
{
|
|
||||||
freopen ("CONOUT$", "w", stdout);
|
|
||||||
dup2 (fileno (stdout), 1);
|
|
||||||
freopen ("CONOUT$", "w", stderr);
|
|
||||||
dup2 (fileno (stderr), 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gtk_init (&argc, &argv);
|
gtk_init (&argc, &argv);
|
||||||
|
|
||||||
if (!g_option_context_parse (context, &argc, &argv, &error))
|
if (!g_option_context_parse (context, &argc, &argv, &error))
|
||||||
|
@ -616,7 +535,6 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
g_option_context_free (context);
|
g_option_context_free (context);
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
pluma_debug_message (DEBUG_APP, "Create bacon connection");
|
pluma_debug_message (DEBUG_APP, "Create bacon connection");
|
||||||
|
|
||||||
connection = bacon_message_connection_new ("pluma");
|
connection = bacon_message_connection_new ("pluma");
|
||||||
|
@ -655,7 +573,6 @@ main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
g_warning ("Cannot create the 'pluma' connection.");
|
g_warning ("Cannot create the 'pluma' connection.");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
pluma_debug_message (DEBUG_APP, "Set icon");
|
pluma_debug_message (DEBUG_APP, "Set icon");
|
||||||
|
|
||||||
|
@ -669,14 +586,8 @@ main (int argc, char *argv[])
|
||||||
icon_dir);
|
icon_dir);
|
||||||
g_free (icon_dir);
|
g_free (icon_dir);
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_X11
|
|
||||||
/* Set the associated .desktop file */
|
/* Set the associated .desktop file */
|
||||||
egg_set_desktop_file (DATADIR "/applications/pluma.desktop");
|
egg_set_desktop_file (DATADIR "/applications/pluma.desktop");
|
||||||
#else
|
|
||||||
/* manually set name and icon */
|
|
||||||
g_set_application_name("Pluma");
|
|
||||||
gtk_window_set_default_icon_name ("accessories-text-editor");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Load user preferences */
|
/* Load user preferences */
|
||||||
pluma_debug_message (DEBUG_APP, "Init prefs manager");
|
pluma_debug_message (DEBUG_APP, "Init prefs manager");
|
||||||
|
@ -690,10 +601,6 @@ main (int argc, char *argv[])
|
||||||
pluma_debug_message (DEBUG_APP, "Init session manager");
|
pluma_debug_message (DEBUG_APP, "Init session manager");
|
||||||
pluma_session_init ();
|
pluma_session_init ();
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
ige_mac_menu_set_global_key_handler_enabled (FALSE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pluma_session_is_restored ())
|
if (pluma_session_is_restored ())
|
||||||
restored = pluma_session_load ();
|
restored = pluma_session_load ();
|
||||||
|
|
||||||
|
@ -735,14 +642,9 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
pluma_debug_message (DEBUG_APP, "Start gtk-main");
|
pluma_debug_message (DEBUG_APP, "Start gtk-main");
|
||||||
|
|
||||||
#ifdef OS_OSX
|
|
||||||
pluma_osx_init(pluma_app_get_default ());
|
|
||||||
#endif
|
|
||||||
gtk_main();
|
gtk_main();
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
bacon_message_connection_free (connection);
|
bacon_message_connection_free (connection);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* We kept the original engine reference here. So let's unref it to
|
/* We kept the original engine reference here. So let's unref it to
|
||||||
* finalize it properly.
|
* finalize it properly.
|
||||||
|
|
|
@ -1,18 +1,7 @@
|
||||||
if OS_WIN32
|
|
||||||
platform_sources = eggsmclient-win32.c
|
|
||||||
platform_logout_test_ldflags = -mwindows
|
|
||||||
else
|
|
||||||
if OS_OSX
|
|
||||||
platform_defines = -xobjective-c
|
|
||||||
platform_ldflags = -framework Carbon
|
|
||||||
platform_sources = eggsmclient-osx.c
|
|
||||||
else
|
|
||||||
platform_defines = -DEGG_SM_CLIENT_BACKEND_XSMP
|
platform_defines = -DEGG_SM_CLIENT_BACKEND_XSMP
|
||||||
platform_libs = libeggdesktopfile.la
|
platform_libs = libeggdesktopfile.la
|
||||||
platform_ltlibraries = libeggdesktopfile.la
|
platform_ltlibraries = libeggdesktopfile.la
|
||||||
platform_sources = eggsmclient-xsmp.c
|
platform_sources = eggsmclient-xsmp.c
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
AM_CPPFLAGS = \
|
AM_CPPFLAGS = \
|
||||||
-DG_LOG_DOMAIN=\""EggSMClient"\" \
|
-DG_LOG_DOMAIN=\""EggSMClient"\" \
|
||||||
|
@ -45,8 +34,6 @@ libeggdesktopfile_la_SOURCES = \
|
||||||
eggdesktopfile.h
|
eggdesktopfile.h
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
eggsmclient-osx.c \
|
|
||||||
eggsmclient-win32.c \
|
|
||||||
eggsmclient-xsmp.c
|
eggsmclient-xsmp.c
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
-include $(top_srcdir)/git.mk
|
||||||
|
|
|
@ -1,235 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2007 Novell, Inc.
|
|
||||||
* Copyright (C) 2008 Red Hat, 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., 51 Franklin St, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* EggSMClientOSX
|
|
||||||
*
|
|
||||||
* For details on the OS X logout process, see:
|
|
||||||
* http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/BootProcess.html#//apple_ref/doc/uid/20002130-114618
|
|
||||||
*
|
|
||||||
* EggSMClientOSX registers for the kAEQuitApplication AppleEvent; the
|
|
||||||
* handler we register (quit_requested()) will be invoked from inside
|
|
||||||
* the quartz event-handling code (specifically, from inside
|
|
||||||
* [NSApplication nextEventMatchingMask]) when an AppleEvent arrives.
|
|
||||||
* We use AESuspendTheCurrentEvent() and AEResumeTheCurrentEvent() to
|
|
||||||
* allow asynchronous / non-main-loop-reentering processing of the
|
|
||||||
* quit request. (These are part of the Carbon framework; it doesn't
|
|
||||||
* seem to be possible to handle AppleEvents asynchronously from
|
|
||||||
* Cocoa.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "eggsmclient-private.h"
|
|
||||||
#include <glib.h>
|
|
||||||
#include <Carbon/Carbon.h>
|
|
||||||
#include <CoreServices/CoreServices.h>
|
|
||||||
|
|
||||||
#define EGG_TYPE_SM_CLIENT_OSX (egg_sm_client_osx_get_type ())
|
|
||||||
#define EGG_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSX))
|
|
||||||
#define EGG_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass))
|
|
||||||
#define EGG_IS_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_OSX))
|
|
||||||
#define EGG_IS_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_OSX))
|
|
||||||
#define EGG_SM_CLIENT_OSX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass))
|
|
||||||
|
|
||||||
typedef struct _EggSMClientOSX EggSMClientOSX;
|
|
||||||
typedef struct _EggSMClientOSXClass EggSMClientOSXClass;
|
|
||||||
|
|
||||||
struct _EggSMClientOSX {
|
|
||||||
EggSMClient parent;
|
|
||||||
|
|
||||||
AppleEvent quit_event, quit_reply;
|
|
||||||
gboolean quit_requested, quitting;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EggSMClientOSXClass
|
|
||||||
{
|
|
||||||
EggSMClientClass parent_class;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sm_client_osx_startup (EggSMClient *client,
|
|
||||||
const char *client_id);
|
|
||||||
static void sm_client_osx_will_quit (EggSMClient *client,
|
|
||||||
gboolean will_quit);
|
|
||||||
static gboolean sm_client_osx_end_session (EggSMClient *client,
|
|
||||||
EggSMClientEndStyle style,
|
|
||||||
gboolean request_confirmation);
|
|
||||||
|
|
||||||
static pascal OSErr quit_requested (const AppleEvent *, AppleEvent *, long);
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (EggSMClientOSX, egg_sm_client_osx, EGG_TYPE_SM_CLIENT)
|
|
||||||
|
|
||||||
static void
|
|
||||||
egg_sm_client_osx_init (EggSMClientOSX *osx)
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
egg_sm_client_osx_class_init (EggSMClientOSXClass *klass)
|
|
||||||
{
|
|
||||||
EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
|
|
||||||
|
|
||||||
sm_client_class->startup = sm_client_osx_startup;
|
|
||||||
sm_client_class->will_quit = sm_client_osx_will_quit;
|
|
||||||
sm_client_class->end_session = sm_client_osx_end_session;
|
|
||||||
}
|
|
||||||
|
|
||||||
EggSMClient *
|
|
||||||
egg_sm_client_osx_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (EGG_TYPE_SM_CLIENT_OSX, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sm_client_osx_startup (EggSMClient *client,
|
|
||||||
const char *client_id)
|
|
||||||
{
|
|
||||||
AEInstallEventHandler (kCoreEventClass, kAEQuitApplication,
|
|
||||||
NewAEEventHandlerUPP (quit_requested),
|
|
||||||
(long)GPOINTER_TO_SIZE (client), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
idle_quit_requested (gpointer client)
|
|
||||||
{
|
|
||||||
egg_sm_client_quit_requested (client);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static pascal OSErr
|
|
||||||
quit_requested (const AppleEvent *aevt, AppleEvent *reply, long refcon)
|
|
||||||
{
|
|
||||||
EggSMClient *client = GSIZE_TO_POINTER ((gsize)refcon);
|
|
||||||
EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon);
|
|
||||||
|
|
||||||
g_return_val_if_fail (!osx->quit_requested, userCanceledErr);
|
|
||||||
|
|
||||||
/* FIXME AEInteractWithUser? */
|
|
||||||
|
|
||||||
osx->quit_requested = TRUE;
|
|
||||||
AEDuplicateDesc (aevt, &osx->quit_event);
|
|
||||||
AEDuplicateDesc (reply, &osx->quit_reply);
|
|
||||||
AESuspendTheCurrentEvent (aevt);
|
|
||||||
|
|
||||||
/* Don't emit the "quit_requested" signal immediately, since we're
|
|
||||||
* called from a weird point in the guts of gdkeventloop-quartz.c
|
|
||||||
*/
|
|
||||||
g_idle_add (idle_quit_requested, client);
|
|
||||||
return noErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static pascal OSErr
|
|
||||||
quit_requested_resumed (const AppleEvent *aevt, AppleEvent *reply, long refcon)
|
|
||||||
{
|
|
||||||
EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon);
|
|
||||||
|
|
||||||
osx->quit_requested = FALSE;
|
|
||||||
return osx->quitting ? noErr : userCanceledErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
idle_will_quit (gpointer client)
|
|
||||||
{
|
|
||||||
EggSMClientOSX *osx = (EggSMClientOSX *)client;
|
|
||||||
|
|
||||||
/* Resume the event with a new handler that will return a value to
|
|
||||||
* the system.
|
|
||||||
*/
|
|
||||||
AEResumeTheCurrentEvent (&osx->quit_event, &osx->quit_reply,
|
|
||||||
NewAEEventHandlerUPP (quit_requested_resumed),
|
|
||||||
(long)GPOINTER_TO_SIZE (client));
|
|
||||||
AEDisposeDesc (&osx->quit_event);
|
|
||||||
AEDisposeDesc (&osx->quit_reply);
|
|
||||||
|
|
||||||
if (osx->quitting)
|
|
||||||
egg_sm_client_quit (client);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sm_client_osx_will_quit (EggSMClient *client,
|
|
||||||
gboolean will_quit)
|
|
||||||
{
|
|
||||||
EggSMClientOSX *osx = (EggSMClientOSX *)client;
|
|
||||||
|
|
||||||
g_return_if_fail (osx->quit_requested);
|
|
||||||
|
|
||||||
osx->quitting = will_quit;
|
|
||||||
|
|
||||||
/* Finish in an idle handler since the caller might have called
|
|
||||||
* egg_sm_client_will_quit() from inside the "quit_requested" signal
|
|
||||||
* handler, but may not expect the "quit" signal to arrive during
|
|
||||||
* the _will_quit() call.
|
|
||||||
*/
|
|
||||||
g_idle_add (idle_will_quit, client);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sm_client_osx_end_session (EggSMClient *client,
|
|
||||||
EggSMClientEndStyle style,
|
|
||||||
gboolean request_confirmation)
|
|
||||||
{
|
|
||||||
static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess };
|
|
||||||
AppleEvent event = { typeNull, NULL }, reply = { typeNull, NULL };
|
|
||||||
AEAddressDesc target;
|
|
||||||
AEEventID id;
|
|
||||||
OSErr err;
|
|
||||||
|
|
||||||
switch (style)
|
|
||||||
{
|
|
||||||
case EGG_SM_CLIENT_END_SESSION_DEFAULT:
|
|
||||||
case EGG_SM_CLIENT_LOGOUT:
|
|
||||||
id = request_confirmation ? kAELogOut : kAEReallyLogOut;
|
|
||||||
break;
|
|
||||||
case EGG_SM_CLIENT_REBOOT:
|
|
||||||
id = request_confirmation ? kAEShowRestartDialog : kAERestart;
|
|
||||||
break;
|
|
||||||
case EGG_SM_CLIENT_SHUTDOWN:
|
|
||||||
id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn,
|
|
||||||
sizeof (loginwindow_psn), &target);
|
|
||||||
if (err != noErr)
|
|
||||||
{
|
|
||||||
g_warning ("Could not create descriptor for loginwindow: %d", err);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = AECreateAppleEvent (kCoreEventClass, id, &target,
|
|
||||||
kAutoGenerateReturnID, kAnyTransactionID,
|
|
||||||
&event);
|
|
||||||
AEDisposeDesc (&target);
|
|
||||||
if (err != noErr)
|
|
||||||
{
|
|
||||||
g_warning ("Could not create logout AppleEvent: %d", err);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = AESend (&event, &reply, kAENoReply, kAENormalPriority,
|
|
||||||
kAEDefaultTimeout, NULL, NULL);
|
|
||||||
AEDisposeDesc (&event);
|
|
||||||
if (err == noErr)
|
|
||||||
AEDisposeDesc (&reply);
|
|
||||||
|
|
||||||
return err == noErr;
|
|
||||||
}
|
|
|
@ -33,22 +33,8 @@ void egg_sm_client_quit_requested (EggSMClient *client);
|
||||||
void egg_sm_client_quit_cancelled (EggSMClient *client);
|
void egg_sm_client_quit_cancelled (EggSMClient *client);
|
||||||
void egg_sm_client_quit (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);
|
GType egg_sm_client_xsmp_get_type (void);
|
||||||
EggSMClient *egg_sm_client_xsmp_new (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
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -1,353 +0,0 @@
|
||||||
/*
|
|
||||||
* 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., 51 Franklin St, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* EggSMClientWin32
|
|
||||||
*
|
|
||||||
* For details on the Windows XP logout process, see:
|
|
||||||
* http://msdn.microsoft.com/en-us/library/aa376876.aspx.
|
|
||||||
*
|
|
||||||
* Vista adds some new APIs which EggSMClient does not make use of; see
|
|
||||||
* http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx
|
|
||||||
*
|
|
||||||
* When shutting down, Windows sends every top-level window a
|
|
||||||
* WM_QUERYENDSESSION event, which the application must respond to
|
|
||||||
* synchronously, saying whether or not it will quit. To avoid main
|
|
||||||
* loop re-entrancy problems (and to avoid having to muck about too
|
|
||||||
* much with the guts of the gdk-win32 main loop), we watch for this
|
|
||||||
* event in a separate thread, which then signals the main thread and
|
|
||||||
* waits for the main thread to handle the event. Since we don't want
|
|
||||||
* to require g_thread_init() to be called, we do this all using
|
|
||||||
* Windows-specific thread methods.
|
|
||||||
*
|
|
||||||
* After the application handles the WM_QUERYENDSESSION event,
|
|
||||||
* Windows then sends it a WM_ENDSESSION event with a TRUE or FALSE
|
|
||||||
* parameter indicating whether the session is or is not actually
|
|
||||||
* going to end now. We handle this from the other thread as well.
|
|
||||||
*
|
|
||||||
* As mentioned above, Vista introduces several additional new APIs
|
|
||||||
* that don't fit into the (current) EggSMClient API. Windows also has
|
|
||||||
* an entirely separate shutdown-notification scheme for non-GUI apps,
|
|
||||||
* which we also don't handle here.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "eggsmclient-private.h"
|
|
||||||
#include <gdk/gdk.h>
|
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#define UNICODE
|
|
||||||
#include <windows.h>
|
|
||||||
#include <process.h>
|
|
||||||
|
|
||||||
#define EGG_TYPE_SM_CLIENT_WIN32 (egg_sm_client_win32_get_type ())
|
|
||||||
#define EGG_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32))
|
|
||||||
#define EGG_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class))
|
|
||||||
#define EGG_IS_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_WIN32))
|
|
||||||
#define EGG_IS_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_WIN32))
|
|
||||||
#define EGG_SM_CLIENT_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class))
|
|
||||||
|
|
||||||
typedef struct _EggSMClientWin32 EggSMClientWin32;
|
|
||||||
typedef struct _EggSMClientWin32Class EggSMClientWin32Class;
|
|
||||||
|
|
||||||
struct _EggSMClientWin32 {
|
|
||||||
EggSMClient parent;
|
|
||||||
|
|
||||||
HANDLE message_event, response_event;
|
|
||||||
|
|
||||||
volatile GSourceFunc event;
|
|
||||||
volatile gboolean will_quit;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EggSMClientWin32Class
|
|
||||||
{
|
|
||||||
EggSMClientClass parent_class;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sm_client_win32_startup (EggSMClient *client,
|
|
||||||
const char *client_id);
|
|
||||||
static void sm_client_win32_will_quit (EggSMClient *client,
|
|
||||||
gboolean will_quit);
|
|
||||||
static gboolean sm_client_win32_end_session (EggSMClient *client,
|
|
||||||
EggSMClientEndStyle style,
|
|
||||||
gboolean request_confirmation);
|
|
||||||
|
|
||||||
static GSource *g_win32_handle_source_add (HANDLE handle, GSourceFunc callback,
|
|
||||||
gpointer user_data);
|
|
||||||
static gboolean got_message (gpointer user_data);
|
|
||||||
static void sm_client_thread (gpointer data);
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (EggSMClientWin32, egg_sm_client_win32, EGG_TYPE_SM_CLIENT)
|
|
||||||
|
|
||||||
static void
|
|
||||||
egg_sm_client_win32_init (EggSMClientWin32 *win32)
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
egg_sm_client_win32_class_init (EggSMClientWin32Class *klass)
|
|
||||||
{
|
|
||||||
EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
|
|
||||||
|
|
||||||
sm_client_class->startup = sm_client_win32_startup;
|
|
||||||
sm_client_class->will_quit = sm_client_win32_will_quit;
|
|
||||||
sm_client_class->end_session = sm_client_win32_end_session;
|
|
||||||
}
|
|
||||||
|
|
||||||
EggSMClient *
|
|
||||||
egg_sm_client_win32_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (EGG_TYPE_SM_CLIENT_WIN32, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sm_client_win32_startup (EggSMClient *client,
|
|
||||||
const char *client_id)
|
|
||||||
{
|
|
||||||
EggSMClientWin32 *win32 = (EggSMClientWin32 *)client;
|
|
||||||
|
|
||||||
win32->message_event = CreateEvent (NULL, FALSE, FALSE, NULL);
|
|
||||||
win32->response_event = CreateEvent (NULL, FALSE, FALSE, NULL);
|
|
||||||
g_win32_handle_source_add (win32->message_event, got_message, win32);
|
|
||||||
_beginthread (sm_client_thread, 0, client);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sm_client_win32_will_quit (EggSMClient *client,
|
|
||||||
gboolean will_quit)
|
|
||||||
{
|
|
||||||
EggSMClientWin32 *win32 = (EggSMClientWin32 *)client;
|
|
||||||
|
|
||||||
win32->will_quit = will_quit;
|
|
||||||
SetEvent (win32->response_event);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
sm_client_win32_end_session (EggSMClient *client,
|
|
||||||
EggSMClientEndStyle style,
|
|
||||||
gboolean request_confirmation)
|
|
||||||
{
|
|
||||||
UINT uFlags = EWX_LOGOFF;
|
|
||||||
|
|
||||||
switch (style)
|
|
||||||
{
|
|
||||||
case EGG_SM_CLIENT_END_SESSION_DEFAULT:
|
|
||||||
case EGG_SM_CLIENT_LOGOUT:
|
|
||||||
uFlags = EWX_LOGOFF;
|
|
||||||
break;
|
|
||||||
case EGG_SM_CLIENT_REBOOT:
|
|
||||||
uFlags = EWX_REBOOT;
|
|
||||||
break;
|
|
||||||
case EGG_SM_CLIENT_SHUTDOWN:
|
|
||||||
uFlags = EWX_POWEROFF;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* There's no way to make ExitWindowsEx() show a logout dialog, so
|
|
||||||
* we ignore @request_confirmation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef SHTDN_REASON_FLAG_PLANNED
|
|
||||||
ExitWindowsEx (uFlags, SHTDN_REASON_FLAG_PLANNED);
|
|
||||||
#else
|
|
||||||
ExitWindowsEx (uFlags, 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* callbacks from logout-listener thread */
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
emit_quit_requested (gpointer smclient)
|
|
||||||
{
|
|
||||||
gdk_threads_enter ();
|
|
||||||
egg_sm_client_quit_requested (smclient);
|
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
emit_quit (gpointer smclient)
|
|
||||||
{
|
|
||||||
EggSMClientWin32 *win32 = smclient;
|
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
egg_sm_client_quit (smclient);
|
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
SetEvent (win32->response_event);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
emit_quit_cancelled (gpointer smclient)
|
|
||||||
{
|
|
||||||
EggSMClientWin32 *win32 = smclient;
|
|
||||||
|
|
||||||
gdk_threads_enter ();
|
|
||||||
egg_sm_client_quit_cancelled (smclient);
|
|
||||||
gdk_threads_leave ();
|
|
||||||
|
|
||||||
SetEvent (win32->response_event);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
got_message (gpointer smclient)
|
|
||||||
{
|
|
||||||
EggSMClientWin32 *win32 = smclient;
|
|
||||||
|
|
||||||
win32->event (win32);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Windows HANDLE GSource */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
GSource source;
|
|
||||||
GPollFD pollfd;
|
|
||||||
} GWin32HandleSource;
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
g_win32_handle_source_prepare (GSource *source, gint *timeout)
|
|
||||||
{
|
|
||||||
*timeout = -1;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
g_win32_handle_source_check (GSource *source)
|
|
||||||
{
|
|
||||||
GWin32HandleSource *hsource = (GWin32HandleSource *)source;
|
|
||||||
|
|
||||||
return hsource->pollfd.revents;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
g_win32_handle_source_dispatch (GSource *source, GSourceFunc callback, gpointer user_data)
|
|
||||||
{
|
|
||||||
return (*callback) (user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
g_win32_handle_source_finalize (GSource *source)
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
GSourceFuncs g_win32_handle_source_funcs = {
|
|
||||||
g_win32_handle_source_prepare,
|
|
||||||
g_win32_handle_source_check,
|
|
||||||
g_win32_handle_source_dispatch,
|
|
||||||
g_win32_handle_source_finalize
|
|
||||||
};
|
|
||||||
|
|
||||||
static GSource *
|
|
||||||
g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, gpointer user_data)
|
|
||||||
{
|
|
||||||
GWin32HandleSource *hsource;
|
|
||||||
GSource *source;
|
|
||||||
|
|
||||||
source = g_source_new (&g_win32_handle_source_funcs, sizeof (GWin32HandleSource));
|
|
||||||
hsource = (GWin32HandleSource *)source;
|
|
||||||
hsource->pollfd.fd = (int)handle;
|
|
||||||
hsource->pollfd.events = G_IO_IN;
|
|
||||||
hsource->pollfd.revents = 0;
|
|
||||||
g_source_add_poll (source, &hsource->pollfd);
|
|
||||||
|
|
||||||
g_source_set_callback (source, callback, user_data, NULL);
|
|
||||||
g_source_attach (source, NULL);
|
|
||||||
return source;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* logout-listener thread */
|
|
||||||
|
|
||||||
LRESULT CALLBACK
|
|
||||||
sm_client_win32_window_procedure (HWND hwnd,
|
|
||||||
UINT message,
|
|
||||||
WPARAM wParam,
|
|
||||||
LPARAM lParam)
|
|
||||||
{
|
|
||||||
EggSMClientWin32 *win32 =
|
|
||||||
(EggSMClientWin32 *)GetWindowLongPtr (hwnd, GWLP_USERDATA);
|
|
||||||
|
|
||||||
switch (message)
|
|
||||||
{
|
|
||||||
case WM_QUERYENDSESSION:
|
|
||||||
win32->event = emit_quit_requested;
|
|
||||||
SetEvent (win32->message_event);
|
|
||||||
|
|
||||||
WaitForSingleObject (win32->response_event, INFINITE);
|
|
||||||
return win32->will_quit;
|
|
||||||
|
|
||||||
case WM_ENDSESSION:
|
|
||||||
if (wParam)
|
|
||||||
{
|
|
||||||
/* The session is ending */
|
|
||||||
win32->event = emit_quit;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Nope, the session *isn't* ending */
|
|
||||||
win32->event = emit_quit_cancelled;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetEvent (win32->message_event);
|
|
||||||
WaitForSingleObject (win32->response_event, INFINITE);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return DefWindowProc (hwnd, message, wParam, lParam);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
sm_client_thread (gpointer smclient)
|
|
||||||
{
|
|
||||||
HINSTANCE instance;
|
|
||||||
WNDCLASSEXW wcl;
|
|
||||||
ATOM klass;
|
|
||||||
HWND window;
|
|
||||||
MSG msg;
|
|
||||||
|
|
||||||
instance = GetModuleHandle (NULL);
|
|
||||||
|
|
||||||
memset (&wcl, 0, sizeof (WNDCLASSEX));
|
|
||||||
wcl.cbSize = sizeof (WNDCLASSEX);
|
|
||||||
wcl.lpfnWndProc = sm_client_win32_window_procedure;
|
|
||||||
wcl.hInstance = instance;
|
|
||||||
wcl.lpszClassName = L"EggSmClientWindow";
|
|
||||||
klass = RegisterClassEx (&wcl);
|
|
||||||
|
|
||||||
window = CreateWindowEx (0, MAKEINTRESOURCE (klass),
|
|
||||||
L"EggSmClientWindow", 0,
|
|
||||||
10, 10, 50, 50, GetDesktopWindow (),
|
|
||||||
NULL, instance, NULL);
|
|
||||||
SetWindowLongPtr (window, GWLP_USERDATA, (LONG_PTR)smclient);
|
|
||||||
|
|
||||||
/* main loop */
|
|
||||||
while (GetMessage (&msg, NULL, 0, 0))
|
|
||||||
DispatchMessage (&msg);
|
|
||||||
}
|
|
|
@ -320,23 +320,7 @@ egg_sm_client_get (void)
|
||||||
if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED &&
|
if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED &&
|
||||||
!sm_client_disable)
|
!sm_client_disable)
|
||||||
{
|
{
|
||||||
#if defined (GDK_WINDOWING_WIN32)
|
|
||||||
global_client = egg_sm_client_win32_new ();
|
|
||||||
#elif defined (GDK_WINDOWING_QUARTZ)
|
|
||||||
global_client = egg_sm_client_osx_new ();
|
|
||||||
#else
|
|
||||||
/* If both D-Bus and XSMP are compiled in, try XSMP first
|
|
||||||
* (since it supports state saving) and fall back to D-Bus
|
|
||||||
* if XSMP isn't available.
|
|
||||||
*/
|
|
||||||
# ifdef EGG_SM_CLIENT_BACKEND_XSMP
|
|
||||||
global_client = egg_sm_client_xsmp_new ();
|
global_client = egg_sm_client_xsmp_new ();
|
||||||
# endif
|
|
||||||
# ifdef EGG_SM_CLIENT_BACKEND_DBUS
|
|
||||||
if (!global_client)
|
|
||||||
global_client = egg_sm_client_dbus_new ();
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fallback: create a dummy client, so that callers don't have
|
/* Fallback: create a dummy client, so that callers don't have
|
||||||
|
|
|
@ -47,9 +47,6 @@ pluma/pluma-view.c
|
||||||
pluma/pluma-window.c
|
pluma/pluma-window.c
|
||||||
plugins/changecase/changecase.pluma-plugin.desktop.in
|
plugins/changecase/changecase.pluma-plugin.desktop.in
|
||||||
plugins/changecase/pluma-changecase-plugin.c
|
plugins/changecase/pluma-changecase-plugin.c
|
||||||
plugins/checkupdate/checkupdate.pluma-plugin.desktop.in
|
|
||||||
plugins/checkupdate/pluma-check-update-plugin.c
|
|
||||||
plugins/checkupdate/org.mate.pluma.plugins.checkupdate.gschema.xml.in.in
|
|
||||||
plugins/docinfo/docinfo.pluma-plugin.desktop.in
|
plugins/docinfo/docinfo.pluma-plugin.desktop.in
|
||||||
[type: gettext/glade]plugins/docinfo/docinfo.ui
|
[type: gettext/glade]plugins/docinfo/docinfo.ui
|
||||||
plugins/docinfo/pluma-docinfo-plugin.c
|
plugins/docinfo/pluma-docinfo-plugin.c
|
||||||
|
|
|
@ -359,7 +359,6 @@ test_remote ()
|
||||||
saver_test_data_new (DEFAULT_REMOTE_URI, "hello world\n\n", NULL));
|
saver_test_data_new (DEFAULT_REMOTE_URI, "hello world\n\n", NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
static void
|
static void
|
||||||
check_permissions (GFile *file,
|
check_permissions (GFile *file,
|
||||||
guint permissions)
|
guint permissions)
|
||||||
|
@ -455,7 +454,6 @@ test_local_permissions ()
|
||||||
test_permissions (DEFAULT_LOCAL_URI, 0666);
|
test_permissions (DEFAULT_LOCAL_URI, 0666);
|
||||||
test_permissions (DEFAULT_LOCAL_URI, 0760);
|
test_permissions (DEFAULT_LOCAL_URI, 0760);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_local_unowned_directory ()
|
test_local_unowned_directory ()
|
||||||
|
@ -483,7 +481,6 @@ test_remote_unowned_directory ()
|
||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
static void
|
static void
|
||||||
test_remote_permissions ()
|
test_remote_permissions ()
|
||||||
{
|
{
|
||||||
|
@ -548,8 +545,6 @@ test_remote_unowned_group ()
|
||||||
test_unowned_group (UNOWNED_GROUP_REMOTE_URI);
|
test_unowned_group (UNOWNED_GROUP_REMOTE_URI);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
check_unowned_directory ()
|
check_unowned_directory ()
|
||||||
{
|
{
|
||||||
|
@ -665,7 +660,6 @@ check_unowned_group ()
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
if ((g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE) & ACCESSPERMS) != 0660)
|
if ((g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE) & ACCESSPERMS) != 0660)
|
||||||
{
|
{
|
||||||
g_object_unref (unowned);
|
g_object_unref (unowned);
|
||||||
|
@ -674,7 +668,6 @@ check_unowned_group ()
|
||||||
g_object_unref (info);
|
g_object_unref (info);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
g_object_unref (info);
|
g_object_unref (info);
|
||||||
g_object_unref (unowned);
|
g_object_unref (unowned);
|
||||||
|
@ -721,7 +714,6 @@ int main (int argc,
|
||||||
/* g_test_add_func ("/document-saver/remote-unowned-group", test_remote_unowned_group); */
|
/* g_test_add_func ("/document-saver/remote-unowned-group", test_remote_unowned_group); */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
g_test_add_func ("/document-saver/local-permissions", test_local_permissions);
|
g_test_add_func ("/document-saver/local-permissions", test_local_permissions);
|
||||||
|
|
||||||
if (have_unowned_group)
|
if (have_unowned_group)
|
||||||
|
@ -730,7 +722,6 @@ int main (int argc,
|
||||||
}
|
}
|
||||||
|
|
||||||
g_test_add_func ("/document-saver/remote-permissions", test_remote_permissions);
|
g_test_add_func ("/document-saver/remote-permissions", test_remote_permissions);
|
||||||
#endif
|
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
# Stuff to build the Windows installer:
|
|
||||||
EXTRA_DIST = pluma.iss.in build-installer.sh querymodules.bat
|
|
||||||
|
|
||||||
-include $(top_srcdir)/git.mk
|
|
17
win32/README
17
win32/README
|
@ -1,17 +0,0 @@
|
||||||
To create the Windows installer for pluma, ideally all you have to do is to run
|
|
||||||
the build-installer script, after having installed all dependencies to the
|
|
||||||
correct places (that means precompiled ones to /, and self-built
|
|
||||||
ones to /local/). Also, you will need to have Python at C:\Python25.
|
|
||||||
The Inno Setup compiler (iscc) needs to be in your PATH.
|
|
||||||
|
|
||||||
There are many paths hardcoded to fit my own build environment. Feel free to
|
|
||||||
generalize the script, to make it more adaptive to other environments.
|
|
||||||
|
|
||||||
The script takes an argument which is the revision number of the installer. If
|
|
||||||
it is not given, then it uses 1 as revision number. The revision number should
|
|
||||||
be increased every time the installer for the same pluma version is updated,
|
|
||||||
and be reset to 1 for a new pluma version.
|
|
||||||
|
|
||||||
Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
|
||||||
|
|
||||||
This script was based in Armin Burgmeier script for glom.
|
|
|
@ -1,258 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
echo "You need to execute this on a Windows machine within msys (http://www.mingw.org)"
|
|
||||||
echo "You also need InnoSetup (http://www.innosetup.org) with iscc in your PATH"
|
|
||||||
echo "You need to have python, pygobject, pycairo and pygtk installed into C:\\Python26"
|
|
||||||
echo "Make sure pluma and all its dependencies have been installed correctly to /local"
|
|
||||||
echo "You can specify the paths by yourself:"
|
|
||||||
echo "./build-installer.sh VERSION GTK_PREFIX PLUMA_PREFIX GTKSOURCEVIEW_PREFIX PYTHON_PREFIX MISC_PREFIX ASPELL_PREFIX WINDOWS_PREFIX"
|
|
||||||
|
|
||||||
# we assume glib, gtk etc were installed in the root while pluma and gtksourceview
|
|
||||||
# in /local
|
|
||||||
#FIXME we need to figure out a way for autodetecting this
|
|
||||||
if test "$#" = 7; then
|
|
||||||
_gtk_prefix="$2"
|
|
||||||
_gtksourceview_prefix="$3"
|
|
||||||
_pluma_prefix="$4"
|
|
||||||
_python_prefix="$5"
|
|
||||||
_misc_prefix="$6"
|
|
||||||
_aspell_prefix="$7"
|
|
||||||
_windows_prefix="$8"
|
|
||||||
else
|
|
||||||
_gtk_prefix="/c/gtk"
|
|
||||||
_gtksourceview_prefix="/usr/local"
|
|
||||||
_pluma_prefix="/usr/local"
|
|
||||||
_python_prefix="/c/Python26"
|
|
||||||
_misc_prefix="/usr"
|
|
||||||
_aspell_prefix="/c/Aspell"
|
|
||||||
_windows_prefix="/c/WINDOWS/system32"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$1" = '--help'; then
|
|
||||||
echo "VERSION: The version of the installer"
|
|
||||||
echo "GTK_PREFIX: The path for gtk, by default /c/gtk"
|
|
||||||
echo "PLUMA_PREFIX: The path for pluma, by default /usr/local"
|
|
||||||
echo "GTKSOURCEVIEW_PREFIX: The path for gtksourceview, by default /usr/local"
|
|
||||||
echo "PYTHON_PREFIX: The path for python, by default /c/Python25"
|
|
||||||
echo "MISC_PREFIX: The path for the rest of dependencies: i.e: enchant: by default /usr"
|
|
||||||
echo "ASPELL_PREFIX: The path for Aspell: by default /c/Aspell"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
revision=$1
|
|
||||||
if test "$revision" = ''; then
|
|
||||||
echo "Installer revision not provided, assuming 1"
|
|
||||||
revision=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Cleanup..."
|
|
||||||
if test -e installer; then
|
|
||||||
rm installer -Rf || exit;
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p installer || exit
|
|
||||||
|
|
||||||
echo "Copying the docs..."
|
|
||||||
mkdir -p installer/pluma/share/doc || exit
|
|
||||||
cp ../COPYING installer/pluma/share/doc || exit
|
|
||||||
cp ../AUTHORS installer/pluma/share/doc || exit
|
|
||||||
cp ../README installer/pluma/share/doc || exit
|
|
||||||
|
|
||||||
echo "Copying gtk DLL files..."
|
|
||||||
|
|
||||||
#----------------------------- gtk ------------------------------------
|
|
||||||
mkdir -p installer/gtk/bin
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/libglib-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libgio-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libgmodule-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libgobject-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libgthread-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
# TODO: We can probably omit these, as we do not use g_spawn on Windows anymore
|
|
||||||
cp "${_gtk_prefix}/bin/gspawn-win32-helper.exe" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/gspawn-win32-helper-console.exe" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/libatk-1.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libcairo-2.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libpng12-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libjpeg-7.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libtiff-3.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/libpango-1.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libpangocairo-1.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libpangowin32-1.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libpangoft2-1.0-0.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/libgdk-win32-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libgdk_pixbuf-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/libgtk-win32-2.0-0.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/libgailutil-18.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libfontconfig-1.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/libexpat-1.dll" installer/gtk/bin || exit
|
|
||||||
cp "${_gtk_prefix}/bin/freetype6.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
echo "Stripping DLL files..."
|
|
||||||
strip installer/gtk/bin/*.dll || exit
|
|
||||||
strip installer/gtk/bin/*.exe || exit
|
|
||||||
|
|
||||||
#Copy zlib1 after stripping, as we strip this library it makes crash pluma
|
|
||||||
cp "${_gtk_prefix}/bin/zlib1.dll" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
#-------------------------------- pluma ------------------------------------
|
|
||||||
echo "Copying misc DLL files..."
|
|
||||||
mkdir -p installer/pluma/bin
|
|
||||||
|
|
||||||
cp "${_misc_prefix}/bin/libgettextpo-0.dll" installer/pluma/bin || exit
|
|
||||||
|
|
||||||
cp "${_misc_prefix}/bin/libMateCORBA-2-0.dll" installer/pluma/bin || exit
|
|
||||||
cp "${_misc_prefix}/bin/libMateCORBACosNaming-2-0.dll" installer/pluma/bin || exit
|
|
||||||
cp "${_misc_prefix}/bin/libMateCORBA-imodule-2-0.dll" installer/pluma/bin || exit
|
|
||||||
|
|
||||||
cp "${_misc_prefix}/bin/libmateconf-2-4.dll" installer/pluma/bin || exit
|
|
||||||
|
|
||||||
cp "${_misc_prefix}/bin/libenchant.dll" installer/pluma/bin || exit
|
|
||||||
cp "${_misc_prefix}/bin/libsoup-2.4-1.dll" installer/pluma/bin || exit
|
|
||||||
|
|
||||||
cp "${_gtksourceview_prefix}/bin/libgtksourceview-2.0-0.dll" installer/pluma/bin || exit
|
|
||||||
|
|
||||||
echo "Stripping DLL files..."
|
|
||||||
strip installer/pluma/bin/*.dll || exit
|
|
||||||
|
|
||||||
|
|
||||||
# stripping libxml2.dll renders it unusable (although not changing it in size).
|
|
||||||
# We therefore copy it after having stripped the rest. Same with the other DLLs
|
|
||||||
# here. Perhaps those were built with MSVC.
|
|
||||||
cp "${_misc_prefix}/bin/libxml2-2.dll" installer/pluma/bin || exit
|
|
||||||
cp "${_misc_prefix}/bin/intl.dll" installer/pluma/bin || exit
|
|
||||||
cp "${_misc_prefix}/bin/iconv.dll" installer/pluma/bin || exit
|
|
||||||
|
|
||||||
|
|
||||||
echo "Copying Python..."
|
|
||||||
|
|
||||||
# TODO: Find out Windows directory somehow, we should use WINDIR substuting c:\?
|
|
||||||
cp ${_windows_prefix}/python26.dll installer/pluma/bin || exit
|
|
||||||
|
|
||||||
# We through all python modules into python/. pluma sets PYTHONPATH accordingly.
|
|
||||||
mkdir -p installer/python || exit
|
|
||||||
|
|
||||||
# Copy the dlls needed to run python
|
|
||||||
cp -R ${_python_prefix}/DLLs installer/python || exit
|
|
||||||
|
|
||||||
# TODO: Perhaps some scripts need more python modules.
|
|
||||||
mkdir -p installer/python/Lib || exit
|
|
||||||
cp ${_python_prefix}/Lib/*.py installer/python/Lib || exit
|
|
||||||
|
|
||||||
mkdir -p installer/python/Lib/encodings || exit
|
|
||||||
cp ${_python_prefix}/Lib/encodings/*.py installer/python/Lib/encodings || exit
|
|
||||||
|
|
||||||
cp -R ${_python_prefix}/Lib/site-packages installer/python/Lib || exit
|
|
||||||
|
|
||||||
cp -R ${_python_prefix}/Lib/xml installer/python/Lib || exit
|
|
||||||
|
|
||||||
mkdir -p installer/python/Lib/sqlite3 || exit
|
|
||||||
cp ${_python_prefix}/Lib/sqlite3/*.py installer/python/Lib/sqlite3 || exit
|
|
||||||
|
|
||||||
echo "Copying modules..."
|
|
||||||
|
|
||||||
cp "${_gtk_prefix}/bin/gtk-query-immodules-2.0.exe" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
mkdir -p installer/gtk/lib/gtk-2.0/2.10.0/engines || exit
|
|
||||||
cp "${_gtk_prefix}/lib/gtk-2.0/2.10.0/engines/libwimp.dll" installer/gtk/lib/gtk-2.0/2.10.0/engines || exit
|
|
||||||
strip installer/gtk/lib/gtk-2.0/2.10.0/engines/libwimp.dll || exit
|
|
||||||
|
|
||||||
mkdir -p installer/gtk/lib/gtk-2.0/2.10.0/loaders || exit
|
|
||||||
cp "${_gtk_prefix}/lib/gtk-2.0/2.10.0/loaders/"*.dll installer/gtk/lib/gtk-2.0/2.10.0/loaders || exit
|
|
||||||
strip installer/gtk/lib/gtk-2.0/2.10.0/loaders/*.dll || exit
|
|
||||||
cp "${_gtk_prefix}/bin/gdk-pixbuf-query-loaders.exe" installer/gtk/bin || exit
|
|
||||||
|
|
||||||
# Gail
|
|
||||||
mkdir -p installer/gtk/lib/gtk-2.0/modules || exit
|
|
||||||
cp "${_gtk_prefix}/lib/gtk-2.0/modules/libgail.dll" installer/gtk/lib/gtk-2.0/modules || exit
|
|
||||||
strip installer/gtk/lib/gtk-2.0/modules/libgail.dll
|
|
||||||
|
|
||||||
# TODO: Can we omit this?
|
|
||||||
mkdir -p installer/gtk/etc/gtk-2.0
|
|
||||||
#cp "${_gtk_prefix}/etc/gtk-2.0/gtk.immodules" installer/etc/gtk-2.0 || exit -1
|
|
||||||
cp "${_gtk_prefix}/etc/gtk-2.0/gdk-pixbuf.loaders" installer/gtk/etc/gtk-2.0 || exit -1
|
|
||||||
|
|
||||||
mkdir -p installer/gtk/share/themes || exit
|
|
||||||
cp -R "${_gtk_prefix}/share/themes/MS-Windows" installer/gtk/share/themes || exit
|
|
||||||
mkdir -p installer/gtk/etc/gtk-2.0 || exit
|
|
||||||
echo "gtk-theme-name = \"MS-Windows\"" > installer/gtk/etc/gtk-2.0/gtkrc || exit
|
|
||||||
|
|
||||||
# Enchant
|
|
||||||
mkdir -p installer/pluma/lib/enchant || exit
|
|
||||||
cp "${_misc_prefix}/lib/enchant/"* installer/pluma/lib/enchant || exit
|
|
||||||
strip installer/pluma/lib/enchant/*.dll || exit
|
|
||||||
mkdir -p installer/pluma/share/enchant || exit
|
|
||||||
cp "${_misc_prefix}/share/enchant/"* installer/pluma/share/enchant || exit
|
|
||||||
|
|
||||||
# Iso codes
|
|
||||||
mkdir -p installer/pluma/share/iso-codes || exit
|
|
||||||
cp "${_misc_prefix}/share/iso-codes/"* installer/pluma/share/iso-codes || exit
|
|
||||||
mkdir -p installer/pluma/share/xml/iso-codes || exit
|
|
||||||
cp "${_misc_prefix}/share/xml/iso-codes/"* installer/pluma/share/xml/iso-codes || exit
|
|
||||||
|
|
||||||
echo "Copying locales..."
|
|
||||||
|
|
||||||
# We need to keep the locale files from share/locale in share/locale and those
|
|
||||||
# from lib/locale in lib/locale:
|
|
||||||
mkdir -p installer/locale/share/ || exit
|
|
||||||
cp "${_gtk_prefix}/share/locale" installer/locale/share/ -R || exit
|
|
||||||
cp "${_pluma_prefix}/share/locale" installer/locale/share/ -R || exit
|
|
||||||
cp "${_misc_prefix}/share/locale" installer/locale/share/ -R || exit
|
|
||||||
|
|
||||||
find installer/locale/share/locale/ -type f | grep -v atk10.mo | grep -v gtk20.mo | grep -v MateConf2.mo | grep -v glib20.mo | grep -v pluma.mo | grep -v gtk20.mo | grep -v gtk20-properties.mo | grep -v gtksourceview-2.0.mo | grep -v iso_*.mo | xargs rm
|
|
||||||
find installer/locale/share/locale -type d | xargs rmdir -p --ignore-fail-on-non-empty
|
|
||||||
|
|
||||||
echo "Copying executable..."
|
|
||||||
cp "${_pluma_prefix}/bin/pluma.exe" installer/pluma/bin || exit
|
|
||||||
strip installer/pluma/bin/pluma.exe || exit
|
|
||||||
|
|
||||||
|
|
||||||
echo "Copying shared data (ui files, icons, etc.)..."
|
|
||||||
|
|
||||||
mkdir -p installer/pluma/share/gtksourceview-2.0 || exit
|
|
||||||
cp -R "${_gtksourceview_prefix}/share/gtksourceview-2.0/language-specs" installer/pluma/share/gtksourceview-2.0 || exit
|
|
||||||
cp -R "${_gtksourceview_prefix}/share/gtksourceview-2.0/styles" installer/pluma/share/gtksourceview-2.0 || exit
|
|
||||||
|
|
||||||
#GtkBuilder files and xml files
|
|
||||||
mkdir -p installer/pluma/share/pluma/ui || exit
|
|
||||||
cp "${_pluma_prefix}/share/pluma/ui/"* installer/pluma/share/pluma/ui || exit
|
|
||||||
|
|
||||||
#Icons & logo
|
|
||||||
mkdir -p installer/pluma/share/pluma/icons || exit
|
|
||||||
cp "${_pluma_prefix}/share/pluma/icons/pluma-plugin.png" installer/pluma/share/pluma/icons || exit
|
|
||||||
|
|
||||||
#Plugins
|
|
||||||
mkdir -p installer/pluma/share/pluma/plugins || exit
|
|
||||||
cp -R "${_pluma_prefix}/share/pluma/plugins/"* installer/pluma/share/pluma/plugins || exit
|
|
||||||
mkdir -p installer/pluma/lib/pluma/plugins || exit
|
|
||||||
cp -R "${_pluma_prefix}/lib/pluma/plugins/"* installer/pluma/lib/pluma/plugins || exit
|
|
||||||
mkdir -p installer/pluma/lib/pluma/plugin-loaders || exit
|
|
||||||
cp -R "${_pluma_prefix}/lib/pluma/plugin-loaders/"* installer/pluma/lib/pluma/plugin-loaders || exit
|
|
||||||
|
|
||||||
#MateConf
|
|
||||||
mkdir -p installer/pluma/etc/mateconf/schemas || exit
|
|
||||||
cp "${_pluma_prefix}/etc/mateconf/schemas/"* installer/pluma/etc/mateconf/schemas || exit
|
|
||||||
cp -R "${_misc_prefix}/etc/mateconf/"* installer/pluma/etc/mateconf/ || exit
|
|
||||||
mkdir -p installer/pluma/lib/MateConf/2
|
|
||||||
cp "${_misc_prefix}/lib/MateConf/2/"* installer/pluma/lib/MateConf/2 || exit
|
|
||||||
strip installer/pluma/lib/MateConf/2/*.dll || exit
|
|
||||||
mkdir -p installer/pluma/libexec || exit
|
|
||||||
cp "${_misc_prefix}/libexec/mateconfd-2.exe" installer/pluma/libexec || exit
|
|
||||||
|
|
||||||
#Aspell
|
|
||||||
mkdir -p installer/pluma/data || exit
|
|
||||||
cp "${_aspell_prefix}/data/"* installer/pluma/data || exit
|
|
||||||
cp "${_aspell_prefix}/bin/aspell-15.dll" installer/pluma/bin/libaspell-15.dll || exit
|
|
||||||
|
|
||||||
echo "Creating installer..."
|
|
||||||
|
|
||||||
perl -pe "s/INSTALLERREVISION/$revision/" pluma.iss > installer/pluma.iss || exit
|
|
||||||
#cp installer || exit
|
|
||||||
iscc installer/pluma.iss || exit
|
|
||||||
|
|
||||||
echo "Done"
|
|
|
@ -1,60 +0,0 @@
|
||||||
[Setup]
|
|
||||||
AppName=pluma
|
|
||||||
AppVerName=pluma @VERSION@
|
|
||||||
DefaultDirName={pf}\pluma
|
|
||||||
DefaultGroupName=pluma
|
|
||||||
UninstallDisplayIcon={app}\pluma.exe
|
|
||||||
Uninstallable=yes
|
|
||||||
AppPublisher=MATE
|
|
||||||
AppPublisherURL=http:\\www.mate-desktop.org\
|
|
||||||
AppVersion=@VERSION@
|
|
||||||
OutputBaseFilename=pluma-setup-@VERSION@-INSTALLERREVISION
|
|
||||||
LicenseFile=pluma\share\doc\COPYING
|
|
||||||
|
|
||||||
[Components]
|
|
||||||
Name: "gtk"; Description: "GTK+ runtime environment"; Types: full compact custom; Flags: fixed
|
|
||||||
Name: "main"; Description: "Pluma"; Types: full compact custom; Flags: fixed
|
|
||||||
|
|
||||||
; TODO: Enable languages separately
|
|
||||||
Name: "python"; Description: "Python runtime and modules"; Types: full compact custom; Flags: fixed
|
|
||||||
Name: "locale"; Description: "Translations"; Types: full compact custom; Flags: fixed
|
|
||||||
|
|
||||||
[Tasks]
|
|
||||||
Name: common; Description: "For all users"; Components: main; Flags: exclusive
|
|
||||||
Name: user; Description: "For the current user only"; Components: main; Flags: exclusive unchecked
|
|
||||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
|
||||||
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
|
||||||
|
|
||||||
[Icons]
|
|
||||||
; Common task icons
|
|
||||||
Name: "{commonprograms}\{groupname}\pluma"; Filename: "{app}\bin\pluma.exe"; Tasks: common
|
|
||||||
Name: "{commonprograms}\{groupname}\Uninstall pluma"; Filename: "{uninstallexe}"; Tasks: common
|
|
||||||
Name: "{commondesktop}\pluma"; Filename: "{app}\bin\pluma.exe"; Tasks: desktopicon
|
|
||||||
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\pluma"; Filename: "{app}\bin\pluma.exe"; Tasks: quicklaunchicon
|
|
||||||
|
|
||||||
; User task icons
|
|
||||||
Name: "{userprograms}\{groupname}\pluma"; Filename: "{app}\bin\pluma.exe"; Tasks: user
|
|
||||||
Name: "{userprograms}\{groupname}\Uninstall pluma"; Filename: "{uninstallexe}"; Tasks: user
|
|
||||||
|
|
||||||
[Files]
|
|
||||||
|
|
||||||
; All files
|
|
||||||
Source: "gtk\*"; DestDir: "{app}\"; Components: gtk; Flags: recursesubdirs
|
|
||||||
Source: "pluma\*"; DestDir: "{app}\"; Components: main; Flags: recursesubdirs
|
|
||||||
Source: "python\*"; DestDir: "{app}\bin"; Components: python; Flags: recursesubdirs
|
|
||||||
Source: "locale\*"; DestDir: "{app}\"; Components: locale; Flags: recursesubdirs
|
|
||||||
|
|
||||||
[Run]
|
|
||||||
Filename: "{app}\bin\querymodules.bat"; StatusMsg: "Querying modules..."; Flags: runhidden
|
|
||||||
|
|
||||||
[Code]
|
|
||||||
{ Remove generated files not generated by the installer }
|
|
||||||
|
|
||||||
// Skip Components selection, all components are required anyway
|
|
||||||
function ShouldSkipPage(CurPageID: Integer): Boolean;
|
|
||||||
begin
|
|
||||||
if CurPageID = wpSelectComponents then
|
|
||||||
Result := True
|
|
||||||
else
|
|
||||||
Result := False;
|
|
||||||
end;
|
|
|
@ -1,3 +0,0 @@
|
||||||
rem pango-querymodules.exe > ../etc/pango/pango.modules
|
|
||||||
gdk-pixbuf-query-loaders.exe > ../etc/gtk-2.0/gdk-pixbuf.loaders
|
|
||||||
gtk-query-immodules-2.0.exe > ../etc/gtk-2.0/gtk.immodules
|
|
Loading…
Reference in New Issue