diff options
author | root <root@rshg054.dnsready.net> | 2013-10-10 01:59:31 -0700 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2013-10-10 01:59:31 -0700 |
commit | 361f95d1ff881daf5f87cb14917bd524511abfc5 (patch) | |
tree | 80a94568027dded4548d525a8a3ed7621ccf325d | |
parent | 737832e1bd70820f477143512b5c89a30a6e81d0 (diff) |
Thu Oct 10 01:58:46 PDT 2013
61 files changed, 11095 insertions, 12323 deletions
diff --git a/community/avant-window-navigator/688_687.diff b/community/avant-window-navigator/688_687.diff deleted file mode 100644 index 34c5b8fa4..000000000 --- a/community/avant-window-navigator/688_687.diff +++ /dev/null @@ -1,23 +0,0 @@ -=== modified file 'libawn/awn-applet-simple.c' ---- libawn/awn-applet-simple.c 2010-01-10 14:43:43 +0000 -+++ libawn/awn-applet-simple.c 2010-04-11 21:08:28 +0000 -@@ -393,16 +393,16 @@ - GStrv states, - GStrv icon_names) - { -- gchar *applet_name; -+ gchar *applet_name=NULL; - - g_return_if_fail (AWN_IS_APPLET_SIMPLE (applet)); -- g_return_if_fail (applet_name); - g_return_if_fail (states); - g_return_if_fail (icon_names); - - g_object_get (applet, - "canonical-name",&applet_name, - NULL); -+ g_return_if_fail (applet_name); - applet->priv->last_set_icon = ICON_THEMED_MANY; - awn_themed_icon_set_size (AWN_THEMED_ICON (applet->priv->icon), - awn_applet_get_size (AWN_APPLET (applet))); - diff --git a/community/avant-window-navigator/821_820.diff b/community/avant-window-navigator/821_820.diff deleted file mode 100644 index bd8c5b279..000000000 --- a/community/avant-window-navigator/821_820.diff +++ /dev/null @@ -1,96 +0,0 @@ -=== modified file 'awn-settings/awnClass.py' ---- awn-settings/awnClass.py 2010-08-24 00:21:51 +0000 -+++ awn-settings/awnClass.py 2011-02-13 23:43:42 +0000 -@@ -53,9 +53,13 @@ - import tempfile - import dbus - --from bzrlib import branch --from bzrlib.builtins import cmd_branch, cmd_pull --from bzrlib.plugins.launchpad.lp_directory import LaunchpadDirectory -+try: -+ from bzrlib import branch -+ from bzrlib.builtins import cmd_branch, cmd_pull -+ from bzrlib.plugins.launchpad.lp_directory import LaunchpadDirectory -+ support_bzr = True -+except: -+ support_bzr = False - - defs.i18nize(globals()) - -@@ -127,8 +131,11 @@ - path: a url from a branch - return: the http format of a lp: format, or the same url - ''' -- directory = LaunchpadDirectory() -- return directory._resolve(path).replace("bzr+ssh","http") -+ if support_bzr == True: -+ directory = LaunchpadDirectory() -+ return directory._resolve(path).replace("bzr+ssh","http") -+ else: -+ return path - - def read_list(self, file_path): - ''' Read a flat file and return the content in a list -@@ -148,34 +155,44 @@ - path: the path of the branch - bzr_dir: the location of the futur tree. - ''' -- if os.path.exists(path): -- print ("Error, the path already exist") -+ if support_bzr == False: -+ print (_("Bzr support is not enable, try to install bzr")) - else: -- try: -- bzr_branch = cmd_branch() -- status = StringIO() -- status = bzr_branch._setup_outf() -- bzr_branch.run(from_location=self.lp_path_normalize(bzr_dir), to_location=path) -- except socket.gaierror: -- print 'Socket error, could not create branch.' -+ if os.path.exists(path): -+ print (_("Error, the path already exist")) -+ else: -+ try: -+ bzr_branch = cmd_branch() -+ status = StringIO() -+ status = bzr_branch._setup_outf() -+ bzr_branch.run(from_location=self.lp_path_normalize(bzr_dir), to_location=path) -+ except socket.gaierror: -+ print (_('Socket error, could not create branch.')) - - def update_branch(self, path): - ''' Update a local branch - path: Location of the branch - Return the output of the command - ''' -- bzr_pull = cmd_pull() -- status = StringIO() -- status = bzr_pull._setup_outf() -- bzr_pull.run(directory=path) -+ if support_bzr == False: -+ print (_("Bzr support is not enable, try to install bzr")) -+ else: -+ bzr_pull = cmd_pull() -+ status = StringIO() -+ status = bzr_pull._setup_outf() -+ bzr_pull.run(directory=path) - - def get_revision_from_path(self, path): - ''' Return the last revision number of the branch - specify with path parameter - ''' -- tree = branch.Branch.open(path) -- revision_number, revision_id = tree.last_revision_info() -- return revision_number -+ if support_bzr == False: -+ print (_("Bzr support is not enable, try to install bzr")) -+ return 0 -+ else: -+ tree = branch.Branch.open(path) -+ revision_number, revision_id = tree.last_revision_info() -+ return revision_number - - #Sources.list - def dict_from_sources_list(self, config=defs.HOME_CONFIG_DIR): - diff --git a/community/avant-window-navigator/824_823.diff b/community/avant-window-navigator/824_823.diff deleted file mode 100644 index 290b4ad6d..000000000 --- a/community/avant-window-navigator/824_823.diff +++ /dev/null @@ -1,40 +0,0 @@ -=== modified file 'applets/taskmanager/task-manager.c' ---- applets/taskmanager/task-manager.c 2011-01-15 16:44:44 +0000 -+++ applets/taskmanager/task-manager.c 2011-03-12 21:42:33 +0000 -@@ -1611,11 +1611,6 @@ - g_debug ("%s: Window opened: %s",__func__,wnck_window_get_name (window)); - g_debug ("xid = %lu, pid = %d",wnck_window_get_xid (window),wnck_window_get_pid (window)); - #endif -- /* -- for some reason the skip tasklist property for the taskmanager toggles briefly -- off and on in certain circumstances. Nip this in the bud. -- TODO: Investigate wth this is happening... it bothers me. -- */ - // if ( wnck_window_get_pid (window) == getpid() || - if ( g_strcmp0 (wnck_window_get_name (window),"awn-applet")==0 ) - { -@@ -1626,11 +1621,6 @@ - */ - g_signal_connect (window, "state-changed", G_CALLBACK (on_window_state_changed), manager); - -- if (wnck_window_is_skip_tasklist (window)) -- { -- return; -- } -- - g_signal_connect (window, "state-changed", - G_CALLBACK (check_attention_requested), manager); - -@@ -1798,6 +1787,11 @@ - g_return_if_fail (TASK_IS_MANAGER (manager)); - g_return_if_fail (WNCK_IS_WINDOW (window)); - -+ if (wnck_window_is_skip_tasklist(window)) -+ { -+ return; -+ } -+ - _wnck_get_wmclass (wnck_window_get_xid (window), - &res_name, &class_name); - if (get_special_wait_from_window_data (res_name, - diff --git a/community/avant-window-navigator/PKGBUILD b/community/avant-window-navigator/PKGBUILD deleted file mode 100644 index 8f8562a69..000000000 --- a/community/avant-window-navigator/PKGBUILD +++ /dev/null @@ -1,67 +0,0 @@ -# $Id: PKGBUILD 79700 2012-11-11 10:30:00Z bgyorgy $ -# Maintainer: Balló György <ballogyor+arch at gmail dot com> -# Contributor: Jaroslav Lichtblau <dragonlord@aur.archlinux.org> -# Contributor: Timm Preetz <timm@preetz.us> -# Contributor: Daniel J Griffiths <ghost1227@archlinux.us> - -pkgname=avant-window-navigator -pkgver=0.4.0 -pkgrel=13 -pkgdesc="Fully customisable dock-like window navigator for GNOME" -arch=('i686' 'x86_64') -url="https://launchpad.net/awn" -license=('GPL') -depends=('libdesktop-agnostic' 'libwnck' 'libgtop' 'gconf' 'python2-dbus' 'pygtk' 'python2-xdg' 'hicolor-icon-theme' 'xdg-utils') -makedepends=('gtk-doc' 'vala' 'intltool') -options=('!libtool') -install=$pkgname.install -source=(http://launchpad.net/awn/0.4/$pkgver/+download/$pkgname-$pkgver.tar.gz - 688_687.diff - 821_820.diff - 824_823.diff) -md5sums=('03654b45dd95cbb83fa7e112bd00523c' - '6b05ccb539f811729820d5545eb50d6e' - '2cc0ecf9fccb6e559a98003715ebf6df' - 'd068c19503b7be1868bcce5dab003628') - -build() { - cd "$srcdir/$pkgname-$pkgver" - - # Fix uninitialised pointer - # https://bugs.launchpad.net/awn/+bug/562499 - patch -Np0 -i "$srcdir/688_687.diff" - - # Remove bzr dependency - # https://bugs.launchpad.net/awn/+bug/707863 - patch -Np0 -i "$srcdir/821_820.diff" - - # Hide windows with skip taskbar state - # https://bugs.launchpad.net/awn/+bug/707863 - patch -Np0 -i "$srcdir/824_823.diff" - - # Python2 fix - sed -i 's@^#!.*python$@#!/usr/bin/python2@' awn-settings/{awnSettings.py.in,awnSettingsHelper.py} - sed -i 's/with ("python"/with ("python2"/' applet-activation/main.c - - autoreconf -fi - ./configure --prefix=/usr --sysconfdir=/etc \ - --disable-static \ - PYTHON=/usr/bin/python2 - make -} - -check() { - cd "$srcdir/$pkgname-$pkgver" - - make check -} - -package() { - cd "$srcdir/$pkgname-$pkgver" - - make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="$pkgdir" install - - install -m755 -d "$pkgdir/usr/share/gconf/schemas" - gconf-merge-schema "$pkgdir/usr/share/gconf/schemas/awn.schemas" "$pkgdir"/etc/gconf/schemas/*.schemas - rm -r "$pkgdir/etc" -} diff --git a/community/avant-window-navigator/avant-window-navigator.install b/community/avant-window-navigator/avant-window-navigator.install deleted file mode 100644 index f5473a092..000000000 --- a/community/avant-window-navigator/avant-window-navigator.install +++ /dev/null @@ -1,22 +0,0 @@ -pkgname=awn - -post_install() { - gconfpkg --install $pkgname - xdg-icon-resource forceupdate -} - -pre_upgrade() { - pre_remove $1 -} - -post_upgrade() { - post_install $1 -} - -pre_remove() { - gconfpkg --uninstall $pkgname -} - -post_remove() { - xdg-icon-resource forceupdate -} diff --git a/community/awn-extras-applets/PKGBUILD b/community/awn-extras-applets/PKGBUILD deleted file mode 100644 index 7ce9fca85..000000000 --- a/community/awn-extras-applets/PKGBUILD +++ /dev/null @@ -1,89 +0,0 @@ -# Maintainer: György Balló <ballogy@freestart.hu> -# Contributor: Biru Ionut <ionut@archlinux.ro> -# Contributor: Jonathan Liu <net147@hotmail.com> -# Contributor: Daniel J Griffiths <ghost1227@archlinux.us> - -pkgname=awn-extras-applets -_pkgname=awn-extras -pkgver=0.4.0 -pkgrel=15 -pkgdesc="Collection of applets for avant-window-navigator" -arch=('i686' 'x86_64') -url="https://launchpad.net/awn-extras" -license=('GPL') -depends=('avant-window-navigator' 'python2-notify' 'vte' 'gnome-menus' 'gnome-menus2' 'webkitgtk2') -makedepends=('intltool' 'vala') -optdepends=('python2-feedparser: comics, feeds, mail applets' - 'python2-rsvg: comics, cairo-clock, hardware-sensors applets' - 'gstreamer0.10-python: media-player, volume-control applets' - 'python2-dateutil: cairo-clock (optional), calendar applets' - 'python2-gdata: calendar applet' - 'python2-vobject: calendar applet' - 'python2-pyinotify: thinkhdaps applet (optional)' - 'python2-libgnome: stacks applet' - 'python2-gnomedesktop: stacks applet' - 'python2-wnck: slickswitcher applet' - 'fortune-mod: animal-farm applet' - 'upower: battery applet' - 'gnome-applets: cpufreq applet' - 'hddtemp: hardware-sensors applet (optional)' - 'lm_sensors: hardware-sensors applet (optional)') -options=('!libtool') -install=$pkgname.install -source=(http://launchpad.net/$_pkgname/0.4/$pkgver/+download/$_pkgname-$pkgver.tar.gz - awn-extras-libnotify0.7.patch - remove-settings-menu.patch - add-battery-upower-support.patch - fix-shinyswitcher-scrolling.patch - fix-weather-applet.patch - awn-extras-glib2.32.patch - cairo-menu-upower.patch - check-dependencies.patch) -md5sums=('b559d68cd6ad295c961c20fcc5d9f9c0' - '2df8dfd8f0f1d458c09b56983c7d049f' - '52f8ce6a4eca862b0740e29a84db8ae5' - '26b56106b63b14ba3c99f1a2e96da05d' - '755c57dfbb65a314f247277918ec95ac' - 'bc22bb3e81aca0f651ae8acee1ce2f00' - '1cfcd1e5dc92c4c7c306472d42a21c2d' - 'f9715f531947967d6549a358ea8d2979' - '8f920c7dde987d66eef7d3739df1051d') - -build() { - cd "$srcdir/$_pkgname-$pkgver" - patch -Np1 -i "$srcdir/awn-extras-libnotify0.7.patch" - patch -Np1 -i "$srcdir/remove-settings-menu.patch" - patch -Np0 -i "$srcdir/add-battery-upower-support.patch" - patch -Np0 -i "$srcdir/fix-shinyswitcher-scrolling.patch" - patch -Np1 -i "$srcdir/fix-weather-applet.patch" - patch -Np0 -i "$srcdir/awn-extras-glib2.32.patch" - patch -Np1 -i "$srcdir/cairo-menu-upower.patch" - patch -Np1 -i "$srcdir/check-dependencies.patch" - - # Python2 fix - find . -type f -name *.py | xargs sed -i 's@^#.*python$@#!/usr/bin/python2@' - sed -i 's/async(\"python \"/async(\"python2 \"/' applets/maintained/shiny-switcher/shinyswitcherapplet.c - - ./configure --prefix=/usr --sysconfdir=/etc \ - --disable-static \ - --disable-pymod-checks \ - --with-webkit \ - PYTHON=/usr/bin/python2 - make -} - -package() { - cd "$srcdir/$_pkgname-$pkgver" - - make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="$pkgdir" install - - mkdir -p "$pkgdir/usr/share/gconf/schemas" - gconf-merge-schema "$pkgdir/usr/share/gconf/schemas/awn-extras.schemas" "$pkgdir"/etc/gconf/schemas/*.schemas - rm -r "$pkgdir"/etc - - # Remove bandwidth-monitor applet, because it's not compatible with latest netstat - rm -R "$pkgdir"/usr/share/avant-window-navigator/applets/bandwidth-monitor* - - # Remove pandora applet, because gtkmozembed is not available - rm -R "$pkgdir"/usr/share/avant-window-navigator/applets/pandora* -} diff --git a/community/awn-extras-applets/add-battery-upower-support.patch b/community/awn-extras-applets/add-battery-upower-support.patch deleted file mode 100644 index 0548df758..000000000 --- a/community/awn-extras-applets/add-battery-upower-support.patch +++ /dev/null @@ -1,200 +0,0 @@ -=== modified file 'applets/maintained/battery/battery.py' ---- applets/maintained/battery/battery.py 2010-08-12 19:00:37 +0000 -+++ applets/maintained/battery/battery.py 2010-09-12 22:24:21 +0000 -@@ -1,6 +1,6 @@ - #!/usr/bin/python - # Copyright (c) 2007 - 2008 Randal Barlow <im.tehk at gmail.com> --# 2008 - 2009 onox <denkpadje@gmail.com> -+# 2008 - 2010 onox <denkpadje@gmail.com> - # - # This library is free software; you can redistribute it and/or - # modify it under the terms of the GNU Lesser General Public -@@ -223,11 +223,11 @@ - return - - charge_percentage = self.backend.get_capacity_percentage() -- -- charge_message = "Computer running on %s power" % ("AC", "battery")[self.backend.is_discharging()] -+ power_type = "AC" if self.backend.is_on_ac_power() else "battery" -+ charge_message = "Computer running on %s power" % power_type - - if self.backend.is_charged(): -- charge_message += "\nBattery charged" -+ charge_message += "\n" + "Battery charged" - icon = os.path.join(themes_dir, self.settings["theme"], "battery-charged.svg") - else: - is_charging = self.backend.is_charging() -@@ -343,6 +343,148 @@ - return self.get_remaining_capacity() <= self.get_warning_capacity() - - -+class UPowerBackend(AbstractBackend): -+ -+ """Backend that uses UPower via DBus. -+ -+ Reference: http://upower.freedesktop.org/docs/Device.html -+ -+ """ -+ -+ device_iface_name = "org.freedesktop.UPower.Device" -+ -+ devices = None -+ -+ def __init__(self): -+ self.__system_bus = dbus.SystemBus() -+ -+ self.udi = UPowerBackend.get_batteries().keys()[0] -+ self.__set_dbus_interface(self.udi) -+ -+ @staticmethod -+ def backend_useable(): -+ return dbus is not None and len(UPowerBackend.get_batteries()) > 0 -+ -+ @staticmethod -+ def get_batteries(): -+ udi_models = {} -+ -+ try: -+ system_bus = dbus.SystemBus() -+ -+ proxy = system_bus.get_object("org.freedesktop.UPower", "/org/freedesktop/UPower") -+ interface = dbus.Interface(proxy, "org.freedesktop.UPower") -+ -+ UPowerBackend.devices = list(interface.EnumerateDevices()) -+ -+ for udi in UPowerBackend.devices: -+ device_iface = UPowerBackend.__get_dbus_interface(system_bus, udi) -+ -+ # Type 2 is battery (1 is AC, 3 is UPS) -+ device_type = int(UPowerBackend.__get_property(device_iface, "Type")) -+ is_present = bool(UPowerBackend.__get_property(device_iface, "IsPresent")) -+ -+ if device_type == 2 and is_present: -+ udi_models[str(udi)] = str(UPowerBackend.__get_property(device_iface, "Model")) -+ except dbus.DBusException, e: -+ print e.message -+ finally: -+ return udi_models -+ -+ def set_active_udi(self, udi): -+ udi_models = UPowerBackend.get_batteries() -+ -+ assert udi in udi_models -+ -+ self.udi = udi -+ self.__set_dbus_interface(udi) -+ -+ @staticmethod -+ def __get_dbus_interface(system_bus, udi): -+ proxy = system_bus.get_object("org.freedesktop.UPower", udi) -+ return dbus.Interface(proxy, "org.freedesktop.DBus.Properties") -+ -+ def __set_dbus_interface(self, udi): -+ self.__battery = UPowerBackend.__get_dbus_interface(self.__system_bus, udi) -+ -+ @staticmethod -+ def __get_property(interface, property_name): -+ return interface.Get(UPowerBackend.device_iface_name, property_name) -+ -+ def get_active_udi(self): -+ return self.udi -+ -+ def is_present(self): -+ return bool(UPowerBackend.__get_property(self.__battery, "IsPresent")) -+ -+ def is_charging(self): -+ # State 1 is charging -+ return int(UPowerBackend.__get_property(self.__battery, "State")) == 1 -+ -+ def is_discharging(self): -+ # State 2 is discharging -+ return int(UPowerBackend.__get_property(self.__battery, "State")) == 2 -+ -+ def get_last_full_capacity(self): -+ # Measured in Wh -+ return int(UPowerBackend.__get_property(self.__battery, "EnergyFull")) -+ -+ def get_remaining_capacity(self): -+ # Measured in Wh -+ return int(UPowerBackend.__get_property(self.__battery, "Energy")) -+ -+ def get_charge_rate(self): -+ # Measured in W. Original value positive if being discharged, negative if being charged -+ return abs(int(UPowerBackend.__get_property(self.__battery, "EnergyRate"))) -+ -+ def get_capacity_percentage(self): -+ # Percentage in range 0 .. 100 -+ return int(UPowerBackend.__get_property(self.__battery, "Percentage")) -+ -+ def get_warning_capacity(self): -+ # Measured in Wh -+ return int(int(UPowerBackend.__get_property(self.__battery, "EnergyFullDesign")) * (warning_percentage / 100.)) -+ -+ def get_charge_time(self): -+ assert self.is_charging() -+ -+ # Charge time in seconds -+ time = int(UPowerBackend.__get_property(self.__battery, "TimeToFull")) -+ -+ if time == 0: -+ return super(UPowerBackend, self).get_charge_time() -+ -+ hours = time / 3600 -+ seconds = time % 3600 -+ return (hours, int(round(seconds / 60.0))) -+ -+ def get_remaining_time(self): -+ assert self.is_discharging() -+ -+ # Discharge time in seconds -+ time = int(UPowerBackend.__get_property(self.__battery, "TimeToEmpty")) -+ -+ if time == 0: -+ return super(UPowerBackend, self).get_discharge_time() -+ -+ hours = time / 3600 -+ seconds = time % 3600 -+ return (hours, int(round(seconds / 60.0))) -+ -+ def is_charged(self): -+ # State 4 is fully charged -+ return int(UPowerBackend.__get_property(self.__battery, "State")) == 4 -+ -+ def is_on_ac_power(self): -+ for udi in UPowerBackend.devices: -+ device_iface = UPowerBackend.__get_dbus_interface(self.__system_bus, udi) -+ -+ # Property "Online" only has a value for AC power device -+ if bool(UPowerBackend.__get_property(device_iface, "Online")): -+ return True -+ return False -+ -+ - class HalBackend(AbstractBackend): - - """Backend that uses HAL via DBus. -@@ -372,7 +514,7 @@ - return udi_models - except dbus.DBusException, e: - print e.message -- return {} -+ return udi_models - - def set_active_udi(self, udi): - udi_models = HalBackend.get_batteries() -@@ -416,8 +558,12 @@ - except dbus.DBusException: - return int(int(self.__hal_battery.GetProperty("battery.charge_level.design")) * (warning_percentage / 100.)) - -- --backends = [HalBackend] -+ def is_on_ac_power(self): -+ # TODO Should check that _all_ batteries are not discharging -+ return not self.is_discharging() -+ -+ -+backends = [UPowerBackend, HalBackend] - - - if __name__ == "__main__": - diff --git a/community/awn-extras-applets/awn-extras-applets.install b/community/awn-extras-applets/awn-extras-applets.install deleted file mode 100644 index 9f04bf6a2..000000000 --- a/community/awn-extras-applets/awn-extras-applets.install +++ /dev/null @@ -1,23 +0,0 @@ -pkgname=awn-extras - -post_install() { - gconfpkg --install $pkgname - xdg-icon-resource forceupdate -} - -pre_upgrade() { - pre_remove $1 -} - -post_upgrade() { - post_install $1 -} - - -pre_remove() { - gconfpkg --uninstall $pkgname -} - -post_remove() { - xdg-icon-resource forceupdate -} diff --git a/community/awn-extras-applets/awn-extras-glib2.32.patch b/community/awn-extras-applets/awn-extras-glib2.32.patch deleted file mode 100644 index 563d73b56..000000000 --- a/community/awn-extras-applets/awn-extras-glib2.32.patch +++ /dev/null @@ -1,226 +0,0 @@ -=== modified file 'applets/maintained/awnterm/keybinder.h' ---- applets/maintained/awnterm/keybinder.h 2009-12-04 15:32:54 +0000 -+++ applets/maintained/awnterm/keybinder.h 2012-04-28 13:17:10 +0000 -@@ -24,7 +24,7 @@ - #ifndef __AWN_KEY_BINDER_H__ - #define __AWN_KEY_BINDER_H__ - --#include <glib/gtypes.h> -+#include <glib.h> - - G_BEGIN_DECLS - - -=== modified file 'applets/maintained/notification-daemon/daemon.h' ---- applets/maintained/notification-daemon/daemon.h 2009-11-18 20:13:53 +0000 -+++ applets/maintained/notification-daemon/daemon.h 2012-04-28 13:17:10 +0000 -@@ -31,8 +31,6 @@ - - #include <libawn/awn-applet.h> - #include <libawn/awn-applet-simple.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-cairo-utils.h> - -=== modified file 'applets/maintained/notification-daemon/engines.c' ---- applets/maintained/notification-daemon/engines.c 2010-04-10 17:06:17 +0000 -+++ applets/maintained/notification-daemon/engines.c 2012-04-28 13:17:10 +0000 -@@ -38,8 +38,7 @@ - - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> -@@ -50,7 +49,6 @@ - - #include <string.h> - #include <gtk/gtk.h> --#include <glib.h> - #ifndef HAVE_GTK_URL_LABEL - #include <libsexy/sexy-url-label.h> - #endif - -=== modified file 'applets/unmaintained/awnsystemmonitor/awnsystemmonitor.h' ---- applets/unmaintained/awnsystemmonitor/awnsystemmonitor.h 2009-04-22 03:44:36 +0000 -+++ applets/unmaintained/awnsystemmonitor/awnsystemmonitor.h 2012-04-28 13:17:10 +0000 -@@ -25,7 +25,7 @@ - //#include <libawn/awn-title.h> - #include <libawn/awn-tooltip.h> - --#include <glib/gtypes.h> -+#include <glib.h> - #include <glibtop/cpu.h> - #include <gconf/gconf-client.h> - - -=== modified file 'applets/unmaintained/awnsystemmonitor/awntop_cairo_component.c' ---- applets/unmaintained/awnsystemmonitor/awntop_cairo_component.c 2010-04-01 14:25:40 +0000 -+++ applets/unmaintained/awnsystemmonitor/awntop_cairo_component.c 2012-04-28 13:17:10 +0000 -@@ -43,13 +43,11 @@ - - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - #include <gtk/gtk.h> - - - -=== modified file 'applets/unmaintained/awnsystemmonitor/cpu_component.c' ---- applets/unmaintained/awnsystemmonitor/cpu_component.c 2009-08-27 20:20:33 +0000 -+++ applets/unmaintained/awnsystemmonitor/cpu_component.c 2012-04-28 13:17:10 +0000 -@@ -18,13 +18,11 @@ - */ - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - #include <gtk/gtk.h> - #include <gdk/gdk.h> - #include <string.h> - -=== modified file 'applets/unmaintained/awnsystemmonitor/cpumetergconf.c' ---- applets/unmaintained/awnsystemmonitor/cpumetergconf.c 2009-04-22 03:44:36 +0000 -+++ applets/unmaintained/awnsystemmonitor/cpumetergconf.c 2012-04-28 13:17:10 +0000 -@@ -20,13 +20,10 @@ - * Boston, MA 02111-1307, USA. - */ - #include <string.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> - #include <gconf/gconf-value.h> - - #include "cairo-utils.h" - -=== modified file 'applets/unmaintained/awnsystemmonitor/dashboard.h' ---- applets/unmaintained/awnsystemmonitor/dashboard.h 2009-04-22 03:44:36 +0000 -+++ applets/unmaintained/awnsystemmonitor/dashboard.h 2012-04-28 13:17:10 +0000 -@@ -23,13 +23,11 @@ - - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - #include <gtk/gtk.h> - - #include <glibtop/mem.h> - -=== modified file 'applets/unmaintained/awnsystemmonitor/date_time_component.c' ---- applets/unmaintained/awnsystemmonitor/date_time_component.c 2009-07-07 20:10:17 +0000 -+++ applets/unmaintained/awnsystemmonitor/date_time_component.c 2012-04-28 13:17:10 +0000 -@@ -19,13 +19,11 @@ - - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - #include <gtk/gtk.h> - #include <gdk/gdk.h> - #include <string.h> - -=== modified file 'applets/unmaintained/awnsystemmonitor/loadavg_component.c' ---- applets/unmaintained/awnsystemmonitor/loadavg_component.c 2009-07-07 20:10:17 +0000 -+++ applets/unmaintained/awnsystemmonitor/loadavg_component.c 2012-04-28 13:17:10 +0000 -@@ -19,13 +19,11 @@ - - #include <glibtop/loadavg.h> - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - #include <gtk/gtk.h> - #include <gdk/gdk.h> - #include <string.h> - -=== modified file 'applets/unmaintained/awnsystemmonitor/sysmem_component.c' ---- applets/unmaintained/awnsystemmonitor/sysmem_component.c 2009-08-27 20:20:33 +0000 -+++ applets/unmaintained/awnsystemmonitor/sysmem_component.c 2012-04-28 13:17:10 +0000 -@@ -19,13 +19,11 @@ - - #include <glibtop/mem.h> - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - #include <gtk/gtk.h> - #include <gdk/gdk.h> - #include <string.h> - -=== modified file 'applets/unmaintained/awnsystemmonitor/uptime_component.c' ---- applets/unmaintained/awnsystemmonitor/uptime_component.c 2009-07-07 20:10:17 +0000 -+++ applets/unmaintained/awnsystemmonitor/uptime_component.c 2012-04-28 13:17:10 +0000 -@@ -1,12 +1,10 @@ - - #include <libawn/awn-applet.h> --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <gconf/gconf-value.h> - - #include <libawn/awn-dialog.h> - #include <libawn/awn-applet-simple.h> --#include <glib.h> - - #include <glibtop/uptime.h> - #include <glibtop/cpu.h> - -=== modified file 'applets/unmaintained/main-menu/applet.c' ---- applets/unmaintained/main-menu/applet.c 2011-12-28 11:09:45 +0000 -+++ applets/unmaintained/main-menu/applet.c 2012-04-28 13:17:10 +0000 -@@ -23,8 +23,7 @@ - - #include <string.h> - --#include <glib/gmacros.h> --#include <glib/gerror.h> -+#include <glib.h> - #include <glib/gi18n.h> - #include <gtk/gtk.h> - #include <libdesktop-agnostic/fdo.h> - diff --git a/community/awn-extras-applets/awn-extras-libnotify0.7.patch b/community/awn-extras-applets/awn-extras-libnotify0.7.patch deleted file mode 100644 index c552e26f2..000000000 --- a/community/awn-extras-applets/awn-extras-libnotify0.7.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur awn-extras-0.4.0.orig/applets/maintained/notification-daemon/daemon.c awn-extras-0.4.0/applets/maintained/notification-daemon/daemon.c ---- awn-extras-0.4.0.orig/applets/maintained/notification-daemon/daemon.c 2010-04-10 01:26:20.000000000 +0200 -+++ awn-extras-0.4.0/applets/maintained/notification-daemon/daemon.c 2011-12-16 00:23:45.488215715 +0100 -@@ -1487,7 +1487,7 @@ - if (fork() == 0) - { - notify_init("notify-send"); -- notify = notify_notification_new(summary, body, icon_str, NULL); -+ notify = notify_notification_new(summary, body, icon_str); - notify_notification_set_category(notify, type); - notify_notification_set_urgency(notify, urgency); - notify_notification_set_timeout(notify, expire_timeout); diff --git a/community/awn-extras-applets/cairo-menu-upower.patch b/community/awn-extras-applets/cairo-menu-upower.patch deleted file mode 100644 index 08e79a68d..000000000 --- a/community/awn-extras-applets/cairo-menu-upower.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff -Naur awn-extras-0.4.0.orig/applets/maintained/cairo-menu/gnome-menu-builder.c awn-extras-0.4.0/applets/maintained/cairo-menu/gnome-menu-builder.c ---- awn-extras-0.4.0.orig/applets/maintained/cairo-menu/gnome-menu-builder.c 2010-04-10 01:26:19.000000000 +0200 -+++ awn-extras-0.4.0/applets/maintained/cairo-menu/gnome-menu-builder.c 2012-12-29 05:46:45.971364855 +0100 -@@ -104,7 +104,7 @@ - - if (have_gnome_session_manager) - { -- add_special_item (menu,_("Logout"),"gnome-logout","gnome-session-save","--logout-dialog --gui"); -+ add_special_item (menu,_("Logout"),"gnome-logout","gnome-session-quit","--logout"); - } - else if (dbus_service_exists ("org.xfce.SessionManager") ) - { -@@ -121,35 +121,13 @@ - { - add_special_item (menu,_("Lock Screen"),"system-lock-screen","xscreensaver-command","-lock"); - } -- if (dbus_service_exists ("org.freedesktop.PowerManagement")) -- { -- if (!add_special_item (menu,_("Suspend"),"gnome-session-suspend","gnome-power-cmd","suspend")) -- { -- add_special_item (menu,_("Suspend"),"gnome-session-suspend","dbus-send","--session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend"); -- } -- -- if (!add_special_item (menu,_("Hibernate"),"gnome-session-hibernate","gnome-power-cmd","hibernate")) -- { -- add_special_item (menu,_("Hibernate"),"gnome-session-hibernate","dbus-send","--session --dest=org.freedesktop.PowerManagement --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Hibernate"); -- } - -- } -- else if (dbus_service_exists ("org.gnome.PowerManagement")) -- { -- if (!add_special_item (menu,_("Suspend"),"gnome-session-suspend","gnome-power-cmd","suspend")) -- { -- -- } -- -- if (!add_special_item (menu,_("Hibernate"),"gnome-session-hibernate","gnome-power-cmd","hibernate")) -- { -+ add_special_item (menu,_("Suspend"),"gnome-session-suspend","dbus-send","--system --dest=org.freedesktop.UPower --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/UPower org.freedesktop.UPower.Suspend"); -+ add_special_item (menu,_("Hibernate"),"gnome-session-hibernate","dbus-send","--system --dest=org.freedesktop.UPower --type=method_call --print-reply --reply-timeout=2000 /org/freedesktop/UPower org.freedesktop.UPower.Hibernate"); - -- } -- } -- - if (have_gnome_session_manager) - { -- add_special_item (menu,_("Shutdown"),"gnome-logout","gnome-session-save","--shutdown-dialog --gui"); -+ add_special_item (menu,_("Shutdown"),"gnome-shutdown","gnome-session-quit","--power-off"); - } - gtk_widget_show_all (menu); - return FALSE; diff --git a/community/awn-extras-applets/check-dependencies.patch b/community/awn-extras-applets/check-dependencies.patch deleted file mode 100644 index 959d3a113..000000000 --- a/community/awn-extras-applets/check-dependencies.patch +++ /dev/null @@ -1,71 +0,0 @@ -diff -Naur awn-extras-0.4.0.orig/applets/maintained/comics/comics.py awn-extras-0.4.0/applets/maintained/comics/comics.py ---- awn-extras-0.4.0.orig/applets/maintained/comics/comics.py 2010-03-26 17:14:53.000000000 +0100 -+++ awn-extras-0.4.0/applets/maintained/comics/comics.py 2012-11-15 17:28:52.045595715 +0100 -@@ -30,7 +30,7 @@ - from awn.extras import _ - - # Import Comics! modules, but check dependencies first --awn.check_dependencies(globals(), 'feedparser', 'pynotify') -+awn.check_dependencies(globals(), 'feedparser', 'pynotify', 'rsvg') - from pynotify import init as notify_init, Notification - - import comics_manage -diff -Naur awn-extras-0.4.0.orig/applets/maintained/media-player/media_player.py awn-extras-0.4.0/applets/maintained/media-player/media_player.py ---- awn-extras-0.4.0.orig/applets/maintained/media-player/media_player.py 2010-01-06 00:01:33.000000000 +0100 -+++ awn-extras-0.4.0/applets/maintained/media-player/media_player.py 2012-11-15 17:28:54.925659573 +0100 -@@ -17,13 +17,15 @@ - import os - import sys - -+import awn -+awn.check_dependencies(globals(), 'pygst') -+ - import pygst - pygst.require("0.10") - import gst - import gtk - import gobject - --import awn - from desktopagnostic import config - - -diff -Naur awn-extras-0.4.0.orig/applets/maintained/slickswitcher/slickswitcher.py awn-extras-0.4.0/applets/maintained/slickswitcher/slickswitcher.py ---- awn-extras-0.4.0.orig/applets/maintained/slickswitcher/slickswitcher.py 2010-04-08 14:31:25.000000000 +0200 -+++ awn-extras-0.4.0/applets/maintained/slickswitcher/slickswitcher.py 2012-11-15 17:31:32.025809983 +0100 -@@ -25,6 +25,9 @@ - import gobject - - import cairo -+ -+awn.check_dependencies(globals(), 'wnck') -+ - import drawing, switch, settings - from os.path import exists, isdir - import os -diff -Naur awn-extras-0.4.0.orig/applets/maintained/volume-control/volume-control.py awn-extras-0.4.0/applets/maintained/volume-control/volume-control.py ---- awn-extras-0.4.0.orig/applets/maintained/volume-control/volume-control.py 2010-01-06 00:01:34.000000000 +0100 -+++ awn-extras-0.4.0/applets/maintained/volume-control/volume-control.py 2012-11-15 17:28:26.368359913 +0100 -@@ -30,6 +30,9 @@ - - from awn.extras import awnlib, __version__ - -+import awn -+awn.check_dependencies(globals(), 'pygst') -+ - import pygst - pygst.require("0.10") - import gst -diff -Naur awn-extras-0.4.0.orig/applets/unmaintained/stacks/stacks_applet.py awn-extras-0.4.0/applets/unmaintained/stacks/stacks_applet.py ---- awn-extras-0.4.0.orig/applets/unmaintained/stacks/stacks_applet.py 2009-11-16 00:31:16.000000000 +0100 -+++ awn-extras-0.4.0/applets/unmaintained/stacks/stacks_applet.py 2012-11-15 17:28:41.778701431 +0100 -@@ -25,6 +25,9 @@ - import pango - import awn - import cairo -+ -+awn.check_dependencies(globals(), 'gnome.ui', 'gnomedesktop') -+ - import gnome.ui - import gnomedesktop - import time diff --git a/community/awn-extras-applets/fix-shinyswitcher-scrolling.patch b/community/awn-extras-applets/fix-shinyswitcher-scrolling.patch deleted file mode 100644 index 69dcae9c1..000000000 --- a/community/awn-extras-applets/fix-shinyswitcher-scrolling.patch +++ /dev/null @@ -1,96 +0,0 @@ -=== modified file 'applets/maintained/shiny-switcher/shinyswitcherapplet.c' ---- applets/maintained/shiny-switcher/shinyswitcherapplet.c 2010-09-12 16:15:07 +0000 -+++ applets/maintained/shiny-switcher/shinyswitcherapplet.c 2010-11-02 13:52:43 +0000 -@@ -769,7 +769,7 @@ - - - static gboolean --_scroll_event(GtkWidget *widget, GdkEventMotion *event, AwnShinySwitcher *shinyswitcher) -+_scroll_event(GtkWidget *widget, GdkEventScroll *event, AwnShinySwitcher *shinyswitcher) - { - AwnShinySwitcherPrivate * priv = GET_PRIVATE (shinyswitcher); - WnckWorkspace *cur_space = wnck_screen_get_active_workspace(priv->wnck_screen); -@@ -779,7 +779,7 @@ - { - if (event->type == GDK_SCROLL) - { -- WnckMotionDirection direction1, direction2; -+ WnckMotionDirection left, right, up, down; - - switch (priv->mousewheel) - { -@@ -787,8 +787,10 @@ - case 1: - - case 3: -- direction1 = WNCK_MOTION_LEFT; -- direction2 = WNCK_MOTION_RIGHT; -+ left = WNCK_MOTION_LEFT; -+ right = WNCK_MOTION_RIGHT; -+ up = WNCK_MOTION_UP; -+ down = WNCK_MOTION_DOWN; - break; - - case 2: -@@ -796,22 +798,52 @@ - case 4: - - default: -- direction1 = WNCK_MOTION_RIGHT; -- direction2 = WNCK_MOTION_LEFT; -- -+ left = WNCK_MOTION_RIGHT; -+ right = WNCK_MOTION_LEFT; -+ up = WNCK_MOTION_DOWN; -+ down = WNCK_MOTION_UP; - } - -- if (event->state & GDK_SHIFT_MASK) -+ if ( (event->direction == GDK_SCROLL_UP) || -+ (event->direction == GDK_SCROLL_LEFT) ) - { -- new_space = wnck_workspace_get_neighbor(cur_space, WNCK_MOTION_RIGHT); -+ new_space = wnck_workspace_get_neighbor(cur_space, left); -+ if (new_space == NULL) -+ { -+ new_space = wnck_workspace_get_neighbor(cur_space, up); -+ if (new_space) -+ { -+ for (cur_space = new_space; cur_space; ) -+ { -+ cur_space = wnck_workspace_get_neighbor(cur_space, right); -+ if (cur_space) -+ { -+ new_space = cur_space; -+ } -+ } -+ } -+ } - } - else - { -- new_space = wnck_workspace_get_neighbor(cur_space, WNCK_MOTION_LEFT); -- -+ new_space = wnck_workspace_get_neighbor(cur_space, right); -+ if (!new_space) -+ { -+ new_space = wnck_workspace_get_neighbor(cur_space, down); -+ if (new_space) -+ { -+ for (cur_space = new_space; cur_space; ) -+ { -+ cur_space = wnck_workspace_get_neighbor(cur_space, left); -+ if (cur_space) -+ { -+ new_space = cur_space; -+ } -+ } -+ } -+ } - } - } -- - if (new_space) - { - wnck_workspace_activate(new_space, event->time); /* FIXME */ - diff --git a/community/awn-extras-applets/fix-weather-applet.patch b/community/awn-extras-applets/fix-weather-applet.patch deleted file mode 100644 index 889c0f641..000000000 --- a/community/awn-extras-applets/fix-weather-applet.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff -Naur awn-extras-0.4.0.orig/applets/maintained/weather/weather.py awn-extras-0.4.0/applets/maintained/weather/weather.py ---- awn-extras-0.4.0.orig/applets/maintained/weather/weather.py 2012-03-07 00:20:03.094411287 +0100 -+++ awn-extras-0.4.0/applets/maintained/weather/weather.py 2010-03-21 13:58:03.000000000 +0100 -@@ -570,7 +570,7 @@ - - class NetworkHandler(ThreadQueue): - -- __ws_key = "&prod=xoap&par=1048871467&key=12daac2f3a67cb39&link=xoap" -+ __ws_key = "&prod=xml&par=1287722164&key=e11ec82daa20d876" - - def dict_from_xml(self, rootNode, keys, paths): - """Given an XML node, iterate over keys and paths, grabbing the -@@ -590,7 +590,7 @@ - @async_method - @network_exception - def get_locations(self, text): -- url = "http://xoap.weather.com/search/search?where=" + urllib2.quote(text) -+ url = "http://xml.weather.com/search/search?where=" + urllib2.quote(text) - with closing(urllib2.urlopen(url)) as usock: - with unlink_xml(usock) as xmldoc: - locations_list = [] -@@ -604,7 +604,7 @@ - @with_overlays - @network_exception - def get_conditions(self, location_code): -- url = "http://xoap.weather.com/weather/local/" + location_code + "?cc=*" + self.__ws_key -+ url = "http://xml.weather.com/weather/local/" + location_code + "?cc=*" + self.__ws_key - with closing(urllib2.urlopen(url)) as usock: - with unlink_xml(usock) as xmldoc: - names = ['CITY', 'SUNRISE', 'SUNSET', 'DESCRIPTION', 'CODE', 'TEMP', 'FEELSLIKE', 'BAR', 'BARDESC', 'WINDSPEED', 'WINDGUST', 'WINDDIR', 'HUMIDITY', 'MOONPHASE'] -@@ -619,7 +619,7 @@ - def get_weather_map(self, location_code): - map_url = "http://www.weather.com/outlook/travel/businesstraveler/map/%s" % location_code - with closing(urllib2.urlopen(map_url)) as usock: -- mapExp = """<IMG NAME="mapImg" SRC="([^\"]+)" WIDTH=([0-9]+) HEIGHT=([0-9]+) BORDER""" -+ mapExp = """<img name="mapImg" src="([^\"]+)" width="([0-9]+)" height="([0-9]+)" border""" - result = re.findall(mapExp, usock.read()) - if not result or len(result) != 1: - raise NetworkException("Couldn't parse weather map") -@@ -635,7 +635,7 @@ - @with_overlays - @network_exception - def get_forecast(self, location_code): -- url = "http://xoap.weather.com/weather/local/" + location_code + "?dayf=5" + self.__ws_key -+ url = "http://xml.weather.com/weather/local/" + location_code + "?dayf=5" + self.__ws_key - with closing(urllib2.urlopen(url)) as usock: - with unlink_xml(usock) as xmldoc: - try: diff --git a/community/awn-extras-applets/remove-settings-menu.patch b/community/awn-extras-applets/remove-settings-menu.patch deleted file mode 100644 index 60eeda1d5..000000000 --- a/community/awn-extras-applets/remove-settings-menu.patch +++ /dev/null @@ -1,229 +0,0 @@ -diff -Naur awn-extras-0.4.0.orig/applets/maintained/cairo-menu/gnome-menu-builder.c awn-extras-0.4.0/applets/maintained/cairo-menu/gnome-menu-builder.c ---- awn-extras-0.4.0.orig/applets/maintained/cairo-menu/gnome-menu-builder.c 2010-04-10 01:26:19.000000000 +0200 -+++ awn-extras-0.4.0/applets/maintained/cairo-menu/gnome-menu-builder.c 2011-12-16 20:34:22.612913317 +0100 -@@ -34,7 +34,6 @@ - #include "cairo-menu-applet.h" - - GMenuTree * main_menu_tree = NULL; --GMenuTree * settings_menu_tree = NULL; - - GtkWidget * menu_build (MenuInstance * instance); - static GtkWidget * submenu_build (MenuInstance * instance); -@@ -749,19 +748,10 @@ - gmenu_tree_remove_monitor (main_menu_tree,(GMenuTreeChangedFunc)_submenu_modified_cb,instance); - } - --static void --_remove_settings_submenu_cb(MenuInstance * instance,GObject *where_the_object_was) --{ -- g_debug ("%s",__func__); -- GMenuTreeDirectory *main_root; -- gmenu_tree_remove_monitor (settings_menu_tree,(GMenuTreeChangedFunc)_submenu_modified_cb,instance); --} -- - static GtkWidget * - submenu_build (MenuInstance * instance) - { - GMenuTreeDirectory *main_root; -- GMenuTreeDirectory *settings_root; - GtkWidget * menu = NULL; - /* - if the menu is set then clear any menu items (except for places or recent) -@@ -771,10 +761,6 @@ - { - main_menu_tree = gmenu_tree_lookup("applications.menu", GMENU_TREE_FLAGS_NONE); - } -- if (!settings_menu_tree) -- { -- settings_menu_tree = gmenu_tree_lookup("settings.menu", GMENU_TREE_FLAGS_NONE); -- } - g_assert (main_menu_tree); - /* - get_places_menu() and get_recent_menu() are -@@ -808,7 +794,6 @@ - main_root = gmenu_tree_get_root_directory(main_menu_tree); - g_assert (gmenu_tree_item_get_type( (GMenuTreeItem*)main_root) == GMENU_TREE_ITEM_DIRECTORY); - g_assert (main_root); -- settings_root = gmenu_tree_get_root_directory(settings_menu_tree); - if ( menu_dir = find_menu_dir (instance,main_root) ) - { - /* if instance->menu then we're refreshing in a monitor callback*/ -@@ -817,22 +802,11 @@ - menu = fill_er_up(instance,menu_dir,instance->menu); - g_object_weak_ref (G_OBJECT(menu), (GWeakNotify)_remove_main_submenu_cb,instance); - } -- else if ( settings_root && (menu_dir = find_menu_dir (instance,settings_root)) ) -- { -- gmenu_tree_remove_monitor (main_menu_tree,(GMenuTreeChangedFunc)_submenu_modified_cb,instance); -- gmenu_tree_add_monitor (main_menu_tree,(GMenuTreeChangedFunc)_submenu_modified_cb,instance); -- menu = fill_er_up(instance,menu_dir,instance->menu); -- g_object_weak_ref (G_OBJECT(menu), (GWeakNotify)_remove_settings_submenu_cb,instance); -- } - if (menu_dir) - { - gmenu_tree_item_unref(menu_dir); - } - gmenu_tree_item_unref(main_root); -- if (settings_root) -- { -- gmenu_tree_item_unref(settings_root); -- } - } - return instance->menu = menu; - } -@@ -862,10 +836,6 @@ - { - main_menu_tree = gmenu_tree_lookup("applications.menu", GMENU_TREE_FLAGS_NONE); - } -- if (!settings_menu_tree) -- { -- settings_menu_tree = gmenu_tree_lookup("settings.menu", GMENU_TREE_FLAGS_NONE); -- } - - if (main_menu_tree) - { -@@ -884,44 +854,6 @@ - menu_item = gtk_separator_menu_item_new (); - gtk_menu_shell_append(GTK_MENU_SHELL(instance->menu),menu_item); - } -- if (settings_menu_tree) -- { -- root = gmenu_tree_get_root_directory(settings_menu_tree); -- gmenu_tree_remove_monitor (settings_menu_tree,(GMenuTreeChangedFunc)_menu_modified_cb,instance); -- gmenu_tree_add_monitor (settings_menu_tree,(GMenuTreeChangedFunc)_menu_modified_cb,instance); -- if (!instance->menu) -- { -- g_debug ("%s: No applications menu????",__func__); -- instance->menu = fill_er_up(instance,root,instance->menu); -- } -- else -- { -- sub_menu = fill_er_up (instance, root,instance->menu); --#if 0 -- sub_menu = fill_er_up(instance,root,NULL); -- c = g_malloc0 (sizeof(CallbackContainer)); -- c->icon_name = g_strdup(gmenu_tree_directory_get_icon (root)); -- image = get_gtk_image (c->icon_name); -- txt = gmenu_tree_entry_get_name((GMenuTreeEntry*)root); -- menu_item = cairo_menu_item_new_with_label (txt?txt:"unknown"); -- gtk_menu_item_set_submenu (GTK_MENU_ITEM(menu_item),sub_menu); -- if (image) -- { -- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item),image); -- } -- gtk_menu_shell_append(GTK_MENU_SHELL(instance->menu),menu_item); -- c->file_path = g_strdup(gmenu_tree_directory_get_desktop_file_path (root)); -- c->display_name = g_strdup ("Settings"); -- drop_data = g_strdup_printf("cairo_menu_item_dir:///@@@%s@@@%s@@@%s\n",c->file_path,c->display_name,c->icon_name); -- cairo_menu_item_set_source (AWN_CAIRO_MENU_ITEM(menu_item),drop_data); -- g_free (drop_data); -- c->instance = instance; -- g_signal_connect (menu_item, "button-press-event",G_CALLBACK(_button_press_dir),c); -- g_object_weak_ref (G_OBJECT(menu_item),(GWeakNotify)_free_callback_container,c); --#endif -- } -- gmenu_tree_item_unref(root); -- } - - /*TODO Check to make sure it is needed. Should not be displayed if - all flags are of the NO persuasion.*/ -diff -Naur awn-extras-0.4.0.orig/applets/maintained/yama/yama.py awn-extras-0.4.0/applets/maintained/yama/yama.py ---- awn-extras-0.4.0.orig/applets/maintained/yama/yama.py 2010-03-31 16:21:24.000000000 +0200 -+++ awn-extras-0.4.0/applets/maintained/yama/yama.py 2011-12-16 20:37:48.243326388 +0100 -@@ -113,7 +113,6 @@ - - def build_menu(self): - self.applications_items = [] -- self.settings_items = [] - self.session_items = [] - - """ Applications """ -@@ -126,11 +125,6 @@ - """ Places """ - self.create_places_submenu(self.menu) - -- """ System """ -- tree = gmenu.lookup_tree("settings.menu") -- self.append_directory(tree.root, self.menu, item_list=self.settings_items) -- tree.add_monitor(self.menu_changed_cb, self.settings_items) -- - """ Session actions """ - if dbus is not None: - self.append_session_actions(self.menu) -@@ -227,7 +221,7 @@ - for i in xrange(len(items)): - items.pop().destroy() - -- index = len(self.applications_items) + 2 if items is self.settings_items else 0 # + 2 = separator + Places -+ index = len(self.applications_items) + 0 - self.append_directory(tree.root, self.menu, index=index, item_list=items) - # Refresh menu to re-initialize the widget - self.menu.show_all() -diff -Naur awn-extras-0.4.0.orig/applets/unmaintained/main-menu/applet.c awn-extras-0.4.0/applets/unmaintained/main-menu/applet.c ---- awn-extras-0.4.0.orig/applets/unmaintained/main-menu/applet.c 2009-10-27 20:45:03.000000000 +0100 -+++ awn-extras-0.4.0/applets/unmaintained/main-menu/applet.c 2011-12-16 20:27:28.792248015 +0100 -@@ -43,7 +43,6 @@ - GMenuTree *tree; - GMenuTreeDirectory *root; - GMenuTreeDirectory *apps; -- GMenuTreeDirectory *settings; - - } Menu; - -@@ -243,8 +242,6 @@ - { - GMenuTreeDirectory *temp= menu->root; - menu->root = gmenu_tree_item_get_parent (GMENU_TREE_ITEM (temp)); -- if (menu->root == menu->settings) -- menu->root = gmenu_tree_get_root_directory (menu->tree); - populate (menu); - } - -@@ -299,8 +296,6 @@ - if (app->root == GMENU_TREE_DIRECTORY(gmenu_tree_get_root_directory ((GMenuTree*)app->apps))) - { - list = g_slist_copy (apps); -- sets = g_slist_copy (gmenu_tree_directory_get_contents (app->settings)); -- list = g_slist_concat (list, sets); - list = g_slist_sort (list, (GCompareFunc)_compare); - } - else -@@ -419,13 +414,6 @@ - g_warning ("Unable to find applications.menu"); - return FALSE; - } -- app->settings = gmenu_tree_get_root_directory ( -- gmenu_tree_lookup ("settings.menu", GMENU_TREE_FLAGS_NONE)); -- if (!app->settings) -- { -- g_warning ("Unable to find settings.menu"); -- return FALSE; -- } - app->tree = (GMenuTree*)app->apps; - - app->menu = awn_applet_create_default_menu (app->applet); -diff -Naur awn-extras-0.4.0.orig/applets/unmaintained/MiMenu/menus.py awn-extras-0.4.0/applets/unmaintained/MiMenu/menus.py ---- awn-extras-0.4.0.orig/applets/unmaintained/MiMenu/menus.py 2009-08-14 14:29:59.000000000 +0200 -+++ awn-extras-0.4.0/applets/unmaintained/MiMenu/menus.py 2011-12-16 20:30:42.060104523 +0100 -@@ -12,8 +12,6 @@ - class MenuDateStore: - MENUCORE = gmenu.lookup_tree('applications.menu') - MENUROOT = MENUCORE.get_root_directory() -- SYSTEMMENUCORE = gmenu.lookup_tree('settings.menu') -- SYSTEMMENUROOT = SYSTEMMENUCORE.get_root_directory() - PATH = [] - - -diff -Naur awn-extras-0.4.0.orig/applets/unmaintained/MiMenu/mimenu.py awn-extras-0.4.0/applets/unmaintained/MiMenu/mimenu.py ---- awn-extras-0.4.0.orig/applets/unmaintained/MiMenu/mimenu.py 2009-10-27 20:45:47.000000000 +0100 -+++ awn-extras-0.4.0/applets/unmaintained/MiMenu/mimenu.py 2011-12-16 20:30:35.897158422 +0100 -@@ -69,8 +69,7 @@ - tree1.set_headers_visible (0) - tree1.append_column(column1) - tree1.append_column(column2) -- lst1,self.objlist1 = menus.get_menus(menus.data.MENUROOT, -- root2=menus.data.SYSTEMMENUROOT) -+ lst1,self.objlist1 = menus.get_menus(menus.data.MENUROOT) - model = menus.set_model(tree1,lst1,self.theme,self.location_icon) - tree1.connect('cursor_changed', self.treeclick, - tree1,self.objlist1,False) diff --git a/community/cinnamon-control-center/PKGBUILD b/community/cinnamon-control-center/PKGBUILD index 4f85c62de..5fe19130b 100644 --- a/community/cinnamon-control-center/PKGBUILD +++ b/community/cinnamon-control-center/PKGBUILD @@ -1,29 +1,39 @@ -# $Id: PKGBUILD 98187 2013-10-07 12:08:21Z jgc $ +# $Id: PKGBUILD 98410 2013-10-09 16:57:37Z faidoc $ # Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com # Based on gnome-control-center: # Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> # Jan de Groot <jgc@archlinux.org> pkgname=cinnamon-control-center -pkgver=2.0.1 +pkgver=2.0.2 pkgrel=1 pkgdesc="The Control Center for Cinnamon" arch=('i686' 'x86_64') -depends=('cinnamon' 'cheese' 'libgnomekbd' 'network-manager-applet' 'cinnamon-settings-daemon') +depends=('cinnamon' 'network-manager-applet') optdepends=('gnome-color-manager: for color management tasks') makedepends=('intltool' 'gnome-common') url="https://github.com/linuxmint/cinnamon-control-center" install=cinnamon-control-center.install license=('GPL') options=('!libtool' '!emptydirs') -source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/cinnamon-control-center/archive/$pkgver.tar.gz") -sha256sums=('2a8ea5c17e515afd47d0f76127dbc5172281ef2b6aaf8a5c800ff7079d6d80f2') +source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/cinnamon-control-center/archive/$pkgver.tar.gz" + region.patch) +sha256sums=('28318423297dd27a51a0a84d0f4b28453aca5c16ca362f7f4b56bd8e1b67b594' + '077cb8d6814c32a4df85f71c2b8fa84da25e5260263a6e0536c6e1626051f022') + +prepare() { + cd $pkgname-$pkgver + + # Fix region panel + patch -Np1 -i ../region.patch + + chmod +x autogen.sh +} build() { cd $pkgname-$pkgver - autoreconf -fi - ./configure --prefix=/usr --sysconfdir=/etc \ + ./autogen.sh --prefix=/usr --sysconfdir=/etc \ --localstatedir=/var --disable-static \ --enable-systemd \ --disable-update-mimedb diff --git a/community/cinnamon-control-center/region.patch b/community/cinnamon-control-center/region.patch new file mode 100644 index 000000000..85606dbad --- /dev/null +++ b/community/cinnamon-control-center/region.patch @@ -0,0 +1,5313 @@ +diff -uNrp a/configure.ac b/configure.ac +--- a/configure.ac 2013-08-25 14:40:14.000000000 +0100 ++++ b/configure.ac 2013-08-25 16:50:30.000000000 +0100 +@@ -82,6 +82,22 @@ else + SYSTEMD= + fi + ++# IBus support ++IBUS_REQUIRED_VERSION=1.4.2 ++ ++#AC_ARG_ENABLE(ibus, ++# AS_HELP_STRING([--disable-ibus], ++# [Disable IBus support]), ++# enable_ibus=$enableval, ++# enable_ibus=yes) ++enable_ibus=yes ++#if test "x$enable_ibus" = "xyes" ; then ++IBUS_MODULE="ibus-1.0 >= $IBUS_REQUIRED_VERSION" ++AC_DEFINE(HAVE_IBUS, 1, [Defined if IBus support is enabled]) ++#else ++# IBUS_MODULE= ++#fi ++ + dnl ============================================== + dnl Check that we meet the dependencies + dnl ============================================== +@@ -119,9 +135,10 @@ PKG_CHECK_MODULES(NETWORK_PANEL, $COMMON + PKG_CHECK_MODULES(POWER_PANEL, $COMMON_MODULES upower-glib >= 0.9.1 + cinnamon-settings-daemon >= $CSD_REQUIRED_VERSION) + PKG_CHECK_MODULES(COLOR_PANEL, $COMMON_MODULES colord >= 0.1.8) +-PKG_CHECK_MODULES(REGION_PANEL, $COMMON_MODULES libgnomekbd >= 2.91.91 ++PKG_CHECK_MODULES(REGION_PANEL, $COMMON_MODULES + polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION +- libxklavier >= 5.1 libgnomekbdui >= 2.91.91) ++ cinnamon-desktop >= $CINNAMON_DESKTOP_REQUIRED_VERSION ++ $IBUS_MODULE) + PKG_CHECK_MODULES(SCREEN_PANEL, $COMMON_MODULES) + PKG_CHECK_MODULES(SOUND_PANEL, $COMMON_MODULES libxml-2.0 + libcanberra-gtk3 >= $CANBERRA_REQUIRED_VERSION +diff -uNrp a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c +--- a/panels/region/cc-region-panel.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cc-region-panel.c 2013-09-21 13:24:15.329949897 +0100 +@@ -18,17 +18,18 @@ + * Author: Sergey Udaltsov <svu@gnome.org> + * + */ +-#include "config.h" ++ + #include "cc-region-panel.h" ++#include <config.h> + #include <gtk/gtk.h> + #include <glib/gi18n-lib.h> + +-#include "cinnamon-region-panel-xkb.h" ++#include "cinnamon-region-panel-input.h" + #include "cinnamon-region-panel-lang.h" + #include "cinnamon-region-panel-formats.h" + #include "cinnamon-region-panel-system.h" + +-G_DEFINE_DYNAMIC_TYPE (CcRegionPanel, cc_region_panel, CC_TYPE_PANEL) ++CC_PANEL_REGISTER (CcRegionPanel, cc_region_panel) + + #define REGION_PANEL_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_REGION_PANEL, CcRegionPanelPrivate)) + +@@ -48,14 +49,6 @@ enum { + SYSTEM_PAGE + }; + +- +-static gboolean +-languages_link_cb (GtkButton *button, gpointer user_data) +-{ +- g_spawn_command_line_async ("gnome-language-selector", NULL); +- return TRUE; +-} +- + static void + cc_region_panel_set_page (CcRegionPanel *panel, + const char *page) +@@ -116,13 +109,22 @@ cc_region_panel_finalize (GObject * obje + G_OBJECT_CLASS (cc_region_panel_parent_class)->finalize (object); + } + ++static const char * ++cc_region_panel_get_help_uri (CcPanel *panel) ++{ ++ return "help:gnome-help/prefs-language"; ++} ++ + static void + cc_region_panel_class_init (CcRegionPanelClass * klass) + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ CcPanelClass * panel_class = CC_PANEL_CLASS (klass); + + g_type_class_add_private (klass, sizeof (CcRegionPanelPrivate)); + ++ panel_class->get_help_uri = cc_region_panel_get_help_uri; ++ + object_class->set_property = cc_region_panel_set_property; + object_class->finalize = cc_region_panel_finalize; + +@@ -130,22 +132,14 @@ cc_region_panel_class_init (CcRegionPane + } + + static void +-cc_region_panel_class_finalize (CcRegionPanelClass * klass) +-{ +-} +- +-static void + cc_region_panel_init (CcRegionPanel * self) + { + CcRegionPanelPrivate *priv; + GtkWidget *prefs_widget; +- const char *desktop; + GError *error = NULL; + + priv = self->priv = REGION_PANEL_PRIVATE (self); + +- desktop = g_getenv ("XDG_CURRENT_DESKTOP"); +- + priv->builder = gtk_builder_new (); + gtk_builder_set_translation_domain (priv->builder, GETTEXT_PACKAGE); + gtk_builder_add_from_file (priv->builder, +@@ -157,29 +151,16 @@ cc_region_panel_init (CcRegionPanel * se + return; + } + +- prefs_widget = (GtkWidget *) gtk_builder_get_object (priv->builder, +- "region_notebook"); +- ++ prefs_widget = (GtkWidget *) gtk_builder_get_object (priv->builder, ++ "region_notebook"); + gtk_widget_set_size_request (GTK_WIDGET (prefs_widget), -1, 400); + + gtk_widget_reparent (prefs_widget, GTK_WIDGET (self)); + +- setup_xkb_tabs (priv->builder); +- +- setup_language (priv->builder); +- setup_formats (priv->builder); +- setup_system (priv->builder); +- +- /* set screen link */ +- +- GtkWidget *widget = GTK_WIDGET (gtk_builder_get_object (self->priv->builder, +- "get_languages_button")); +- +- gtk_button_set_label (GTK_BUTTON (widget), _("Get more languages...")); +- +- g_signal_connect (widget, "clicked", +- G_CALLBACK (languages_link_cb), +- self); ++ setup_input_tabs (priv->builder, self); ++ setup_language (priv->builder); ++ setup_formats (priv->builder); ++ setup_system (priv->builder); + } + + void +@@ -187,6 +168,7 @@ cc_region_panel_register (GIOModule * mo + { + bindtextdomain (GETTEXT_PACKAGE, "/usr/share/cinnamon/locale"); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); ++ + cc_region_panel_register_type (G_TYPE_MODULE (module)); + g_io_extension_point_implement (CC_SHELL_PANEL_EXTENSION_POINT, + CC_TYPE_REGION_PANEL, +diff -uNrp a/panels/region/cinnamon-region-panel-formats.h b/panels/region/cinnamon-region-panel-formats.h +--- a/panels/region/cinnamon-region-panel-formats.h 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-formats.h 2013-09-21 13:24:15.332949789 +0100 +@@ -19,8 +19,8 @@ + * 02110-1335, USA. + */ + +-#ifndef __GNOME_REGION_PANEL_FORMATS_H +-#define __GNOME_REGION_PANEL_FORMATS_H ++#ifndef __CINNAMON_REGION_PANEL_FORMATS_H ++#define __CINNAMON_REGION_PANEL_FORMATS_H + + #include <gtk/gtk.h> + +diff -uNrp a/panels/region/cinnamon-region-panel-input.c b/panels/region/cinnamon-region-panel-input.c +--- a/panels/region/cinnamon-region-panel-input.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-input.c 2013-09-21 13:24:15.338949572 +0100 +@@ -0,0 +1,1563 @@ ++/* ++ * Copyright (C) 2011 Red Hat, Inc. ++ * ++ * Written by: Matthias Clasen <mclasen@redhat.com> ++ * ++ * 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 Street - Suite 500, Boston, MA ++ * 02110-1335, USA. ++ */ ++ ++#include <config.h> ++ ++#include <string.h> ++ ++#include <glib.h> ++#include <glib/gi18n.h> ++#include <gio/gdesktopappinfo.h> ++ ++#define GNOME_DESKTOP_USE_UNSTABLE_API ++#include <libcinnamon-desktop/gnome-xkb-info.h> ++ ++#ifdef HAVE_IBUS ++#include <ibus.h> ++#endif ++ ++#include "gdm-languages.h" ++#include "cinnamon-region-panel-input.h" ++ ++#define WID(s) GTK_WIDGET(gtk_builder_get_object (builder, s)) ++ ++#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.cinnamon.desktop.input-sources" ++ ++#define KEY_CURRENT_INPUT_SOURCE "current" ++#define KEY_INPUT_SOURCES "sources" ++ ++#define INPUT_SOURCE_TYPE_XKB "xkb" ++#define INPUT_SOURCE_TYPE_IBUS "ibus" ++ ++enum { ++ NAME_COLUMN, ++ TYPE_COLUMN, ++ ID_COLUMN, ++ SETUP_COLUMN, ++ N_COLUMNS ++}; ++ ++static GSettings *input_sources_settings = NULL; ++static GnomeXkbInfo *xkb_info = NULL; ++static GtkWidget *input_chooser = NULL; /* weak pointer */ ++ ++#ifdef HAVE_IBUS ++static IBusBus *ibus = NULL; ++static GHashTable *ibus_engines = NULL; ++static GCancellable *ibus_cancellable = NULL; ++static guint shell_name_watch_id = 0; ++ ++static const gchar *supported_ibus_engines[] = { ++ /* Simplified Chinese */ ++ "pinyin", ++ "bopomofo", ++ "wubi", ++ "erbi", ++ /* Default in Fedora, where ibus-libpinyin replaces ibus-pinyin */ ++ "libpinyin", ++ "libbopomofo", ++ ++ /* Traditional Chinese */ ++ /* https://bugzilla.gnome.org/show_bug.cgi?id=680840 */ ++ "chewing", ++ "cangjie5", ++ "cangjie3", ++ "quick5", ++ "quick3", ++ "stroke5", ++ ++ /* Japanese */ ++ "anthy", ++ "mozc-jp", ++ "skk", ++ ++ /* Korean */ ++ "hangul", ++ ++ /* Thai */ ++ "m17n:th:kesmanee", ++ "m17n:th:pattachote", ++ "m17n:th:tis820", ++ ++ /* Vietnamese */ ++ "m17n:vi:tcvn", ++ "m17n:vi:telex", ++ "m17n:vi:viqr", ++ "m17n:vi:vni", ++ "Unikey", ++ ++ /* Sinhala */ ++ "m17n:si:wijesekera", ++ "m17n:si:phonetic-dynamic", ++ "m17n:si:trans", ++ "sayura", ++ ++ /* Indic */ ++ /* https://fedoraproject.org/wiki/I18N/Indic#Keyboard_Layouts */ ++ ++ /* Assamese */ ++ "m17n:as:phonetic", ++ "m17n:as:inscript", ++ "m17n:as:itrans", ++ ++ /* Bengali */ ++ "m17n:bn:inscript", ++ "m17n:bn:itrans", ++ "m17n:bn:probhat", ++ ++ /* Gujarati */ ++ "m17n:gu:inscript", ++ "m17n:gu:itrans", ++ "m17n:gu:phonetic", ++ ++ /* Hindi */ ++ "m17n:hi:inscript", ++ "m17n:hi:itrans", ++ "m17n:hi:phonetic", ++ "m17n:hi:remington", ++ "m17n:hi:typewriter", ++ "m17n:hi:vedmata", ++ ++ /* Kannada */ ++ "m17n:kn:kgp", ++ "m17n:kn:inscript", ++ "m17n:kn:itrans", ++ ++ /* Kashmiri */ ++ "m17n:ks:inscript", ++ ++ /* Maithili */ ++ "m17n:mai:inscript", ++ ++ /* Malayalam */ ++ "m17n:ml:inscript", ++ "m17n:ml:itrans", ++ "m17n:ml:mozhi", ++ "m17n:ml:swanalekha", ++ ++ /* Marathi */ ++ "m17n:mr:inscript", ++ "m17n:mr:itrans", ++ "m17n:mr:phonetic", ++ ++ /* Nepali */ ++ "m17n:ne:rom", ++ "m17n:ne:trad", ++ ++ /* Oriya */ ++ "m17n:or:inscript", ++ "m17n:or:itrans", ++ "m17n:or:phonetic", ++ ++ /* Punjabi */ ++ "m17n:pa:inscript", ++ "m17n:pa:itrans", ++ "m17n:pa:phonetic", ++ "m17n:pa:jhelum", ++ ++ /* Sanskrit */ ++ "m17n:sa:harvard-kyoto", ++ ++ /* Sindhi */ ++ "m17n:sd:inscript", ++ ++ /* Tamil */ ++ "m17n:ta:tamil99", ++ "m17n:ta:inscript", ++ "m17n:ta:itrans", ++ "m17n:ta:phonetic", ++ "m17n:ta:lk-renganathan", ++ "m17n:ta:vutam", ++ "m17n:ta:typewriter", ++ ++ /* Telugu */ ++ "m17n:te:inscript", ++ "m17n:te:apple", ++ "m17n:te:pothana", ++ "m17n:te:rts", ++ ++ /* Urdu */ ++ "m17n:ur:phonetic", ++ ++ /* Inscript2 - https://bugzilla.gnome.org/show_bug.cgi?id=684854 */ ++ "m17n:as:inscript2", ++ "m17n:bn:inscript2", ++ "m17n:brx:inscript2-deva", ++ "m17n:doi:inscript2-deva", ++ "m17n:gu:inscript2", ++ "m17n:hi:inscript2", ++ "m17n:kn:inscript2", ++ "m17n:kok:inscript2-deva", ++ "m17n:mai:inscript2", ++ "m17n:ml:inscript2", ++ "m17n:mni:inscript2-beng", ++ "m17n:mni:inscript2-mtei", ++ "m17n:mr:inscript2", ++ "m17n:ne:inscript2-deva", ++ "m17n:or:inscript2", ++ "m17n:pa:inscript2-guru", ++ "m17n:sa:inscript2", ++ "m17n:sat:inscript2-deva", ++ "m17n:sat:inscript2-olck", ++ "m17n:sd:inscript2-deva", ++ "m17n:ta:inscript2", ++ "m17n:te:inscript2", ++ ++ /* No corresponding XKB map available for the languages */ ++ ++ /* Chinese Yi */ ++ "m17n:ii:phonetic", ++ ++ /* Tai-Viet */ ++ "m17n:tai:sonla", ++ ++ /* Kazakh in Arabic script */ ++ "m17n:kk:arabic", ++ ++ /* Yiddish */ ++ "m17n:yi:yivo", ++ ++ /* Canadian Aboriginal languages */ ++ "m17n:ath:phonetic", ++ "m17n:bla:phonetic", ++ "m17n:cr:western", ++ "m17n:iu:phonetic", ++ "m17n:nsk:phonetic", ++ "m17n:oj:phonetic", ++ ++ /* Non-trivial engines, like transliteration-based instead of ++ keymap-based. Confirmation needed that the engines below are ++ actually used by local language users. */ ++ ++ /* Tibetan */ ++ "m17n:bo:ewts", ++ "m17n:bo:tcrc", ++ "m17n:bo:wylie", ++ ++ /* Esperanto */ ++ "m17n:eo:h-f", ++ "m17n:eo:h", ++ "m17n:eo:plena", ++ "m17n:eo:q", ++ "m17n:eo:vi", ++ "m17n:eo:x", ++ ++ /* Amharic */ ++ "m17n:am:sera", ++ ++ /* Russian */ ++ "m17n:ru:translit", ++ ++ /* Classical Greek */ ++ "m17n:grc:mizuochi", ++ ++ /* Lao */ ++ "m17n:lo:lrt", ++ ++ /* Postfix modifier input methods */ ++ "m17n:da:post", ++ "m17n:sv:post", ++ NULL ++}; ++#endif /* HAVE_IBUS */ ++ ++static void populate_model (GtkListStore *store, ++ GtkListStore *active_sources_store); ++static GtkWidget *input_chooser_new (GtkWindow *main_window, ++ GtkListStore *active_sources); ++static gboolean input_chooser_get_selected (GtkWidget *chooser, ++ GtkTreeModel **model, ++ GtkTreeIter *iter); ++static GtkTreeModel *tree_view_get_actual_model (GtkTreeView *tv); ++ ++static gboolean ++strv_contains (const gchar * const *strv, ++ const gchar *str) ++{ ++ const gchar * const *p = strv; ++ for (p = strv; *p; p++) ++ if (g_strcmp0 (*p, str) == 0) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++#ifdef HAVE_IBUS ++static void ++clear_ibus (void) ++{ ++ if (shell_name_watch_id > 0) ++ { ++ g_bus_unwatch_name (shell_name_watch_id); ++ shell_name_watch_id = 0; ++ } ++ g_cancellable_cancel (ibus_cancellable); ++ g_clear_object (&ibus_cancellable); ++ g_clear_pointer (&ibus_engines, g_hash_table_destroy); ++ g_clear_object (&ibus); ++} ++ ++static gchar * ++engine_get_display_name (IBusEngineDesc *engine_desc) ++{ ++ const gchar *name; ++ const gchar *language_code; ++ const gchar *language; ++ gchar *display_name; ++ ++ name = ibus_engine_desc_get_longname (engine_desc); ++ language_code = ibus_engine_desc_get_language (engine_desc); ++ language = ibus_get_language_name (language_code); ++ ++ display_name = g_strdup_printf ("%s (%s)", language, name); ++ ++ return display_name; ++} ++ ++static GDesktopAppInfo * ++setup_app_info_for_id (const gchar *id) ++{ ++ GDesktopAppInfo *app_info; ++ gchar *desktop_file_name; ++ gchar **strv; ++ ++ strv = g_strsplit (id, ":", 2); ++ desktop_file_name = g_strdup_printf ("ibus-setup-%s.desktop", strv[0]); ++ g_strfreev (strv); ++ ++ app_info = g_desktop_app_info_new (desktop_file_name); ++ g_free (desktop_file_name); ++ ++ return app_info; ++} ++ ++static void ++input_chooser_repopulate (GtkListStore *active_sources_store) ++{ ++ GtkBuilder *builder; ++ GtkListStore *model; ++ ++ if (!input_chooser) ++ return; ++ ++ builder = g_object_get_data (G_OBJECT (input_chooser), "builder"); ++ model = GTK_LIST_STORE (gtk_builder_get_object (builder, "input_source_model")); ++ ++ gtk_list_store_clear (model); ++ populate_model (model, active_sources_store); ++} ++ ++static void ++update_ibus_active_sources (GtkBuilder *builder) ++{ ++ GtkTreeView *tv; ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ gchar *type, *id; ++ gboolean ret; ++ ++ tv = GTK_TREE_VIEW (WID ("active_input_sources")); ++ model = tree_view_get_actual_model (tv); ++ ++ ret = gtk_tree_model_get_iter_first (model, &iter); ++ while (ret) ++ { ++ gtk_tree_model_get (model, &iter, ++ TYPE_COLUMN, &type, ++ ID_COLUMN, &id, ++ -1); ++ ++ if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) ++ { ++ IBusEngineDesc *engine_desc = NULL; ++ GDesktopAppInfo *app_info = NULL; ++ gchar *display_name = NULL; ++ ++ engine_desc = g_hash_table_lookup (ibus_engines, id); ++ if (engine_desc) ++ { ++ display_name = engine_get_display_name (engine_desc); ++ app_info = setup_app_info_for_id (id); ++ ++ gtk_list_store_set (GTK_LIST_STORE (model), &iter, ++ NAME_COLUMN, display_name, ++ SETUP_COLUMN, app_info, ++ -1); ++ g_free (display_name); ++ if (app_info) ++ g_object_unref (app_info); ++ } ++ } ++ ++ g_free (type); ++ g_free (id); ++ ++ ret = gtk_tree_model_iter_next (model, &iter); ++ } ++ ++ input_chooser_repopulate (GTK_LIST_STORE (model)); ++} ++ ++static void ++fetch_ibus_engines_result (GObject *object, ++ GAsyncResult *result, ++ GtkBuilder *builder) ++{ ++ gboolean show_all_sources; ++ GList *list, *l; ++ GError *error; ++ ++ error = NULL; ++ list = ibus_bus_list_engines_async_finish (ibus, result, &error); ++ ++ g_clear_object (&ibus_cancellable); ++ ++ if (!list && error) ++ { ++ g_warning ("Couldn't finish IBus request: %s", error->message); ++ g_error_free (error); ++ return; ++ } ++ ++ show_all_sources = g_settings_get_boolean (input_sources_settings, "show-all-sources"); ++ ++ /* Maps engine ids to engine description objects */ ++ ibus_engines = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); ++ ++ for (l = list; l; l = l->next) ++ { ++ IBusEngineDesc *engine = l->data; ++ const gchar *engine_id = ibus_engine_desc_get_name (engine); ++ ++ if (show_all_sources || strv_contains (supported_ibus_engines, engine_id)) ++ g_hash_table_replace (ibus_engines, (gpointer)engine_id, engine); ++ else ++ g_object_unref (engine); ++ } ++ g_list_free (list); ++ ++ update_ibus_active_sources (builder); ++} ++ ++static void ++fetch_ibus_engines (GtkBuilder *builder) ++{ ++ ibus_cancellable = g_cancellable_new (); ++ ++ ibus_bus_list_engines_async (ibus, ++ -1, ++ ibus_cancellable, ++ (GAsyncReadyCallback)fetch_ibus_engines_result, ++ builder); ++ ++ /* We've got everything we needed, don't want to be called again. */ ++ g_signal_handlers_disconnect_by_func (ibus, fetch_ibus_engines, builder); ++} ++ ++static void ++maybe_start_ibus (void) ++{ ++ /* IBus doesn't export API in the session bus. The only thing ++ * we have there is a well known name which we can use as a ++ * sure-fire way to activate it. */ ++ g_bus_unwatch_name (g_bus_watch_name (G_BUS_TYPE_SESSION, ++ IBUS_SERVICE_IBUS, ++ G_BUS_NAME_WATCHER_FLAGS_AUTO_START, ++ NULL, ++ NULL, ++ NULL, ++ NULL)); ++} ++ ++static void ++on_shell_appeared (GDBusConnection *connection, ++ const gchar *name, ++ const gchar *name_owner, ++ gpointer data) ++{ ++ GtkBuilder *builder = data; ++ ++ if (!ibus) ++ { ++ ibus = ibus_bus_new (); ++ if (ibus_bus_is_connected (ibus)) ++ fetch_ibus_engines (builder); ++ else ++ g_signal_connect_swapped (ibus, "connected", ++ G_CALLBACK (fetch_ibus_engines), builder); ++ } ++ maybe_start_ibus (); ++} ++#endif /* HAVE_IBUS */ ++ ++static gboolean ++add_source_to_table (GtkTreeModel *model, ++ GtkTreePath *path, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ GHashTable *hash = data; ++ gchar *type; ++ gchar *id; ++ ++ gtk_tree_model_get (model, iter, ++ TYPE_COLUMN, &type, ++ ID_COLUMN, &id, ++ -1); ++ ++ g_hash_table_add (hash, g_strconcat (type, id, NULL)); ++ ++ g_free (type); ++ g_free (id); ++ ++ return FALSE; ++} ++ ++static void ++populate_model (GtkListStore *store, ++ GtkListStore *active_sources_store) ++{ ++ GHashTable *active_sources_table; ++ GtkTreeIter iter; ++ const gchar *name; ++ GList *sources, *tmp; ++ gchar *source_id = NULL; ++ ++ active_sources_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); ++ ++ gtk_tree_model_foreach (GTK_TREE_MODEL (active_sources_store), ++ add_source_to_table, ++ active_sources_table); ++ ++ sources = gnome_xkb_info_get_all_layouts (xkb_info); ++ ++ for (tmp = sources; tmp; tmp = tmp->next) ++ { ++ g_free (source_id); ++ source_id = g_strconcat (INPUT_SOURCE_TYPE_XKB, tmp->data, NULL); ++ ++ if (g_hash_table_contains (active_sources_table, source_id)) ++ continue; ++ ++ gnome_xkb_info_get_layout_info (xkb_info, (const gchar *)tmp->data, ++ &name, NULL, NULL, NULL); ++ ++ gtk_list_store_append (store, &iter); ++ gtk_list_store_set (store, &iter, ++ NAME_COLUMN, name, ++ TYPE_COLUMN, INPUT_SOURCE_TYPE_XKB, ++ ID_COLUMN, tmp->data, ++ -1); ++ } ++ g_free (source_id); ++ ++ g_list_free (sources); ++ ++#ifdef HAVE_IBUS ++ if (ibus_engines) ++ { ++ gchar *display_name; ++ ++ sources = g_hash_table_get_keys (ibus_engines); ++ ++ source_id = NULL; ++ for (tmp = sources; tmp; tmp = tmp->next) ++ { ++ g_free (source_id); ++ source_id = g_strconcat (INPUT_SOURCE_TYPE_IBUS, tmp->data, NULL); ++ ++ if (g_hash_table_contains (active_sources_table, source_id)) ++ continue; ++ ++ display_name = engine_get_display_name (g_hash_table_lookup (ibus_engines, tmp->data)); ++ ++ gtk_list_store_append (store, &iter); ++ gtk_list_store_set (store, &iter, ++ NAME_COLUMN, display_name, ++ TYPE_COLUMN, INPUT_SOURCE_TYPE_IBUS, ++ ID_COLUMN, tmp->data, ++ -1); ++ g_free (display_name); ++ } ++ g_free (source_id); ++ ++ g_list_free (sources); ++ } ++#endif ++ ++ g_hash_table_destroy (active_sources_table); ++} ++ ++static void ++populate_with_active_sources (GtkListStore *store) ++{ ++ GVariant *sources; ++ GVariantIter iter; ++ const gchar *name; ++ const gchar *type; ++ const gchar *id; ++ gchar *display_name; ++ GDesktopAppInfo *app_info; ++ GtkTreeIter tree_iter; ++ ++ sources = g_settings_get_value (input_sources_settings, KEY_INPUT_SOURCES); ++ ++ g_variant_iter_init (&iter, sources); ++ while (g_variant_iter_next (&iter, "(&s&s)", &type, &id)) ++ { ++ display_name = NULL; ++ app_info = NULL; ++ ++ if (g_str_equal (type, INPUT_SOURCE_TYPE_XKB)) ++ { ++ gnome_xkb_info_get_layout_info (xkb_info, id, &name, NULL, NULL, NULL); ++ if (!name) ++ { ++ g_warning ("Couldn't find XKB input source '%s'", id); ++ continue; ++ } ++ display_name = g_strdup (name); ++ } ++ else if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) ++ { ++#ifdef HAVE_IBUS ++ IBusEngineDesc *engine_desc = NULL; ++ ++ if (ibus_engines) ++ engine_desc = g_hash_table_lookup (ibus_engines, id); ++ ++ if (engine_desc) ++ { ++ display_name = engine_get_display_name (engine_desc); ++ app_info = setup_app_info_for_id (id); ++ } ++#else ++ g_warning ("IBus input source type specified but IBus support was not compiled"); ++ continue; ++#endif ++ } ++ else ++ { ++ g_warning ("Unknown input source type '%s'", type); ++ continue; ++ } ++ ++ gtk_list_store_append (store, &tree_iter); ++ gtk_list_store_set (store, &tree_iter, ++ NAME_COLUMN, display_name, ++ TYPE_COLUMN, type, ++ ID_COLUMN, id, ++ SETUP_COLUMN, app_info, ++ -1); ++ g_free (display_name); ++ if (app_info) ++ g_object_unref (app_info); ++ } ++ ++ g_variant_unref (sources); ++} ++ ++static void ++update_configuration (GtkTreeModel *model) ++{ ++ GtkTreeIter iter; ++ gchar *type; ++ gchar *id; ++ GVariantBuilder builder; ++ GVariant *old_sources; ++ const gchar *old_current_type; ++ const gchar *old_current_id; ++ guint old_current_index; ++ guint old_n_sources; ++ guint index; ++ ++ old_sources = g_settings_get_value (input_sources_settings, KEY_INPUT_SOURCES); ++ old_current_index = g_settings_get_uint (input_sources_settings, KEY_CURRENT_INPUT_SOURCE); ++ old_n_sources = g_variant_n_children (old_sources); ++ ++ if (old_n_sources > 0 && old_current_index < old_n_sources) ++ { ++ g_variant_get_child (old_sources, ++ old_current_index, ++ "(&s&s)", ++ &old_current_type, ++ &old_current_id); ++ } ++ else ++ { ++ old_current_type = ""; ++ old_current_id = ""; ++ } ++ ++ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)")); ++ index = 0; ++ gtk_tree_model_get_iter_first (model, &iter); ++ do ++ { ++ gtk_tree_model_get (model, &iter, ++ TYPE_COLUMN, &type, ++ ID_COLUMN, &id, ++ -1); ++ if (index != old_current_index && ++ g_str_equal (type, old_current_type) && ++ g_str_equal (id, old_current_id)) ++ { ++ g_settings_set_uint (input_sources_settings, KEY_CURRENT_INPUT_SOURCE, index); ++ } ++ g_variant_builder_add (&builder, "(ss)", type, id); ++ g_free (type); ++ g_free (id); ++ index += 1; ++ } ++ while (gtk_tree_model_iter_next (model, &iter)); ++ ++ g_settings_set_value (input_sources_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder)); ++ g_settings_apply (input_sources_settings); ++ ++ g_variant_unref (old_sources); ++} ++ ++static gboolean ++get_selected_iter (GtkBuilder *builder, ++ GtkTreeModel **model, ++ GtkTreeIter *iter) ++{ ++ GtkTreeSelection *selection; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("active_input_sources"))); ++ ++ return gtk_tree_selection_get_selected (selection, model, iter); ++} ++ ++static gint ++idx_from_model_iter (GtkTreeModel *model, ++ GtkTreeIter *iter) ++{ ++ GtkTreePath *path; ++ gint idx; ++ ++ path = gtk_tree_model_get_path (model, iter); ++ if (path == NULL) ++ return -1; ++ ++ idx = gtk_tree_path_get_indices (path)[0]; ++ gtk_tree_path_free (path); ++ ++ return idx; ++} ++ ++static void ++update_button_sensitivity (GtkBuilder *builder) ++{ ++ GtkWidget *remove_button; ++ GtkWidget *up_button; ++ GtkWidget *down_button; ++ GtkWidget *show_button; ++ GtkWidget *settings_button; ++ GtkTreeView *tv; ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ gint n_active; ++ gint index; ++ gboolean settings_sensitive; ++ GDesktopAppInfo *app_info; ++ ++ remove_button = WID("input_source_remove"); ++ show_button = WID("input_source_show"); ++ up_button = WID("input_source_move_up"); ++ down_button = WID("input_source_move_down"); ++ settings_button = WID("input_source_settings"); ++ ++ tv = GTK_TREE_VIEW (WID ("active_input_sources")); ++ n_active = gtk_tree_model_iter_n_children (gtk_tree_view_get_model (tv), NULL); ++ ++ if (get_selected_iter (builder, &model, &iter)) ++ { ++ index = idx_from_model_iter (model, &iter); ++ gtk_tree_model_get (model, &iter, SETUP_COLUMN, &app_info, -1); ++ } ++ else ++ { ++ index = -1; ++ app_info = NULL; ++ } ++ ++ settings_sensitive = (index >= 0 && app_info != NULL); ++ ++ if (app_info) ++ g_object_unref (app_info); ++ ++ gtk_widget_set_sensitive (remove_button, index >= 0 && n_active > 1); ++ gtk_widget_set_sensitive (show_button, index >= 0); ++ gtk_widget_set_sensitive (up_button, index > 0); ++ gtk_widget_set_sensitive (down_button, index >= 0 && index < n_active - 1); ++ gtk_widget_set_sensitive (settings_button, settings_sensitive); ++} ++ ++static void ++set_selected_path (GtkBuilder *builder, ++ GtkTreePath *path) ++{ ++ GtkTreeSelection *selection; ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("active_input_sources"))); ++ ++ gtk_tree_selection_select_path (selection, path); ++} ++ ++static GtkTreeModel * ++tree_view_get_actual_model (GtkTreeView *tv) ++{ ++ GtkTreeModel *filtered_store; ++ ++ filtered_store = gtk_tree_view_get_model (tv); ++ ++ return gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filtered_store)); ++} ++ ++static void ++chooser_response (GtkWidget *chooser, gint response_id, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ ++ if (response_id == GTK_RESPONSE_OK) ++ { ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ ++ if (input_chooser_get_selected (chooser, &model, &iter)) ++ { ++ GtkTreeView *tv; ++ GtkListStore *child_model; ++ GtkTreeIter child_iter, filter_iter; ++ gchar *name; ++ gchar *type; ++ gchar *id; ++ GDesktopAppInfo *app_info = NULL; ++ ++ gtk_tree_model_get (model, &iter, ++ NAME_COLUMN, &name, ++ TYPE_COLUMN, &type, ++ ID_COLUMN, &id, ++ -1); ++ ++#ifdef HAVE_IBUS ++ if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) ++ app_info = setup_app_info_for_id (id); ++#endif ++ ++ tv = GTK_TREE_VIEW (WID ("active_input_sources")); ++ child_model = GTK_LIST_STORE (tree_view_get_actual_model (tv)); ++ ++ gtk_list_store_append (child_model, &child_iter); ++ ++ gtk_list_store_set (child_model, &child_iter, ++ NAME_COLUMN, name, ++ TYPE_COLUMN, type, ++ ID_COLUMN, id, ++ SETUP_COLUMN, app_info, ++ -1); ++ g_free (name); ++ g_free (type); ++ g_free (id); ++ if (app_info) ++ g_object_unref (app_info); ++ ++ gtk_tree_model_filter_convert_child_iter_to_iter (GTK_TREE_MODEL_FILTER (gtk_tree_view_get_model (tv)), ++ &filter_iter, ++ &child_iter); ++ gtk_tree_selection_select_iter (gtk_tree_view_get_selection (tv), &filter_iter); ++ ++ update_button_sensitivity (builder); ++ update_configuration (GTK_TREE_MODEL (child_model)); ++ } ++ else ++ { ++ g_debug ("nothing selected, nothing added"); ++ } ++ } ++ ++ gtk_widget_destroy (GTK_WIDGET (chooser)); ++} ++ ++static void ++add_input (GtkButton *button, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ GtkWidget *chooser; ++ GtkWidget *toplevel; ++ GtkWidget *treeview; ++ GtkListStore *active_sources; ++ ++ g_debug ("add an input source"); ++ ++ toplevel = gtk_widget_get_toplevel (WID ("region_notebook")); ++ treeview = WID ("active_input_sources"); ++ active_sources = GTK_LIST_STORE (tree_view_get_actual_model (GTK_TREE_VIEW (treeview))); ++ ++ chooser = input_chooser_new (GTK_WINDOW (toplevel), active_sources); ++ g_signal_connect (chooser, "response", ++ G_CALLBACK (chooser_response), builder); ++} ++ ++static void ++remove_selected_input (GtkButton *button, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ GtkTreeModel *model; ++ GtkTreeModel *child_model; ++ GtkTreeIter iter; ++ GtkTreeIter child_iter; ++ GtkTreePath *path; ++ ++ g_debug ("remove selected input source"); ++ ++ if (get_selected_iter (builder, &model, &iter) == FALSE) ++ return; ++ ++ path = gtk_tree_model_get_path (model, &iter); ++ ++ child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model)); ++ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), ++ &child_iter, ++ &iter); ++ gtk_list_store_remove (GTK_LIST_STORE (child_model), &child_iter); ++ ++ if (!gtk_tree_model_get_iter (model, &iter, path)) ++ gtk_tree_path_prev (path); ++ ++ set_selected_path (builder, path); ++ ++ gtk_tree_path_free (path); ++ ++ update_button_sensitivity (builder); ++ update_configuration (child_model); ++} ++ ++static void ++move_selected_input_up (GtkButton *button, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ GtkTreeModel *model; ++ GtkTreeModel *child_model; ++ GtkTreeIter iter, prev; ++ GtkTreeIter child_iter, child_prev; ++ GtkTreePath *path; ++ ++ g_debug ("move selected input source up"); ++ ++ if (!get_selected_iter (builder, &model, &iter)) ++ return; ++ ++ prev = iter; ++ if (!gtk_tree_model_iter_previous (model, &prev)) ++ return; ++ ++ path = gtk_tree_model_get_path (model, &prev); ++ ++ child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model)); ++ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), ++ &child_iter, ++ &iter); ++ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), ++ &child_prev, ++ &prev); ++ gtk_list_store_swap (GTK_LIST_STORE (child_model), &child_iter, &child_prev); ++ ++ set_selected_path (builder, path); ++ gtk_tree_path_free (path); ++ ++ update_button_sensitivity (builder); ++ update_configuration (child_model); ++} ++ ++static void ++move_selected_input_down (GtkButton *button, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ GtkTreeModel *model; ++ GtkTreeModel *child_model; ++ GtkTreeIter iter, next; ++ GtkTreeIter child_iter, child_next; ++ GtkTreePath *path; ++ ++ g_debug ("move selected input source down"); ++ ++ if (!get_selected_iter (builder, &model, &iter)) ++ return; ++ ++ next = iter; ++ if (!gtk_tree_model_iter_next (model, &next)) ++ return; ++ ++ path = gtk_tree_model_get_path (model, &next); ++ ++ child_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model)); ++ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), ++ &child_iter, ++ &iter); ++ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model), ++ &child_next, ++ &next); ++ gtk_list_store_swap (GTK_LIST_STORE (child_model), &child_iter, &child_next); ++ ++ set_selected_path (builder, path); ++ gtk_tree_path_free (path); ++ ++ update_button_sensitivity (builder); ++ update_configuration (child_model); ++} ++ ++static void ++show_selected_layout (GtkButton *button, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ gchar *type; ++ gchar *id; ++ gchar *kbd_viewer_args; ++ const gchar *xkb_layout; ++ const gchar *xkb_variant; ++ ++ g_debug ("show selected layout"); ++ ++ if (!get_selected_iter (builder, &model, &iter)) ++ return; ++ ++ gtk_tree_model_get (model, &iter, ++ TYPE_COLUMN, &type, ++ ID_COLUMN, &id, ++ -1); ++ ++ if (g_str_equal (type, INPUT_SOURCE_TYPE_XKB)) ++ { ++ gnome_xkb_info_get_layout_info (xkb_info, id, NULL, NULL, &xkb_layout, &xkb_variant); ++ ++ if (!xkb_layout || !xkb_layout[0]) ++ { ++ g_warning ("Couldn't find XKB input source '%s'", id); ++ goto exit; ++ } ++ } ++ else if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) ++ { ++#ifdef HAVE_IBUS ++ IBusEngineDesc *engine_desc = NULL; ++ ++ if (ibus_engines) ++ engine_desc = g_hash_table_lookup (ibus_engines, id); ++ ++ if (engine_desc) ++ { ++ xkb_layout = ibus_engine_desc_get_layout (engine_desc); ++ xkb_variant = ""; ++ } ++ else ++ { ++ g_warning ("Couldn't find IBus input source '%s'", id); ++ goto exit; ++ } ++#else ++ g_warning ("IBus input source type specified but IBus support was not compiled"); ++ goto exit; ++#endif ++ } ++ else ++ { ++ g_warning ("Unknown input source type '%s'", type); ++ goto exit; ++ } ++ ++ if (xkb_variant[0]) ++ kbd_viewer_args = g_strdup_printf ("gkbd-keyboard-display -l \"%s\t%s\"", ++ xkb_layout, xkb_variant); ++ else ++ kbd_viewer_args = g_strdup_printf ("gkbd-keyboard-display -l %s", ++ xkb_layout); ++ ++ g_spawn_command_line_async (kbd_viewer_args, NULL); ++ ++ g_free (kbd_viewer_args); ++ exit: ++ g_free (type); ++ g_free (id); ++} ++ ++static void ++show_selected_settings (GtkButton *button, gpointer data) ++{ ++ GtkBuilder *builder = data; ++ GtkTreeModel *model; ++ GtkTreeIter iter; ++ GdkAppLaunchContext *ctx; ++ GDesktopAppInfo *app_info; ++ gchar *id; ++ GError *error = NULL; ++ ++ g_debug ("show selected layout"); ++ ++ if (!get_selected_iter (builder, &model, &iter)) ++ return; ++ ++ gtk_tree_model_get (model, &iter, SETUP_COLUMN, &app_info, -1); ++ ++ if (!app_info) ++ return; ++ ++ ctx = gdk_display_get_app_launch_context (gdk_display_get_default ()); ++ gdk_app_launch_context_set_timestamp (ctx, gtk_get_current_event_time ()); ++ ++ gtk_tree_model_get (model, &iter, ID_COLUMN, &id, -1); ++ g_app_launch_context_setenv (G_APP_LAUNCH_CONTEXT (ctx), ++ "IBUS_ENGINE_NAME", ++ id); ++ g_free (id); ++ ++ if (!g_app_info_launch (G_APP_INFO (app_info), NULL, G_APP_LAUNCH_CONTEXT (ctx), &error)) ++ { ++ g_warning ("Failed to launch input source setup: %s", error->message); ++ g_error_free (error); ++ } ++ ++ g_object_unref (ctx); ++ g_object_unref (app_info); ++} ++ ++static gboolean ++go_to_shortcuts (GtkLinkButton *button, ++ CcRegionPanel *panel) ++{ ++ gchar *argv[3]; ++ argv[0] = "cinnamon-settings"; ++ argv[1] = "keyboard"; ++ argv[3] = NULL; ++ g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); ++ return TRUE; ++} ++ ++static void ++input_sources_changed (GSettings *settings, ++ gchar *key, ++ GtkBuilder *builder) ++{ ++ GtkWidget *treeview; ++ GtkTreeModel *store; ++ GtkTreePath *path; ++ GtkTreeIter iter; ++ GtkTreeModel *model; ++ ++ treeview = WID("active_input_sources"); ++ store = tree_view_get_actual_model (GTK_TREE_VIEW (treeview)); ++ ++ if (get_selected_iter (builder, &model, &iter)) ++ path = gtk_tree_model_get_path (model, &iter); ++ else ++ path = NULL; ++ ++ gtk_list_store_clear (GTK_LIST_STORE (store)); ++ populate_with_active_sources (GTK_LIST_STORE (store)); ++ ++ if (path) ++ { ++ set_selected_path (builder, path); ++ gtk_tree_path_free (path); ++ } ++} ++ ++static void ++update_shortcut_label (GtkWidget *widget, ++ const char *value) ++{ ++ char *text; ++ guint accel_key, *keycode; ++ GdkModifierType mods; ++ ++ if (value == NULL || *value == '\0') ++ { ++ gtk_label_set_text (GTK_LABEL (widget), "\342\200\224"); ++ return; ++ } ++ gtk_accelerator_parse_with_keycode (value, &accel_key, &keycode, &mods); ++ if (accel_key == 0 && keycode == NULL && mods == 0) ++ { ++ gtk_label_set_text (GTK_LABEL (widget), "\342\200\224"); ++ g_warning ("Failed to parse keyboard shortcut: '%s'", value); ++ return; ++ } ++ ++ text = gtk_accelerator_get_label_with_keycode (gtk_widget_get_display (widget), accel_key, *keycode, mods); ++ g_free (keycode); ++ gtk_label_set_text (GTK_LABEL (widget), text); ++ g_free (text); ++} ++ ++static void ++update_shortcuts (GtkBuilder *builder) ++{ ++ char *previous, *next; ++ GSettings *settings; ++ ++ settings = g_settings_new ("org.cinnamon.settings-daemon.plugins.media-keys"); ++ ++ previous = g_settings_get_string (settings, "switch-input-source-backward"); ++ next = g_settings_get_string (settings, "switch-input-source"); ++ ++ update_shortcut_label (WID ("prev-source-shortcut-label"), previous); ++ update_shortcut_label (WID ("next-source-shortcut-label"), next); ++ ++ g_free (previous); ++ g_free (next); ++} ++ ++static gboolean ++active_sources_visible_func (GtkTreeModel *model, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ gchar *display_name; ++ ++ gtk_tree_model_get (model, iter, NAME_COLUMN, &display_name, -1); ++ ++ if (!display_name) ++ return FALSE; ++ ++ g_free (display_name); ++ ++ return TRUE; ++} ++ ++void ++setup_input_tabs (GtkBuilder *builder, ++ CcRegionPanel *panel) ++{ ++ GtkWidget *treeview; ++ GtkTreeViewColumn *column; ++ GtkCellRenderer *cell; ++ GtkListStore *store; ++ GtkTreeModel *filtered_store; ++ GtkTreeSelection *selection; ++ ++ /* set up the list of active inputs */ ++ treeview = WID("active_input_sources"); ++ column = gtk_tree_view_column_new (); ++ cell = gtk_cell_renderer_text_new (); ++ gtk_tree_view_column_pack_start (column, cell, TRUE); ++ gtk_tree_view_column_add_attribute (column, cell, "text", NAME_COLUMN); ++ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); ++ ++ store = gtk_list_store_new (N_COLUMNS, ++ G_TYPE_STRING, ++ G_TYPE_STRING, ++ G_TYPE_STRING, ++ G_TYPE_DESKTOP_APP_INFO); ++ ++ gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store)); ++ ++ input_sources_settings = g_settings_new (GNOME_DESKTOP_INPUT_SOURCES_DIR); ++ g_settings_delay (input_sources_settings); ++ g_object_weak_ref (G_OBJECT (builder), (GWeakNotify) g_object_unref, input_sources_settings); ++ ++ if (!xkb_info) ++ xkb_info = gnome_xkb_info_new (); ++ ++#ifdef HAVE_IBUS ++ ibus_init (); ++ shell_name_watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION, ++ "org.Cinnamon", ++ G_BUS_NAME_WATCHER_FLAGS_NONE, ++ on_shell_appeared, ++ NULL, ++ builder, ++ NULL); ++ g_object_weak_ref (G_OBJECT (builder), (GWeakNotify) clear_ibus, NULL); ++#endif ++ ++ populate_with_active_sources (store); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); ++ g_signal_connect_swapped (selection, "changed", ++ G_CALLBACK (update_button_sensitivity), builder); ++ ++ /* Some input source types might have their info loaded ++ * asynchronously. In that case we don't want to show them ++ * immediately so we use a filter model on top of the real model ++ * which mirrors the GSettings key. */ ++ filtered_store = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL); ++ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (filtered_store), ++ active_sources_visible_func, ++ NULL, ++ NULL); ++ gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), filtered_store); ++ ++ /* set up the buttons */ ++ g_signal_connect (WID("input_source_add"), "clicked", ++ G_CALLBACK (add_input), builder); ++ g_signal_connect (WID("input_source_remove"), "clicked", ++ G_CALLBACK (remove_selected_input), builder); ++ g_signal_connect (WID("input_source_move_up"), "clicked", ++ G_CALLBACK (move_selected_input_up), builder); ++ g_signal_connect (WID("input_source_move_down"), "clicked", ++ G_CALLBACK (move_selected_input_down), builder); ++ g_signal_connect (WID("input_source_show"), "clicked", ++ G_CALLBACK (show_selected_layout), builder); ++ g_signal_connect (WID("input_source_settings"), "clicked", ++ G_CALLBACK (show_selected_settings), builder); ++ ++ /* use an em dash is no shortcut */ ++ update_shortcuts (builder); ++ ++ g_signal_connect (WID("jump-to-shortcuts"), "activate-link", ++ G_CALLBACK (go_to_shortcuts), panel); ++ ++ g_signal_connect (G_OBJECT (input_sources_settings), ++ "changed::" KEY_INPUT_SOURCES, ++ G_CALLBACK (input_sources_changed), ++ builder); ++} ++ ++static void ++filter_clear (GtkEntry *entry, ++ GtkEntryIconPosition icon_pos, ++ GdkEvent *event, ++ gpointer user_data) ++{ ++ gtk_entry_set_text (entry, ""); ++} ++ ++static gchar **search_pattern_list; ++ ++static void ++filter_changed (GtkBuilder *builder) ++{ ++ GtkTreeModelFilter *filtered_model; ++ GtkTreeView *tree_view; ++ GtkTreeSelection *selection; ++ GtkTreeIter selected_iter; ++ GtkWidget *filter_entry; ++ const gchar *pattern; ++ gchar *upattern; ++ ++ filter_entry = WID ("input_source_filter"); ++ pattern = gtk_entry_get_text (GTK_ENTRY (filter_entry)); ++ upattern = g_utf8_strup (pattern, -1); ++ if (!g_strcmp0 (pattern, "")) ++ g_object_set (G_OBJECT (filter_entry), ++ "secondary-icon-name", "edit-find-symbolic", ++ "secondary-icon-activatable", FALSE, ++ "secondary-icon-sensitive", FALSE, ++ NULL); ++ else ++ g_object_set (G_OBJECT (filter_entry), ++ "secondary-icon-name", "edit-clear-symbolic", ++ "secondary-icon-activatable", TRUE, ++ "secondary-icon-sensitive", TRUE, ++ NULL); ++ ++ if (search_pattern_list != NULL) ++ g_strfreev (search_pattern_list); ++ ++ search_pattern_list = g_strsplit (upattern, " ", -1); ++ g_free (upattern); ++ ++ filtered_model = GTK_TREE_MODEL_FILTER (gtk_builder_get_object (builder, "filtered_input_source_model")); ++ gtk_tree_model_filter_refilter (filtered_model); ++ ++ tree_view = GTK_TREE_VIEW (WID ("filtered_input_source_list")); ++ selection = gtk_tree_view_get_selection (tree_view); ++ if (gtk_tree_selection_get_selected (selection, NULL, &selected_iter)) ++ { ++ GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (filtered_model), ++ &selected_iter); ++ gtk_tree_view_scroll_to_cell (tree_view, path, NULL, TRUE, 0.5, 0.5); ++ gtk_tree_path_free (path); ++ } ++ else ++ { ++ GtkTreeIter iter; ++ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (filtered_model), &iter)) ++ gtk_tree_selection_select_iter (selection, &iter); ++ } ++} ++ ++static void ++selection_changed (GtkTreeSelection *selection, ++ GtkBuilder *builder) ++{ ++ gtk_widget_set_sensitive (WID ("ok-button"), ++ gtk_tree_selection_get_selected (selection, NULL, NULL)); ++} ++ ++static void ++row_activated (GtkTreeView *tree_view, ++ GtkTreePath *path, ++ GtkTreeViewColumn *column, ++ GtkBuilder *builder) ++{ ++ GtkWidget *add_button; ++ GtkWidget *dialog; ++ ++ add_button = WID ("ok-button"); ++ dialog = WID ("input_source_chooser"); ++ if (gtk_widget_is_sensitive (add_button)) ++ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); ++} ++ ++static void ++entry_activated (GtkBuilder *builder, ++ gpointer data) ++{ ++ row_activated (NULL, NULL, NULL, builder); ++} ++ ++static gboolean ++filter_func (GtkTreeModel *model, ++ GtkTreeIter *iter, ++ gpointer data) ++{ ++ gchar *name = NULL; ++ gchar **pattern; ++ gboolean rv = TRUE; ++ ++ if (search_pattern_list == NULL || search_pattern_list[0] == NULL) ++ return TRUE; ++ ++ gtk_tree_model_get (model, iter, ++ NAME_COLUMN, &name, ++ -1); ++ ++ pattern = search_pattern_list; ++ do { ++ gboolean is_pattern_found = FALSE; ++ gchar *udesc = g_utf8_strup (name, -1); ++ if (udesc != NULL && g_strstr_len (udesc, -1, *pattern)) ++ { ++ is_pattern_found = TRUE; ++ } ++ g_free (udesc); ++ ++ if (!is_pattern_found) ++ { ++ rv = FALSE; ++ break; ++ } ++ ++ } while (*++pattern != NULL); ++ ++ g_free (name); ++ ++ return rv; ++} ++ ++static GtkWidget * ++input_chooser_new (GtkWindow *main_window, ++ GtkListStore *active_sources) ++{ ++ GtkBuilder *builder; ++ GtkWidget *chooser; ++ GtkWidget *filtered_list; ++ GtkWidget *filter_entry; ++ GtkTreeViewColumn *visible_column; ++ GtkTreeSelection *selection; ++ GtkListStore *model; ++ GtkTreeModelFilter *filtered_model; ++ GtkTreeIter iter; ++ ++ builder = gtk_builder_new (); ++ gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE); ++ gtk_builder_add_from_file (builder, ++ CINNAMONCC_UI_DIR "/cinnamon-region-panel-input-chooser.ui", ++ NULL); ++ chooser = WID ("input_source_chooser"); ++ input_chooser = chooser; ++ g_object_add_weak_pointer (G_OBJECT (chooser), (gpointer *) &input_chooser); ++ g_object_set_data_full (G_OBJECT (chooser), "builder", builder, g_object_unref); ++ ++ filtered_list = WID ("filtered_input_source_list"); ++ filter_entry = WID ("input_source_filter"); ++ ++ g_object_set_data (G_OBJECT (chooser), ++ "filtered_input_source_list", filtered_list); ++ visible_column = ++ gtk_tree_view_column_new_with_attributes ("Input Sources", ++ gtk_cell_renderer_text_new (), ++ "text", NAME_COLUMN, ++ NULL); ++ ++ gtk_window_set_transient_for (GTK_WINDOW (chooser), main_window); ++ ++ gtk_tree_view_append_column (GTK_TREE_VIEW (filtered_list), ++ visible_column); ++ /* We handle searching ourselves, thank you. */ ++ gtk_tree_view_set_enable_search (GTK_TREE_VIEW (filtered_list), FALSE); ++ gtk_tree_view_set_search_column (GTK_TREE_VIEW (filtered_list), -1); ++ ++ g_signal_connect_swapped (G_OBJECT (filter_entry), "activate", ++ G_CALLBACK (entry_activated), builder); ++ g_signal_connect_swapped (G_OBJECT (filter_entry), "notify::text", ++ G_CALLBACK (filter_changed), builder); ++ ++ g_signal_connect (G_OBJECT (filter_entry), "icon-release", ++ G_CALLBACK (filter_clear), NULL); ++ ++ filtered_model = GTK_TREE_MODEL_FILTER (gtk_builder_get_object (builder, "filtered_input_source_model")); ++ model = GTK_LIST_STORE (gtk_builder_get_object (builder, "input_source_model")); ++ ++ populate_model (model, active_sources); ++ ++ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), ++ NAME_COLUMN, GTK_SORT_ASCENDING); ++ ++ gtk_tree_model_filter_set_visible_func (filtered_model, ++ filter_func, ++ NULL, NULL); ++ ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (filtered_list)); ++ ++ g_signal_connect (G_OBJECT (selection), "changed", ++ G_CALLBACK (selection_changed), builder); ++ ++ if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (filtered_model), &iter)) ++ gtk_tree_selection_select_iter (selection, &iter); ++ ++ g_signal_connect (G_OBJECT (filtered_list), "row-activated", ++ G_CALLBACK (row_activated), builder); ++ ++ gtk_widget_grab_focus (filter_entry); ++ ++ gtk_widget_show (chooser); ++ ++ return chooser; ++} ++ ++static gboolean ++input_chooser_get_selected (GtkWidget *dialog, ++ GtkTreeModel **model, ++ GtkTreeIter *iter) ++{ ++ GtkWidget *tv; ++ GtkTreeSelection *selection; ++ ++ tv = g_object_get_data (G_OBJECT (dialog), "filtered_input_source_list"); ++ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tv)); ++ ++ return gtk_tree_selection_get_selected (selection, model, iter); ++} +diff -uNrp a/panels/region/cinnamon-region-panel-input-chooser.ui b/panels/region/cinnamon-region-panel-input-chooser.ui +--- a/panels/region/cinnamon-region-panel-input-chooser.ui 1970-01-01 01:00:00.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-input-chooser.ui 2013-09-21 13:24:15.339949536 +0100 +@@ -0,0 +1,157 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<interface> ++ <requires lib="gtk+" version="2.16"/> ++ <object class="GtkListStore" id="input_source_model"> ++ <columns> ++ <!-- display name --> ++ <column type="gchararray"/> ++ <!-- input source type --> ++ <column type="gchararray"/> ++ <!-- type specific identifier --> ++ <column type="gchararray"/> ++ </columns> ++ </object> ++ <object class="GtkTreeModelFilter" id="filtered_input_source_model"> ++ <property name="child_model">input_source_model</property> ++ </object> ++ <object class="GtkDialog" id="input_source_chooser"> ++ <property name="visible">False</property> ++ <property name="can_focus">False</property> ++ <property name="border_width">5</property> ++ <property name="title" translatable="yes">Choose an input source</property> ++ <property name="modal">True</property> ++ <property name="window_position">center-on-parent</property> ++ <property name="type_hint">dialog</property> ++ <child internal-child="vbox"> ++ <object class="GtkBox" id="dialog-vbox3"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="orientation">vertical</property> ++ <property name="spacing">2</property> ++ <child internal-child="action_area"> ++ <object class="GtkButtonBox" id="hbtnBox"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="layout_style">end</property> ++ <child> ++ <object class="GtkButton" id="cancel-button"> ++ <property name="label">gtk-cancel</property> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="can_default">True</property> ++ <property name="receives_default">False</property> ++ <property name="use_action_appearance">False</property> ++ <property name="use_stock">True</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">False</property> ++ <property name="pack_type">end</property> ++ <property name="position">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkButton" id="ok-button"> ++ <property name="label">gtk-add</property> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="can_default">True</property> ++ <property name="receives_default">False</property> ++ <property name="use_action_appearance">False</property> ++ <property name="use_stock">True</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">False</property> ++ <property name="pack_type">end</property> ++ <property name="position">2</property> ++ </packing> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkVBox" id="vbox40"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="border_width">5</property> ++ <property name="spacing">6</property> ++ <child> ++ <object class="GtkVBox" id="vbox1"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="spacing">6</property> ++ <child> ++ <object class="GtkLabel" id="label1"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">0</property> ++ <property name="label" translatable="yes">Select an input source to add</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">False</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkScrolledWindow" id="scrolledwindow1"> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="hscrollbar_policy">never</property> ++ <property name="shadow_type">etched-in</property> ++ <property name="min_content_width">450</property> ++ <property name="min_content_height">250</property> ++ <child> ++ <object class="GtkTreeView" id="filtered_input_source_list"> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="model">filtered_input_source_model</property> ++ <property name="headers_visible">False</property> ++ <property name="search_column">0</property> ++ </object> ++ </child> ++ </object> ++ <packing> ++ <property name="expand">True</property> ++ <property name="fill">True</property> ++ <property name="position">1</property> ++ </packing> ++ </child> ++ </object> ++ <packing> ++ <property name="expand">True</property> ++ <property name="fill">True</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkEntry" id="input_source_filter"> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="invisible_char">•</property> ++ <property name="secondary-icon-name">edit-find-symbolic</property> ++ <property name="secondary-icon-activatable">False</property> ++ <property name="secondary-icon-sensitive">False</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">False</property> ++ <property name="pack_type">end</property> ++ <property name="position">1</property> ++ </packing> ++ </child> ++ </object> ++ <packing> ++ <property name="expand">True</property> ++ <property name="fill">True</property> ++ <property name="position">1</property> ++ </packing> ++ </child> ++ </object> ++ </child> ++ <action-widgets> ++ <action-widget response="-5">ok-button</action-widget> ++ <action-widget response="-6">cancel-button</action-widget> ++ </action-widgets> ++ </object> ++</interface> +diff -uNrp a/panels/region/cinnamon-region-panel-input.h b/panels/region/cinnamon-region-panel-input.h +--- a/panels/region/cinnamon-region-panel-input.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-input.h 2013-09-21 13:24:15.339949536 +0100 +@@ -0,0 +1,36 @@ ++/* cinnamon-region-panel-input.h ++ * Copyright (C) 2011 Red Hat, Inc. ++ * ++ * Written by Matthias Clasen ++ * ++ * 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 Street - Suite 500, Boston, MA ++ * 02110-1335, USA. ++ */ ++ ++#ifndef __CINNAMON_KEYBOARD_PROPERTY_INPUT_H ++#define __CINNAMON_KEYBOARD_PROPERTY_INPUT_H ++ ++#include <gtk/gtk.h> ++ ++#include "cc-region-panel.h" ++ ++G_BEGIN_DECLS ++ ++void setup_input_tabs (GtkBuilder *builder, ++ CcRegionPanel *self); ++ ++G_END_DECLS ++ ++#endif /* __CINNAMON_KEYBOARD_PROPERTY_INPUT_H */ +diff -uNrp a/panels/region/cinnamon-region-panel-lang.c b/panels/region/cinnamon-region-panel-lang.c +--- a/panels/region/cinnamon-region-panel-lang.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-lang.c 2013-09-21 13:24:15.340949500 +0100 +@@ -24,7 +24,7 @@ + #endif + + #include <string.h> +-#include <glib/gi18n-lib.h> ++#include <glib/gi18n.h> + + #include "cinnamon-region-panel-lang.h" + #include "cinnamon-region-panel-formats.h" +diff -uNrp a/panels/region/cinnamon-region-panel-lang.h b/panels/region/cinnamon-region-panel-lang.h +--- a/panels/region/cinnamon-region-panel-lang.h 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-lang.h 2013-09-21 13:24:15.340949500 +0100 +@@ -19,8 +19,8 @@ + * 02110-1335, USA. + */ + +-#ifndef __GNOME_KEYBOARD_PROPERTY_LANG_H +-#define __GNOME_KEYBOARD_PROPERTY_LANG_H ++#ifndef __CINNAMON_KEYBOARD_PROPERTY_LANG_H ++#define __CINNAMON_KEYBOARD_PROPERTY_LANG_H + + #include <gtk/gtk.h> + +@@ -29,4 +29,4 @@ G_BEGIN_DECLS + void setup_language (GtkBuilder *builder); + + G_END_DECLS +-#endif /* __GNOME_KEYBOARD_PROPERTY_LANG_H */ ++#endif /* __CINNAMON_KEYBOARD_PROPERTY_LANG_H */ +diff -uNrp a/panels/region/cinnamon-region-panel-layout-chooser.ui b/panels/region/cinnamon-region-panel-layout-chooser.ui +--- a/panels/region/cinnamon-region-panel-layout-chooser.ui 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-layout-chooser.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,180 +0,0 @@ +-<?xml version="1.0" encoding="UTF-8"?> +-<interface> +- <requires lib="gtk+" version="2.16"/> +- <object class="GtkListStore" id="layout_list_model"> +- <columns> +- <!-- column-name sort_order --> +- <column type="gchararray"/> +- <!-- column-name visible --> +- <column type="gchararray"/> +- <!-- column-name xkb_id --> +- <column type="gchararray"/> +- <!-- column-name country_desc --> +- <column type="gchararray"/> +- <!-- column-name language_desc --> +- <column type="gchararray"/> +- </columns> +- </object> +- <object class="GtkTreeModelFilter" id="filtered_layout_list_model"> +- <property name="child_model">layout_list_model</property> +- </object> +- <object class="GtkDialog" id="xkb_layout_chooser"> +- <property name="visible">False</property> +- <property name="can_focus">False</property> +- <property name="border_width">5</property> +- <property name="title" translatable="yes">Choose a Layout</property> +- <property name="modal">True</property> +- <property name="window_position">center-on-parent</property> +- <property name="type_hint">dialog</property> +- <child internal-child="vbox"> +- <object class="GtkBox" id="dialog-vbox3"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="orientation">vertical</property> +- <property name="spacing">2</property> +- <child internal-child="action_area"> +- <object class="GtkButtonBox" id="hbtnBox"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="layout_style">end</property> +- <child> +- <object class="GtkButton" id="btnPreview"> +- <property name="label" translatable="yes">Preview</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> +- <property name="use_action_appearance">False</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="position">0</property> +- <property name="secondary">True</property> +- </packing> +- </child> +- <child> +- <object class="GtkButton" id="btnCancel"> +- <property name="label">gtk-cancel</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="can_default">True</property> +- <property name="receives_default">False</property> +- <property name="use_action_appearance">False</property> +- <property name="use_stock">True</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="pack_type">end</property> +- <property name="position">1</property> +- </packing> +- </child> +- <child> +- <object class="GtkButton" id="btnOk"> +- <property name="label">gtk-add</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="can_default">True</property> +- <property name="receives_default">False</property> +- <property name="use_action_appearance">False</property> +- <property name="use_stock">True</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="pack_type">end</property> +- <property name="position">2</property> +- </packing> +- </child> +- </object> +- </child> +- <child> +- <object class="GtkVBox" id="vbox40"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="border_width">5</property> +- <property name="spacing">6</property> +- <child> +- <object class="GtkVBox" id="vbox1"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="spacing">6</property> +- <child> +- <object class="GtkLabel" id="label1"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="xalign">0</property> +- <property name="label" translatable="yes">Select an input source to add</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkScrolledWindow" id="scrolledwindow1"> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="hscrollbar_policy">never</property> +- <property name="shadow_type">etched-in</property> +- <property name="min_content_width">450</property> +- <property name="min_content_height">250</property> +- <child> +- <object class="GtkTreeView" id="xkb_filtered_layouts_list"> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="model">filtered_layout_list_model</property> +- <property name="headers_visible">False</property> +- <property name="search_column">0</property> +- <child internal-child="selection"> +- <object class="GtkTreeSelection" id="treeview-selection1"/> +- </child> +- </object> +- </child> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">1</property> +- </packing> +- </child> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkEntry" id="xkb_layout_filter"> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="invisible_char">•</property> +- <property name="secondary-icon-name">edit-find-symbolic</property> +- <property name="secondary-icon-activatable">False</property> +- <property name="secondary-icon-sensitive">False</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="pack_type">end</property> +- <property name="position">1</property> +- </packing> +- </child> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">1</property> +- </packing> +- </child> +- </object> +- </child> +- <action-widgets> +- <action-widget response="1">btnPreview</action-widget> +- <action-widget response="-5">btnOk</action-widget> +- <action-widget response="-6">btnCancel</action-widget> +- </action-widgets> +- </object> +-</interface> +diff -uNrp a/panels/region/cinnamon-region-panel-options-dialog.ui b/panels/region/cinnamon-region-panel-options-dialog.ui +--- a/panels/region/cinnamon-region-panel-options-dialog.ui 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-options-dialog.ui 1970-01-01 01:00:00.000000000 +0100 +@@ -1,79 +0,0 @@ +-<?xml version="1.0" encoding="UTF-8"?> +-<interface> +- <requires lib="gtk+" version="2.16"/> +- <object class="GtkDialog" id="xkb_options_dialog"> +- <property name="can_focus">False</property> +- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> +- <property name="border_width">5</property> +- <property name="title" translatable="yes">Keyboard Layout Options</property> +- <property name="window_position">center-on-parent</property> +- <property name="default_width">550</property> +- <property name="default_height">400</property> +- <property name="type_hint">dialog</property> +- <child internal-child="vbox"> +- <object class="GtkBox" id="dialog_vbox"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> +- <property name="orientation">vertical</property> +- <property name="spacing">2</property> +- <child> +- <object class="GtkScrolledWindow" id="options_scroll"> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="border_width">5</property> +- <property name="shadow_type">out</property> +- <child> +- <object class="GtkViewport" id="viewport1"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="shadow_type">none</property> +- <child> +- <object class="GtkVBox" id="options_vbox"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- </object> +- </child> +- </object> +- </child> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">True</property> +- <property name="position">1</property> +- </packing> +- </child> +- <child internal-child="action_area"> +- <object class="GtkButtonBox" id="dialog-action_area4"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> +- <property name="layout_style">end</property> +- <child> +- <placeholder/> +- </child> +- <child> +- <object class="GtkButton" id="button2"> +- <property name="label">gtk-close</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> +- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> +- <property name="use_action_appearance">False</property> +- <property name="use_stock">True</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="position">1</property> +- </packing> +- </child> +- </object> +- </child> +- </object> +- </child> +- <action-widgets> +- <action-widget response="-7">button2</action-widget> +- </action-widgets> +- </object> +-</interface> +diff -uNrp a/panels/region/cinnamon-region-panel-system.c b/panels/region/cinnamon-region-panel-system.c +--- a/panels/region/cinnamon-region-panel-system.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-system.c 2013-09-21 13:24:15.342949428 +0100 +@@ -27,15 +27,18 @@ + + #include <polkit/polkit.h> + +-#include <glib/gi18n-lib.h> ++#include <glib/gi18n.h> ++ ++#define GNOME_DESKTOP_USE_UNSTABLE_API ++#include <libcinnamon-desktop/gnome-xkb-info.h> + +-#include <libgnomekbd/gkbd-keyboard-config.h> + #include "cc-common-language.h" + #include "gdm-languages.h" + #include "cinnamon-region-panel-system.h" +-#include "cinnamon-region-panel-xkb.h" + +-static GSettings *locale_settings, *xkb_settings; ++#define WID(s) GTK_WIDGET(gtk_builder_get_object (dialog, s)) ++ ++static GSettings *locale_settings, *input_sources_settings; + static GDBusProxy *localed_proxy; + static GPermission *localed_permission; + +@@ -72,13 +75,14 @@ update_copy_button (GtkBuilder *dialog) + + button = WID ("copy_settings_button"); + +- /* If the version of localed doesn't include layouts... */ +- if (system_input_source) { ++ if (user_input_source && user_input_source[0]) { + layouts_differ = (g_strcmp0 (user_input_source, system_input_source) != 0); + if (layouts_differ == FALSE) + layouts_differ = (g_strcmp0 (user_input_variants, system_input_variants) != 0); +- } else ++ } else { ++ /* Nothing to copy */ + layouts_differ = FALSE; ++ } + + if (g_strcmp0 (user_lang, system_lang) == 0 && + g_strcmp0 (user_region, system_region) == 0 && +@@ -131,61 +135,67 @@ system_update_language (GtkBuilder *dial + } + + static void +-xkb_settings_changed (GSettings *settings, +- const gchar *key, +- GtkBuilder *dialog) ++input_sources_changed (GSettings *settings, ++ const gchar *key, ++ GtkBuilder *dialog) + { +- guint i; +- GString *disp, *list, *variants; +- GtkWidget *label; +- gchar **layouts; +- +- layouts = g_settings_get_strv (settings, "layouts"); +- if (layouts == NULL) +- return; +- +- label = WID ("user_input_source"); +- disp = g_string_new (""); +- list = g_string_new (""); +- variants = g_string_new (""); +- +- for (i = 0; layouts[i]; i++) { +- gchar *utf_visible; +- char **split; +- gchar *layout, *variant; +- +- utf_visible = xkb_layout_description_utf8 (layouts[i]); +- if (disp->str[0] != '\0') +- g_string_append (disp, ", "); +- g_string_append (disp, utf_visible ? utf_visible : layouts[i]); +- g_free (utf_visible); +- +- split = g_strsplit_set (layouts[i], " \t", 2); +- +- if (split == NULL || split[0] == NULL) +- continue; +- +- layout = split[0]; +- variant = split[1]; +- +- if (list->str[0] != '\0') +- g_string_append (list, ","); +- g_string_append (list, layout); +- +- if (variants->str[0] != '\0') +- g_string_append (variants, ","); +- g_string_append (variants, variant ? variant : ""); +- +- g_strfreev (split); +- } +- g_strfreev (layouts); ++ GString *disp, *list, *variants; ++ GtkWidget *label; ++ GnomeXkbInfo *xkb_info; ++ GVariantIter iter; ++ GVariant *sources; ++ const gchar *type; ++ const gchar *id; ++ ++ sources = g_settings_get_value (input_sources_settings, "sources"); ++ xkb_info = gnome_xkb_info_new (); ++ ++ label = WID ("user_input_source"); ++ disp = g_string_new (""); ++ list = g_string_new (""); ++ variants = g_string_new (""); ++ ++ g_variant_iter_init (&iter, sources); ++ while (g_variant_iter_next (&iter, "(&s&s)", &type, &id)) { ++ /* We can't copy non-XKB layouts to the system yet */ ++ if (g_str_equal (type, "xkb")) { ++ char **split; ++ gchar *layout, *variant; ++ const char *name; ++ ++ gnome_xkb_info_get_layout_info (xkb_info, id, &name, NULL, NULL, NULL); ++ if (disp->str[0] != '\0') ++ g_string_append (disp, ", "); ++ g_string_append (disp, name); ++ ++ split = g_strsplit (id, "+", 2); ++ ++ if (split == NULL || split[0] == NULL) ++ continue; ++ ++ layout = split[0]; ++ variant = split[1]; ++ ++ if (list->str[0] != '\0') { ++ g_string_append (list, ","); ++ g_string_append (variants, ","); ++ } ++ g_string_append (list, layout); ++ g_string_append (variants, variant ? variant : ""); ++ ++ g_strfreev (split); ++ } ++ } ++ g_variant_unref (sources); ++ g_object_unref (xkb_info); + + g_object_set_data_full (G_OBJECT (label), "input_source", g_string_free (list, FALSE), g_free); + g_object_set_data_full (G_OBJECT (label), "input_variants", g_string_free (variants, FALSE), g_free); ++ + gtk_label_set_text (GTK_LABEL (label), disp->str); + g_string_free (disp, TRUE); + +- update_copy_button (dialog); ++ update_copy_button (dialog); + } + + static void +@@ -222,12 +232,13 @@ on_localed_properties_changed (GDBusProx + const gchar **invalidated_properties, + GtkBuilder *dialog) + { +- GVariant *v; ++ GVariant *v, *w; + GtkWidget *label; +- const char *layout; ++ GnomeXkbInfo *xkb_info; + char **layouts; ++ char **variants; + GString *disp; +- guint i; ++ guint i, n; + + if (invalidated_properties != NULL) { + guint i; +@@ -236,6 +247,8 @@ on_localed_properties_changed (GDBusProx + update_property (proxy, "Locale"); + else if (g_str_equal (invalidated_properties[i], "X11Layout")) + update_property (proxy, "X11Layout"); ++ else if (g_str_equal (invalidated_properties[i], "X11Variant")) ++ update_property (proxy, "X11Variant"); + } + } + +@@ -290,29 +303,56 @@ on_localed_properties_changed (GDBusProx + label = WID ("system_input_source"); + v = g_dbus_proxy_get_cached_property (proxy, "X11Layout"); + if (v) { +- layout = g_variant_get_string (v, NULL); +- g_object_set_data_full (G_OBJECT (label), "input_source", g_strdup (layout), g_free); +- } else { ++ layouts = g_strsplit (g_variant_get_string (v, NULL), ",", -1); ++ g_object_set_data_full (G_OBJECT (label), "input_source", ++ g_variant_dup_string (v, NULL), g_free); ++ g_variant_unref (v); ++ } else { + g_object_set_data_full (G_OBJECT (label), "input_source", NULL, g_free); + update_copy_button (dialog); + return; + } + +- disp = g_string_new (""); +- layouts = g_strsplit (layout, ",", -1); +- for (i = 0; layouts[i]; i++) { +- gchar *utf_visible; +- +- utf_visible = xkb_layout_description_utf8 (layouts[i]); +- if (disp->str[0] != '\0') +- disp = g_string_append (disp, ", "); +- disp = g_string_append (disp, utf_visible ? utf_visible : layouts[i]); +- g_free (utf_visible); +- } ++ w = g_dbus_proxy_get_cached_property (proxy, "X11Variant"); ++ if (w) { ++ variants = g_strsplit (g_variant_get_string (w, NULL), ",", -1); ++ g_object_set_data_full (G_OBJECT (label), "input_variants", ++ g_variant_dup_string (w, NULL), g_free); ++ g_variant_unref (w); ++ } else { ++ variants = NULL; ++ g_object_set_data_full (G_OBJECT (label), "input_variants", NULL, g_free); ++ } ++ ++ if (variants && variants[0]) ++ n = MIN (g_strv_length (layouts), g_strv_length (variants)); ++ else ++ n = g_strv_length (layouts); ++ ++ xkb_info = gnome_xkb_info_new (); ++ disp = g_string_new (""); ++ for (i = 0; i < n && layouts[i][0]; i++) { ++ const char *name; ++ char *id; ++ ++ if (variants && variants[i] && variants[i][0]) ++ id = g_strdup_printf ("%s+%s", layouts[i], variants[i]); ++ else ++ id = g_strdup (layouts[i]); ++ ++ gnome_xkb_info_get_layout_info (xkb_info, id, &name, NULL, NULL, NULL); ++ if (disp->str[0] != '\0') ++ disp = g_string_append (disp, ", "); ++ disp = g_string_append (disp, name ? name : id); ++ ++ g_free (id); ++ } + gtk_label_set_text (GTK_LABEL (label), disp->str); + g_string_free (disp, TRUE); + +- g_variant_unref (v); ++ g_strfreev (variants); ++ g_strfreev (layouts); ++ g_object_unref (xkb_info); + + update_copy_button (dialog); + } +@@ -386,6 +426,11 @@ copy_settings (GtkButton *button, GtkBui + layout = g_object_get_data (G_OBJECT (label), "input_source"); + variants = g_object_get_data (G_OBJECT (label), "input_variants"); + ++ if (layout == NULL || layout[0] == '\0') { ++ g_debug ("Not calling SetX11Keyboard, as there are no XKB input sources in the user's settings"); ++ return; ++ } ++ + g_dbus_proxy_call (localed_proxy, + "SetX11Keyboard", + g_variant_new ("(ssssbb)", layout, "", variants ? variants : "", "", TRUE, TRUE), +@@ -468,10 +513,10 @@ setup_system (GtkBuilder *dialog) + G_CALLBACK (locale_settings_changed), dialog); + g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, locale_settings); + +- xkb_settings = g_settings_new (GKBD_KEYBOARD_SCHEMA); +- g_signal_connect (xkb_settings, "changed::layouts", +- G_CALLBACK (xkb_settings_changed), dialog); +- g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, xkb_settings); ++ input_sources_settings = g_settings_new ("org.cinnamon.desktop.input-sources"); ++ g_signal_connect (input_sources_settings, "changed::sources", ++ G_CALLBACK (input_sources_changed), dialog); ++ g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, input_sources_settings); + + /* Display user settings */ + language = cc_common_language_get_current_language (); +@@ -480,7 +525,7 @@ setup_system (GtkBuilder *dialog) + + locale_settings_changed (locale_settings, "region", dialog); + +- xkb_settings_changed (xkb_settings, "layouts", dialog); ++ input_sources_changed (input_sources_settings, "sources", dialog); + + bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); + g_dbus_proxy_new (bus, +diff -uNrp a/panels/region/cinnamon-region-panel-system.h b/panels/region/cinnamon-region-panel-system.h +--- a/panels/region/cinnamon-region-panel-system.h 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-system.h 2013-09-21 13:24:15.342949428 +0100 +@@ -19,8 +19,8 @@ + * 02110-1335, USA. + */ + +-#ifndef __GNOME_REGION_PANEL_SYSTEM_H +-#define __GNOME_REGION_PANEL_SYSTEM_H ++#ifndef __CINNAMON_REGION_PANEL_SYSTEM_H ++#define __CINNAMON_REGION_PANEL_SYSTEM_H + + #include <gtk/gtk.h> + +diff -uNrp a/panels/region/cinnamon-region-panel.ui b/panels/region/cinnamon-region-panel.ui +--- a/panels/region/cinnamon-region-panel.ui 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel.ui 2013-09-21 13:24:15.347949247 +0100 +@@ -162,27 +162,17 @@ + <style> + <class name="inline-toolbar"/> + </style> ++ <style> ++ <class name="inline-toolbar"/> ++ </style> + <child> + <object class="GtkToolButton" id="language_add"> ++ <property name="use_action_appearance">False</property> + <property name="visible">True</property> +- <property name="can_focus">False</property> + <property name="label" translatable="yes">Add Language</property> +- <property name="use_underline">True</property> +- <property name="icon_name">list-add-symbolic</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="homogeneous">True</property> +- </packing> +- </child> +- <child> +- <object class="GtkToolButton" id="language_remove"> +- <property name="visible">True</property> +- <property name="sensitive">False</property> + <property name="can_focus">False</property> +- <property name="label" translatable="yes">Remove Language</property> + <property name="use_underline">True</property> +- <property name="icon_name">list-remove-symbolic</property> ++ <property name="icon_name">list-add-symbolic</property> + </object> + <packing> + <property name="expand">False</property> +@@ -198,12 +188,13 @@ + </child> + <child> + <object class="GtkVBox" id="vbox3"> +- <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label23"> + <property name="visible">True</property> + <property name="can_focus">False</property> ++ <property name="use_underline">True</property> ++ <property name="label" translatable="yes">Add Language</property> + </object> + <packing> + <property name="expand">True</property> +@@ -212,23 +203,24 @@ + </packing> + </child> + <child> +- <object class="GtkButton" id="get_languages_button"> +- <property name="label" translatable="yes">button</property> ++ <object class="GtkLinkButton" id="linkbutton1"> ++ <property name="label" translatable="yes">Install languages...</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> ++ <property name="has_tooltip">True</property> + </object> + <packing> +- <property name="expand">True</property> ++ <property name="expand">False</property> + <property name="fill">True</property> +- <property name="position">13</property> ++ <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> +- <property name="position">2</property> ++ <property name="position">1</property> + </packing> + </child> + </object> +@@ -305,19 +297,19 @@ + </child> + <child> + <object class="GtkToolbar" id="region-toolbar"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> + <property name="toolbar_style">icons</property> + <property name="show_arrow">False</property> + <property name="icon_size">1</property> ++ <property name="visible">True</property> + <style> + <class name="inline-toolbar"/> + </style> + <child> + <object class="GtkToolButton" id="region_add"> ++ <property name="use_action_appearance">False</property> ++ <property name="label" translatable="yes">Add Region</property> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="label" translatable="yes">Add Region</property> + <property name="use_underline">True</property> + <property name="icon_name">list-add-symbolic</property> + </object> +@@ -328,10 +320,11 @@ + </child> + <child> + <object class="GtkToolButton" id="region_remove"> ++ <property name="use_action_appearance">False</property> + <property name="visible">True</property> ++ <property name="label" translatable="yes">Remove Region</property> + <property name="sensitive">False</property> + <property name="can_focus">False</property> +- <property name="label" translatable="yes">Remove Region</property> + <property name="use_underline">True</property> + <property name="icon_name">list-remove-symbolic</property> + </object> +@@ -373,18 +366,6 @@ + <property name="n_rows">9</property> + <property name="n_columns">2</property> + <child> +- <placeholder/> +- </child> +- <child> +- <placeholder/> +- </child> +- <child> +- <placeholder/> +- </child> +- <child> +- <placeholder/> +- </child> +- <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> +@@ -626,6 +607,12 @@ + <property name="height">1</property> + </packing> + </child> ++ <child> ++ <placeholder/> ++ </child> ++ <child> ++ <placeholder/> ++ </child> + </object> + <packing> + <property name="position">1</property> +@@ -643,36 +630,43 @@ + </packing> + </child> + <child> +- <object class="GtkVBox" id="vbox1"> ++ <object class="GtkVBox" id="vbox5"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="border_width">10</property> ++ <property name="border_width">12</property> + <property name="spacing">12</property> + <child> +- <placeholder/> ++ <object class="GtkLabel" id="label24"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">0</property> ++ <property name="label" translatable="yes">Select keyboards or other input sources</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">False</property> ++ <property name="position">0</property> ++ </packing> + </child> + <child> +- <object class="GtkHBox" id="hbox2"> ++ <object class="GtkHBox" id="hbox3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">12</property> + <child> +- <object class="GtkVBox" id="vbox7"> ++ <object class="GtkVBox" id="vbox6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> +- <object class="GtkScrolledWindow" id="xkb_layouts_swindow"> ++ <object class="GtkScrolledWindow" id="input_sources_swindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> +- <object class="GtkTreeView" id="xkb_layouts_selected"> ++ <object class="GtkTreeView" id="active_input_sources"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">False</property> +- <child internal-child="selection"> +- <object class="GtkTreeSelection" id="treeview-selection1"/> +- </child> + </object> + </child> + </object> +@@ -683,7 +677,7 @@ + </packing> + </child> + <child> +- <object class="GtkToolbar" id="layouts-toolbar"> ++ <object class="GtkToolbar" id="input-toolbar"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="toolbar_style">icons</property> +@@ -693,70 +687,166 @@ + <class name="inline-toolbar"/> + </style> + <child> +- <object class="GtkToolButton" id="xkb_layouts_add"> ++ <object class="GtkToolItem" id="i_s_ar_item"> + <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="label" translatable="yes">Add Layout</property> +- <property name="use_underline">True</property> +- <property name="icon_name">list-add-symbolic</property> ++ <child> ++ <object class="GtkBox" id="i_s_ar_box"> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkButton" id="input_source_add"> ++ <property name="visible">True</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject" id="i_s_a_a11y"> ++ <property name="accessible-name" translatable="yes">Add Input Source</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkImage" id="i_s_a_image"> ++ ++ <property name="visible">True</property> ++ <property name="icon-name">list-add-symbolic</property> ++ <property name="icon-size">1</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkButton" id="input_source_remove"> ++ <property name="visible">True</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject" id="i_s_r_a11y"> ++ <property name="accessible-name" translatable="yes">Remove Input Source</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkImage" id="i_s_r_image"> ++ <property name="visible">True</property> ++ <property name="icon-name">list-remove-symbolic</property> ++ <property name="icon-size">1</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> + </object> +- <packing> +- <property name="expand">False</property> +- <property name="homogeneous">True</property> +- </packing> + </child> ++ + <child> +- <object class="GtkToolButton" id="xkb_layouts_remove"> ++ <object class="GtkSeparatorToolItem" id="sep1"> + <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="label" translatable="yes">Remove Layout</property> +- <property name="use_underline">True</property> +- <property name="icon_name">list-remove-symbolic</property> ++ <property name="draw">False</property> + </object> + <packing> +- <property name="expand">False</property> +- <property name="homogeneous">True</property> ++ <property name="expand">True</property> + </packing> + </child> ++ + <child> +- <object class="GtkToolButton" id="xkb_layouts_move_up"> ++ <object class="GtkToolItem" id="i_s_ud_item"> + <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="label" translatable="yes">Move Up</property> +- <property name="use_underline">True</property> +- <property name="icon_name">go-up-symbolic</property> ++ <child> ++ <object class="GtkBox" id="i_s_ud_box"> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkButton" id="input_source_move_up"> ++ <property name="visible">True</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject" id="i_s_u_a11y"> ++ <property name="accessible-name" translatable="yes">Move Input Source Up</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkImage" id="i_s_u_image"> ++ ++ <property name="visible">True</property> ++ <property name="icon-name">go-up-symbolic</property> ++ <property name="icon-size">1</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkButton" id="input_source_move_down"> ++ <property name="visible">True</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject" id="i_s_d_a11y"> ++ <property name="accessible-name" translatable="yes">Move Input Source Down</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkImage" id="i_s_d_image"> ++ <property name="visible">True</property> ++ <property name="icon-name">go-down-symbolic</property> ++ <property name="icon-size">1</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> + </object> +- <packing> +- <property name="expand">False</property> +- <property name="homogeneous">True</property> +- </packing> + </child> ++ + <child> +- <object class="GtkToolButton" id="xkb_layouts_move_down"> ++ <object class="GtkSeparatorToolItem" id="sep2"> + <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="label" translatable="yes">Move Down</property> +- <property name="use_underline">True</property> +- <property name="icon_name">go-down-symbolic</property> ++ <property name="draw">False</property> ++ <property name="hexpand">True</property> + </object> + <packing> +- <property name="expand">False</property> +- <property name="homogeneous">True</property> ++ <property name="expand">True</property> + </packing> + </child> ++ + <child> +- <object class="GtkToolButton" id="xkb_layouts_show"> ++ <object class="GtkToolItem" id="i_s_sp_item"> + <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="label" translatable="yes">Preview Layout</property> +- <property name="use_underline">True</property> +- <property name="icon_name">input-keyboard-symbolic</property> ++ <child> ++ <object class="GtkBox" id="i_s_sp_box"> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkButton" id="input_source_settings"> ++ <property name="visible">True</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject" id="i_s_s_a11y"> ++ <property name="accessible-name" translatable="yes">Input Source Settings</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkImage" id="i_s_s_image"> ++ ++ <property name="visible">True</property> ++ <property name="icon_name">preferences-system-symbolic</property> ++ <property name="icon_size">1</property> ++ <property name="pixel_size">16</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkButton" id="input_source_show"> ++ <property name="visible">True</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject" id="i_s_p_a11y"> ++ <property name="accessible-name" translatable="yes">Show Keyboard Layout</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkImage" id="i_s_p_image"> ++ ++ <property name="visible">True</property> ++ <property name="icon_name">input-keyboard-symbolic</property> ++ <property name="icon-size">1</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> + </object> +- <packing> +- <property name="expand">False</property> +- <property name="homogeneous">True</property> +- </packing> + </child> ++ + </object> + <packing> + <property name="expand">False</property> +@@ -772,168 +862,111 @@ + </packing> + </child> + <child> +- <object class="GtkVBox" id="vbox33"> ++ <object class="GtkFrame" id="frame4"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="spacing">12</property> ++ <property name="label_xalign">0</property> ++ <property name="shadow_type">none</property> + <child> +- <object class="GtkVBox" id="vbox34"> ++ <object class="GtkAlignment" id="alignment3"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="spacing">6</property> ++ <property name="left_padding">12</property> + <child> +- <object class="GtkRadioButton" id="chk_same_group"> +- <property name="label" translatable="yes">Use the same layout for all windows</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">False</property> +- <property name="xalign">0</property> +- <property name="active">True</property> +- <property name="draw_indicator">True</property> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkRadioButton" id="chk_separate_group_per_window"> +- <property name="label" translatable="yes">Allow different layouts for individual windows</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">False</property> +- <property name="xalign">0</property> +- <property name="active">True</property> +- <property name="draw_indicator">True</property> +- <property name="group">chk_same_group</property> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">1</property> +- </packing> +- </child> +- <child> +- <object class="GtkAlignment" id="alignment1"> ++ <object class="GtkGrid" id="shortcuts-grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="left_padding">12</property> ++ <property name="margin_top">6</property> ++ <property name="row_spacing">6</property> ++ <property name="column_spacing">6</property> + <child> +- <object class="GtkVBox" id="vbox4"> ++ <object class="GtkLabel" id="prev-source-label"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <child> +- <object class="GtkRadioButton" id="chk_new_windows_default_layout"> +- <property name="label" translatable="yes">New windows use the default layout</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">False</property> +- <property name="xalign">0</property> +- <property name="active">True</property> +- <property name="draw_indicator">True</property> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkRadioButton" id="chk_new_windows_inherit_layout"> +- <property name="label" translatable="yes">New windows use the previous window's layout</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">False</property> +- <property name="xalign">0</property> +- <property name="active">True</property> +- <property name="draw_indicator">True</property> +- <property name="group">chk_new_windows_default_layout</property> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">1</property> +- </packing> +- </child> ++ <property name="xalign">0</property> ++ <property name="label" translatable="yes">Switch to previous source</property> + </object> ++ <packing> ++ <property name="left_attach">0</property> ++ <property name="top_attach">0</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="prev-source-shortcut-label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="halign">end</property> ++ <property name="hexpand">True</property> ++ <property name="label" translatable="yes">Ctrl+Alt+Space</property> ++ <style><class name="dim-label"/></style> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="top_attach">0</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="next-source-label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="xalign">0</property> ++ <property name="label" translatable="yes">Switch to next source</property> ++ </object> ++ <packing> ++ <property name="left_attach">0</property> ++ <property name="top_attach">1</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="next-source-shortcut-label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="halign">end</property> ++ <property name="hexpand">True</property> ++ <property name="label" translatable="yes">Ctrl+Alt+Shift+Space</property> ++ <style><class name="dim-label"/></style> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="top_attach">1</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLinkButton" id="jump-to-shortcuts"> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="label" translatable="yes">Shortcut Settings</property> ++ <property name="halign">end</property> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="top_attach">2</property> ++ <property name="width">1</property> ++ <property name="height">1</property> ++ </packing> + </child> + </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">True</property> +- <property name="position">2</property> +- </packing> + </child> + </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkLabel" id="label2"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- </object> +- <packing> +- <property name="expand">True</property> +- <property name="fill">False</property> +- <property name="position">1</property> +- </packing> + </child> +- <child> +- <object class="GtkHButtonBox" id="hbuttonbox2"> ++ <child type="label"> ++ <object class="GtkLabel" id="shortcuts-frame-label"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="spacing">6</property> +- <property name="layout_style">end</property> +- <child> +- <object class="GtkButton" id="xkb_layout_options"> +- <property name="label" translatable="yes">_Options...</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> +- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> +- <property name="has_tooltip">True</property> +- <property name="tooltip_markup" translatable="yes">View and edit keyboard layout options</property> +- <property name="tooltip_text" translatable="yes">View and edit keyboard layout options</property> +- <property name="use_underline">True</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkButton" id="xkb_reset_to_defaults"> +- <property name="label" translatable="yes">Reset to De_faults</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> +- <property name="has_tooltip">True</property> +- <property name="tooltip_markup" translatable="yes">Replace the current keyboard layout settings with the +-default settings</property> +- <property name="tooltip_text" translatable="yes">Replace the current keyboard layout settings with the +-default settings</property> +- <property name="use_underline">True</property> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="pack_type">end</property> +- <property name="position">1</property> +- <property name="secondary">True</property> +- </packing> +- </child> ++ <property name="label" translatable="yes">Shortcuts</property> ++ <property name="use_markup">True</property> ++ <attributes> ++ <attribute name="weight" value="bold"/> ++ </attributes> + </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">False</property> +- <property name="position">2</property> +- </packing> + </child> + </object> + <packing> +@@ -951,17 +984,17 @@ default settings</property> + </child> + </object> + <packing> +- <property name="position">2</property> ++ <property name="position">3</property> + </packing> + </child> + <child type="tab"> +- <object class="GtkLabel" id="label46"> ++ <object class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="label" translatable="yes">Keyboard Layouts</property> ++ <property name="label" translatable="yes">Input Sources</property> + </object> + <packing> +- <property name="position">2</property> ++ <property name="position">3</property> + <property name="tab_fill">False</property> + </packing> + </child> +@@ -974,9 +1007,6 @@ default settings</property> + <property name="column_spacing">12</property> + <property name="row_spacing">12</property> + <child> +- <placeholder/> +- </child> +- <child> + <object class="GtkLabel" id="system-title"> + <property name="visible">True</property> + <property name="can_focus">False</property> +@@ -1051,6 +1081,7 @@ default settings</property> + <property name="bottom_attach">2</property> + <property name="x_padding">3</property> + <property name="y_padding">3</property> ++ <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> +@@ -1060,6 +1091,7 @@ default settings</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="wrap">True</property> ++ <property name="width-chars">18</property> + </object> + <packing> + <property name="left_attach">1</property> +@@ -1068,6 +1100,7 @@ default settings</property> + <property name="bottom_attach">2</property> + <property name="x_padding">3</property> + <property name="y_padding">3</property> ++ <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> +@@ -1178,6 +1211,7 @@ default settings</property> + <property name="bottom_attach">2</property> + <property name="x_padding">3</property> + <property name="y_padding">3</property> ++ <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> +@@ -1187,6 +1221,7 @@ default settings</property> + <property name="xalign">0</property> + <property name="yalign">0</property> + <property name="wrap">True</property> ++ <property name="width-chars">18</property> + </object> + <packing> + <property name="left_attach">1</property> +@@ -1195,6 +1230,7 @@ default settings</property> + <property name="bottom_attach">2</property> + <property name="x_padding">3</property> + <property name="y_padding">3</property> ++ <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> +@@ -1254,6 +1290,7 @@ default settings</property> + <child> + <object class="GtkButton" id="copy_settings_button"> + <property name="label" translatable="yes">Copy Settings...</property> ++ <property name="use_action_appearance">False</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> +@@ -1269,9 +1306,12 @@ default settings</property> + <property name="y_padding">3</property> + </packing> + </child> ++ <child> ++ <placeholder/> ++ </child> + </object> + <packing> +- <property name="position">3</property> ++ <property name="position">4</property> + </packing> + </child> + <child type="tab"> +@@ -1281,7 +1321,7 @@ default settings</property> + <property name="label" translatable="yes">System</property> + </object> + <packing> +- <property name="position">3</property> ++ <property name="position">4</property> + <property name="tab_fill">False</property> + </packing> + </child> +@@ -1302,4 +1342,11 @@ default settings</property> + </object> + </child> + </object> ++ <object class="GtkSizeGroup" id="system-input-source-sizegroup"> ++ <property name="mode">vertical</property> ++ <widgets> ++ <widget name="user_input_source"/> ++ <widget name="system_input_source"/> ++ </widgets> ++ </object> + </interface> +diff -uNrp a/panels/region/cinnamon-region-panel-xkb.c b/panels/region/cinnamon-region-panel-xkb.c +--- a/panels/region/cinnamon-region-panel-xkb.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-xkb.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,190 +0,0 @@ +-/* cinnamon-region-panel-xkb.c +- * Copyright (C) 2003-2007 Sergey V. Udaltsov +- * +- * Written by: Sergey V. Udaltsov <svu@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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifdef HAVE_CONFIG_H +-# include <config.h> +-#endif +- +-#include <string.h> +-#include <gdk/gdkx.h> +-#include <glib/gi18n-lib.h> +- +-#include "cinnamon-region-panel-xkb.h" +- +-#include <libgnomekbd/gkbd-desktop-config.h> +- +-XklEngine *engine; +-XklConfigRegistry *config_registry; +- +-GkbdKeyboardConfig initial_config; +-GkbdDesktopConfig desktop_config; +- +-GSettings *xkb_keyboard_settings; +-GSettings *xkb_desktop_settings; +- +-char * +-xci_desc_to_utf8 (const XklConfigItem * ci) +-{ +- gchar *dd = g_strdup (ci->description); +- gchar *sd = g_strstrip (dd); +- gchar *rv = g_strdup (sd[0] == 0 ? ci->name : sd); +- g_free (dd); +- return rv; +-} +- +-static void +-cleanup_xkb_tabs (GtkBuilder * dialog, +- GObject *where_the_object_wa) +-{ +- gkbd_desktop_config_term (&desktop_config); +- gkbd_keyboard_config_term (&initial_config); +- g_object_unref (G_OBJECT (config_registry)); +- config_registry = NULL; +- /* Don't unref it here, or we'll crash if open the panel again */ +- engine = NULL; +- g_object_unref (G_OBJECT (xkb_keyboard_settings)); +- g_object_unref (G_OBJECT (xkb_desktop_settings)); +- xkb_keyboard_settings = NULL; +- xkb_desktop_settings = NULL; +-} +- +-static void +-reset_to_defaults (GtkWidget * button, GtkBuilder * dialog) +-{ +- GkbdKeyboardConfig empty_kbd_config; +- +- gkbd_keyboard_config_init (&empty_kbd_config, engine); +- gkbd_keyboard_config_save (&empty_kbd_config); +- gkbd_keyboard_config_term (&empty_kbd_config); +- +- g_settings_reset (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP); +- +- /* all the rest is g-s-d's business */ +-} +- +-static void +-chk_new_windows_inherit_layout_toggled (GtkWidget * +- chk_new_windows_inherit_layout, +- GtkBuilder * dialog) +-{ +- xkb_save_default_group (gtk_toggle_button_get_active +- (GTK_TOGGLE_BUTTON +- (chk_new_windows_inherit_layout)) ? -1 : +- 0); +-} +- +-void +-setup_xkb_tabs (GtkBuilder * dialog) +-{ +- GtkWidget *widget; +- GtkStyleContext *context; +- GtkWidget *chk_new_windows_inherit_layout; +- +- chk_new_windows_inherit_layout = WID ("chk_new_windows_inherit_layout"); +- +- xkb_desktop_settings = g_settings_new (GKBD_DESKTOP_SCHEMA); +- xkb_keyboard_settings = g_settings_new (GKBD_KEYBOARD_SCHEMA); +- +- engine = +- xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY +- (gdk_display_get_default ())); +- config_registry = xkl_config_registry_get_instance (engine); +- +- gkbd_desktop_config_init (&desktop_config, engine); +- gkbd_desktop_config_load (&desktop_config); +- +- xkl_config_registry_load (config_registry, +- desktop_config.load_extra_items); +- +- gkbd_keyboard_config_init (&initial_config, engine); +- gkbd_keyboard_config_load_from_x_initial (&initial_config, NULL); +- +- /* Set initial state */ +- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("chk_separate_group_per_window")), +- g_settings_get_boolean (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW)); +- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chk_new_windows_inherit_layout), +- xkb_get_default_group () < 0); +- +- g_settings_bind (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW, +- WID ("chk_separate_group_per_window"), "active", +- G_SETTINGS_BIND_DEFAULT); +- g_settings_bind (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW, +- WID ("chk_new_windows_inherit_layout"), "sensitive", +- G_SETTINGS_BIND_DEFAULT); +- g_settings_bind (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW, +- WID ("chk_new_windows_default_layout"), "sensitive", +- G_SETTINGS_BIND_DEFAULT); +- +- xkb_layouts_prepare_selected_tree (dialog); +- xkb_layouts_fill_selected_tree (dialog); +- +- xkb_layouts_register_buttons_handlers (dialog); +- g_signal_connect (G_OBJECT (WID ("xkb_reset_to_defaults")), +- "clicked", G_CALLBACK (reset_to_defaults), +- dialog); +- +- g_signal_connect (G_OBJECT (chk_new_windows_inherit_layout), +- "toggled", +- G_CALLBACK +- (chk_new_windows_inherit_layout_toggled), +- dialog); +- +- g_signal_connect_swapped (G_OBJECT (WID ("xkb_layout_options")), +- "clicked", +- G_CALLBACK (xkb_options_popup_dialog), +- dialog); +- +- xkb_layouts_register_conf_listener (dialog); +- xkb_options_register_conf_listener (dialog); +- +- g_object_weak_ref (G_OBJECT (WID ("region_notebook")), +- (GWeakNotify) cleanup_xkb_tabs, dialog); +- +- enable_disable_restoring (dialog); +- +- /* Setup junction between toolbar and treeview */ +- widget = WID ("xkb_layouts_swindow"); +- context = gtk_widget_get_style_context (widget); +- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM); +- widget = WID ("layouts-toolbar"); +- context = gtk_widget_get_style_context (widget); +- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP); +-} +- +-void +-enable_disable_restoring (GtkBuilder * dialog) +-{ +- GkbdKeyboardConfig gswic; +- gboolean enable; +- +- gkbd_keyboard_config_init (&gswic, engine); +- gkbd_keyboard_config_load (&gswic, NULL); +- +- enable = !gkbd_keyboard_config_equals (&gswic, &initial_config); +- +- gkbd_keyboard_config_term (&gswic); +- gtk_widget_set_sensitive (WID ("xkb_reset_to_defaults"), enable); +-} +diff -uNrp a/panels/region/cinnamon-region-panel-xkb.h b/panels/region/cinnamon-region-panel-xkb.h +--- a/panels/region/cinnamon-region-panel-xkb.h 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-xkb.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,96 +0,0 @@ +-/* cinnamon-region-panel-xkb.h +- * Copyright (C) 2003-2007 Sergey V Udaltsov +- * +- * Written by Sergey V. Udaltsov <svu@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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifndef __GNOME_KEYBOARD_PROPERTY_XKB_H +-#define __GNOME_KEYBOARD_PROPERTY_XKB_H +- +-#include <gtk/gtk.h> +- +-#include "libgnomekbd/gkbd-keyboard-config.h" +-#include "libgnomekbd/gkbd-util.h" +- +-G_BEGIN_DECLS +-#define CWID(s) GTK_WIDGET (gtk_builder_get_object (chooser_dialog, s)) +-#define WID(s) GTK_WIDGET (gtk_builder_get_object (dialog, s)) +-extern XklEngine *engine; +-extern XklConfigRegistry *config_registry; +-extern GSettings *xkb_keyboard_settings; +-extern GSettings *xkb_desktop_settings; +-extern GkbdKeyboardConfig initial_config; +- +-extern void setup_xkb_tabs (GtkBuilder * dialog); +- +-extern void xkb_layouts_fill_selected_tree (GtkBuilder * dialog); +- +-extern void xkb_layouts_register_buttons_handlers (GtkBuilder * dialog); +- +-extern void xkb_layouts_register_conf_listener (GtkBuilder * dialog); +- +-extern void xkb_options_register_conf_listener (GtkBuilder * dialog); +- +-extern void xkb_layouts_prepare_selected_tree (GtkBuilder * dialog); +- +-extern void xkb_options_load_options (GtkBuilder * dialog); +- +-extern void xkb_options_popup_dialog (GtkBuilder * dialog); +- +-extern char *xci_desc_to_utf8 (const XklConfigItem * ci); +- +-extern gchar *xkb_layout_description_utf8 (const gchar * visible); +- +-extern void enable_disable_restoring (GtkBuilder * dialog); +- +-extern void preview_toggled (GtkBuilder * dialog, GtkWidget * button); +- +-extern GtkWidget *xkb_layout_choose (GtkBuilder * dialog); +- +-extern void xkb_layout_chooser_response (GtkDialog *dialog, gint response_id); +- +-extern gchar **xkb_layouts_get_selected_list (void); +- +-extern gchar **xkb_options_get_selected_list (void); +- +-#define xkb_layouts_set_selected_list(list) \ +- g_settings_set_strv (xkb_keyboard_settings, \ +- GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS, \ +- (const gchar *const*)(list)) +- +-#define xkb_options_set_selected_list(list) \ +- g_settings_set_strv (xkb_keyboard_settings, \ +- GKBD_KEYBOARD_CONFIG_KEY_OPTIONS, \ +- (const gchar *const*)(list)) +- +-extern GtkWidget *xkb_layout_preview_create_widget (GtkBuilder * +- chooser_dialog); +- +-extern void xkb_layout_preview_update (GtkBuilder * chooser_dialog); +- +-extern void xkb_layout_preview_set_drawing_layout (GtkWidget * kbdraw, +- const gchar * id); +- +-extern gchar *xkb_layout_chooser_get_selected_id (GtkDialog *dialog); +- +-extern void xkb_save_default_group (gint group_no); +- +-extern gint xkb_get_default_group (void); +- +-G_END_DECLS +-#endif /* __GNOME_KEYBOARD_PROPERTY_XKB_H */ +diff -uNrp a/panels/region/cinnamon-region-panel-xkbltadd.c b/panels/region/cinnamon-region-panel-xkbltadd.c +--- a/panels/region/cinnamon-region-panel-xkbltadd.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-xkbltadd.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,495 +0,0 @@ +-/* cinnamon-region-panel-xkbltadd.c +- * Copyright (C) 2007 Sergey V. Udaltsov +- * +- * Written by: Sergey V. Udaltsov <svu@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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifdef HAVE_CONFIG_H +-# include <config.h> +-#endif +- +-#include <string.h> +- +-#include <libgnomekbd/gkbd-keyboard-drawing.h> +-#include <libgnomekbd/gkbd-util.h> +- +-#include "cinnamon-region-panel-xkb.h" +- +-enum { +- COMBO_BOX_MODEL_COL_SORT, +- COMBO_BOX_MODEL_COL_VISIBLE, +- COMBO_BOX_MODEL_COL_XKB_ID, +- COMBO_BOX_MODEL_COL_COUNTRY_DESC, +- COMBO_BOX_MODEL_COL_LANGUAGE_DESC +-}; +- +-static gchar **search_pattern_list = NULL; +- +-static GtkWidget *preview_dialog = NULL; +- +-static GRegex *left_bracket_regex = NULL; +- +-#define RESPONSE_PREVIEW 1 +- +-static void +-xkb_preview_destroy_callback (GtkWidget * widget) +-{ +- preview_dialog = NULL; +-} +- +-static gboolean +-xkb_layout_chooser_selection_dupe (GtkDialog * dialog) +-{ +- gchar *selected_id = +- (gchar *) xkb_layout_chooser_get_selected_id (dialog); +- gchar **layouts_list, **pl; +- gboolean rv = FALSE; +- if (selected_id == NULL) +- return rv; +- layouts_list = pl = xkb_layouts_get_selected_list (); +- while (pl && *pl) { +- if (!g_ascii_strcasecmp (*pl++, selected_id)) { +- rv = TRUE; +- break; +- } +- } +- g_strfreev (layouts_list); +- return rv; +-} +- +-void +-xkb_layout_chooser_response (GtkDialog * dialog, gint response) +-{ +- switch (response) +- case GTK_RESPONSE_OK:{ +- /* Handled by the main code */ +- break; +- case RESPONSE_PREVIEW:{ +- gchar *selected_id = (gchar *) +- xkb_layout_chooser_get_selected_id +- (dialog); +- +- if (selected_id != NULL) { +- if (preview_dialog == NULL) { +- preview_dialog = +- gkbd_keyboard_drawing_dialog_new +- (); +- g_signal_connect (G_OBJECT +- (preview_dialog), +- "destroy", +- G_CALLBACK +- (xkb_preview_destroy_callback), +- NULL); +- /* Put into the separate group to avoid conflict +- with modal parent */ +- gtk_window_group_add_window +- (gtk_window_group_new +- (), +- GTK_WINDOW +- (preview_dialog)); +- }; +- gkbd_keyboard_drawing_dialog_set_layout +- (preview_dialog, +- config_registry, selected_id); +- +- gtk_widget_show_all +- (preview_dialog); +- } +- } +- +- return; +- } +- if (preview_dialog != NULL) { +- gtk_widget_destroy (preview_dialog); +- } +- if (search_pattern_list != NULL) { +- g_strfreev (search_pattern_list); +- search_pattern_list = NULL; +- } +- gtk_widget_destroy (GTK_WIDGET (dialog)); +-} +- +-static gchar * +-xkl_create_description_from_list (const XklConfigItem * item, +- const XklConfigItem * subitem, +- const gchar * prop_name, +- const gchar * +- (*desc_getter) (const gchar * code)) +-{ +- gchar *rv = NULL, *code = NULL; +- gchar **list = NULL; +- const gchar *desc; +- +- if (subitem != NULL) +- list = +- (gchar +- **) (g_object_get_data (G_OBJECT (subitem), +- prop_name)); +- if (list == NULL || *list == 0) +- list = +- (gchar +- **) (g_object_get_data (G_OBJECT (item), prop_name)); +- +- /* First try the parent id as such */ +- desc = desc_getter (item->name); +- if (desc != NULL) { +- rv = g_utf8_strup (desc, -1); +- } else { +- code = g_utf8_strup (item->name, -1); +- desc = desc_getter (code); +- if (desc != NULL) { +- rv = g_utf8_strup (desc, -1); +- } +- g_free (code); +- } +- +- if (list == NULL || *list == 0) +- return rv; +- +- while (*list != 0) { +- code = *list++; +- desc = desc_getter (code); +- if (desc != NULL) { +- gchar *udesc = g_utf8_strup (desc, -1); +- if (rv == NULL) { +- rv = udesc; +- } else { +- gchar *orv = rv; +- rv = g_strdup_printf ("%s %s", rv, udesc); +- g_free (orv); +- g_free (udesc); +- } +- } +- } +- return rv; +-} +- +-static void +-xkl_layout_add_to_list (XklConfigRegistry * config, +- const XklConfigItem * item, +- const XklConfigItem * subitem, +- GtkBuilder * chooser_dialog) +-{ +- GtkListStore *list_store = +- GTK_LIST_STORE (gtk_builder_get_object (chooser_dialog, +- "layout_list_model")); +- GtkTreeIter iter; +- +- gchar *utf_variant_name = +- subitem ? +- xkb_layout_description_utf8 (gkbd_keyboard_config_merge_items +- (item->name, +- subitem->name)) : +- xci_desc_to_utf8 (item); +- +- const gchar *xkb_id = +- subitem ? gkbd_keyboard_config_merge_items (item->name, +- subitem->name) : +- item->name; +- +- gchar *country_desc = +- xkl_create_description_from_list (item, subitem, +- XCI_PROP_COUNTRY_LIST, +- xkl_get_country_name); +- gchar *language_desc = +- xkl_create_description_from_list (item, subitem, +- XCI_PROP_LANGUAGE_LIST, +- xkl_get_language_name); +- +- gchar *tmp = utf_variant_name; +- utf_variant_name = +- g_regex_replace_literal (left_bracket_regex, tmp, -1, 0, +- "<", 0, NULL); +- g_free (tmp); +- +- if (subitem +- && g_object_get_data (G_OBJECT (subitem), +- XCI_PROP_EXTRA_ITEM)) { +- gchar *buf = +- g_strdup_printf ("<i>%s</i>", utf_variant_name); +- gtk_list_store_insert_with_values (list_store, &iter, -1, +- COMBO_BOX_MODEL_COL_SORT, +- utf_variant_name, +- COMBO_BOX_MODEL_COL_VISIBLE, +- buf, +- COMBO_BOX_MODEL_COL_XKB_ID, +- xkb_id, +- COMBO_BOX_MODEL_COL_COUNTRY_DESC, +- country_desc, +- COMBO_BOX_MODEL_COL_LANGUAGE_DESC, +- language_desc, -1); +- g_free (buf); +- } else +- gtk_list_store_insert_with_values (list_store, &iter, +- -1, +- COMBO_BOX_MODEL_COL_SORT, +- utf_variant_name, +- COMBO_BOX_MODEL_COL_VISIBLE, +- utf_variant_name, +- COMBO_BOX_MODEL_COL_XKB_ID, +- xkb_id, +- COMBO_BOX_MODEL_COL_COUNTRY_DESC, +- country_desc, +- COMBO_BOX_MODEL_COL_LANGUAGE_DESC, +- language_desc, -1); +- g_free (utf_variant_name); +- g_free (country_desc); +- g_free (language_desc); +-} +- +-static void +-xkb_layout_filter_clear (GtkEntry * entry, +- GtkEntryIconPosition icon_pos, +- GdkEvent * event, gpointer user_data) +-{ +- gtk_entry_set_text (entry, ""); +-} +- +-static void +-xkb_layout_filter_changed (GtkBuilder * chooser_dialog) +-{ +- GtkTreeModelFilter *filtered_model = +- GTK_TREE_MODEL_FILTER (gtk_builder_get_object (chooser_dialog, +- "filtered_layout_list_model")); +- GtkWidget *xkb_layout_filter = CWID ("xkb_layout_filter"); +- const gchar *pattern = +- gtk_entry_get_text (GTK_ENTRY (xkb_layout_filter)); +- gchar *upattern = g_utf8_strup (pattern, -1); +- +- if (!g_strcmp0 (pattern, "")) { +- g_object_set (G_OBJECT (xkb_layout_filter), +- "secondary-icon-name", "edit-find-symbolic", +- "secondary-icon-activatable", FALSE, +- "secondary-icon-sensitive", FALSE, NULL); +- } else { +- g_object_set (G_OBJECT (xkb_layout_filter), +- "secondary-icon-name", "edit-clear-symbolic", +- "secondary-icon-activatable", TRUE, +- "secondary-icon-sensitive", TRUE, NULL); +- } +- +- if (search_pattern_list != NULL) +- g_strfreev (search_pattern_list); +- +- search_pattern_list = g_strsplit (upattern, " ", -1); +- g_free (upattern); +- +- gtk_tree_model_filter_refilter (filtered_model); +-} +- +-static void +-xkb_layout_chooser_selection_changed (GtkTreeSelection * selection, +- GtkBuilder * chooser_dialog) +-{ +- GList *selected_layouts = +- gtk_tree_selection_get_selected_rows (selection, NULL); +- GtkWidget *add_button = CWID ("btnOk"); +- GtkWidget *preview_button = CWID ("btnPreview"); +- gboolean anything_selected = g_list_length (selected_layouts) == 1; +- gboolean dupe = +- xkb_layout_chooser_selection_dupe (GTK_DIALOG +- (CWID +- ("xkb_layout_chooser"))); +- +- gtk_widget_set_sensitive (add_button, anything_selected && !dupe); +- gtk_widget_set_sensitive (preview_button, anything_selected); +-} +- +-static void +-xkb_layout_chooser_row_activated (GtkTreeView * tree_view, +- GtkTreePath * path, +- GtkTreeViewColumn * column, +- GtkBuilder * chooser_dialog) +-{ +- GtkWidget *add_button = CWID ("btnOk"); +- GtkWidget *dialog = CWID ("xkb_layout_chooser"); +- +- if (gtk_widget_is_sensitive (add_button)) +- gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); +-} +- +-static gboolean +-xkb_filter_layouts (GtkTreeModel * model, +- GtkTreeIter * iter, gpointer data) +-{ +- gchar *desc = NULL, *country_desc = NULL, *language_desc = +- NULL, **pattern; +- gboolean rv = TRUE; +- +- if (search_pattern_list == NULL || search_pattern_list[0] == NULL) +- return TRUE; +- +- gtk_tree_model_get (model, iter, +- COMBO_BOX_MODEL_COL_SORT, &desc, +- COMBO_BOX_MODEL_COL_COUNTRY_DESC, +- &country_desc, +- COMBO_BOX_MODEL_COL_LANGUAGE_DESC, +- &language_desc, -1); +- +- pattern = search_pattern_list; +- do { +- gboolean is_pattern_found = FALSE; +- gchar *udesc = g_utf8_strup (desc, -1); +- if (udesc != NULL && g_strstr_len (udesc, -1, *pattern)) { +- is_pattern_found = TRUE; +- } else if (country_desc != NULL +- && g_strstr_len (country_desc, -1, *pattern)) { +- is_pattern_found = TRUE; +- } else if (language_desc != NULL +- && g_strstr_len (language_desc, -1, *pattern)) { +- is_pattern_found = TRUE; +- } +- g_free (udesc); +- +- if (!is_pattern_found) { +- rv = FALSE; +- break; +- } +- +- } while (*++pattern != NULL); +- +- g_free (desc); +- g_free (country_desc); +- g_free (language_desc); +- return rv; +-} +- +-GtkWidget * +-xkb_layout_choose (GtkBuilder * dialog) +-{ +- GtkBuilder *chooser_dialog = gtk_builder_new (); +- GtkWidget *chooser, *xkb_filtered_layouts_list, *xkb_layout_filter; +- GtkTreeViewColumn *visible_column; +- GtkTreeSelection *selection; +- GtkListStore *model; +- GtkTreeModelFilter *filtered_model; +- gtk_builder_set_translation_domain (chooser_dialog, GETTEXT_PACKAGE); +- gtk_builder_add_from_file (chooser_dialog, CINNAMONCC_UI_DIR +- "/cinnamon-region-panel-layout-chooser.ui", +- NULL); +- chooser = CWID ("xkb_layout_chooser"); +- xkb_filtered_layouts_list = CWID ("xkb_filtered_layouts_list"); +- xkb_layout_filter = CWID ("xkb_layout_filter"); +- +- g_object_set_data (G_OBJECT (chooser), "xkb_filtered_layouts_list", +- xkb_filtered_layouts_list); +- visible_column = +- gtk_tree_view_column_new_with_attributes ("Layout", +- gtk_cell_renderer_text_new +- (), "markup", +- COMBO_BOX_MODEL_COL_VISIBLE, +- NULL); +- +- gtk_window_set_transient_for (GTK_WINDOW (chooser), +- GTK_WINDOW +- (gtk_widget_get_toplevel +- (WID ("region_notebook")))); +- +- gtk_tree_view_append_column (GTK_TREE_VIEW +- (xkb_filtered_layouts_list), +- visible_column); +- g_signal_connect_swapped (G_OBJECT (xkb_layout_filter), +- "notify::text", +- G_CALLBACK +- (xkb_layout_filter_changed), +- chooser_dialog); +- +- g_signal_connect (G_OBJECT (xkb_layout_filter), "icon-release", +- G_CALLBACK (xkb_layout_filter_clear), NULL); +- +- selection = +- gtk_tree_view_get_selection (GTK_TREE_VIEW +- (xkb_filtered_layouts_list)); +- +- g_signal_connect (G_OBJECT (selection), +- "changed", +- G_CALLBACK +- (xkb_layout_chooser_selection_changed), +- chooser_dialog); +- +- xkb_layout_chooser_selection_changed (selection, chooser_dialog); +- +- g_signal_connect (G_OBJECT (xkb_filtered_layouts_list), +- "row-activated", +- G_CALLBACK (xkb_layout_chooser_row_activated), +- chooser_dialog); +- +- filtered_model = +- GTK_TREE_MODEL_FILTER (gtk_builder_get_object +- (chooser_dialog, +- "filtered_layout_list_model")); +- model = +- GTK_LIST_STORE (gtk_builder_get_object +- (chooser_dialog, "layout_list_model")); +- +- left_bracket_regex = g_regex_new ("<", 0, 0, NULL); +- +- xkl_config_registry_search_by_pattern (config_registry, +- NULL, +- (TwoConfigItemsProcessFunc) +- (xkl_layout_add_to_list), +- chooser_dialog); +- +- g_regex_unref (left_bracket_regex); +- +- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), +- COMBO_BOX_MODEL_COL_SORT, +- GTK_SORT_ASCENDING); +- +- gtk_tree_model_filter_set_visible_func (filtered_model, +- xkb_filter_layouts, +- NULL, NULL); +- +- gtk_widget_grab_focus (xkb_layout_filter); +- +- gtk_widget_show (chooser); +- +- return chooser; +-} +- +-gchar * +-xkb_layout_chooser_get_selected_id (GtkDialog * dialog) +-{ +- GtkTreeModel *filtered_list_model; +- GtkWidget *xkb_filtered_layouts_list = +- g_object_get_data (G_OBJECT (dialog), +- "xkb_filtered_layouts_list"); +- GtkTreeIter viter; +- gchar *v_id; +- GtkTreeSelection *selection = +- gtk_tree_view_get_selection (GTK_TREE_VIEW +- (xkb_filtered_layouts_list)); +- GList *selected_layouts = +- gtk_tree_selection_get_selected_rows (selection, +- &filtered_list_model); +- +- if (g_list_length (selected_layouts) != 1) +- return NULL; +- +- gtk_tree_model_get_iter (filtered_list_model, +- &viter, +- (GtkTreePath *) (selected_layouts->data)); +- g_list_foreach (selected_layouts, +- (GFunc) gtk_tree_path_free, NULL); +- g_list_free (selected_layouts); +- +- gtk_tree_model_get (filtered_list_model, &viter, +- COMBO_BOX_MODEL_COL_XKB_ID, &v_id, -1); +- +- return v_id; +-} +diff -uNrp a/panels/region/cinnamon-region-panel-xkblt.c b/panels/region/cinnamon-region-panel-xkblt.c +--- a/panels/region/cinnamon-region-panel-xkblt.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-xkblt.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,470 +0,0 @@ +-/* cinnamon-region-panel-xkblt.c +- * Copyright (C) 2003-2007 Sergey V. Udaltsov +- * +- * Written by: Sergey V. Udaltsov <svu@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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifdef HAVE_CONFIG_H +-# include <config.h> +-#endif +- +-#include <gdk/gdkx.h> +-#include <glib/gi18n-lib.h> +- +-#include <libgnomekbd/gkbd-desktop-config.h> +-#include <libgnomekbd/gkbd-keyboard-drawing.h> +- +-#include "cinnamon-region-panel-xkb.h" +- +-enum { +- SEL_LAYOUT_TREE_COL_DESCRIPTION, +- SEL_LAYOUT_TREE_COL_ID, +- SEL_LAYOUT_TREE_COL_ENABLED, +- SEL_LAYOUT_N_COLS +-}; +- +-static int idx2select = -1; +-static int max_selected_layouts = -1; +- +-static GtkCellRenderer *text_renderer; +- +-static gboolean disable_buttons_sensibility_update = FALSE; +- +-static gboolean +-get_selected_iter (GtkBuilder *dialog, +- GtkTreeModel **model, +- GtkTreeIter *iter) +-{ +- GtkTreeSelection *selection; +- +- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("xkb_layouts_selected"))); +- +- return gtk_tree_selection_get_selected (selection, model, iter); +-} +- +-static void +-set_selected_path (GtkBuilder *dialog, +- GtkTreePath *path) +-{ +- GtkTreeSelection *selection; +- +- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("xkb_layouts_selected"))); +- +- gtk_tree_selection_select_path (selection, path); +-} +- +-static gint +-find_selected_layout_idx (GtkBuilder *dialog) +-{ +- GtkTreeIter selected_iter; +- GtkTreeModel *model; +- GtkTreePath *path; +- gint *indices; +- gint rv; +- +- if (!get_selected_iter (dialog, &model, &selected_iter)) +- return -1; +- +- path = gtk_tree_model_get_path (model, &selected_iter); +- if (path == NULL) +- return -1; +- +- indices = gtk_tree_path_get_indices (path); +- rv = indices[0]; +- gtk_tree_path_free (path); +- return rv; +-} +- +-gchar ** +-xkb_layouts_get_selected_list (void) +-{ +- gchar **retval; +- +- retval = g_settings_get_strv (xkb_keyboard_settings, +- GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS); +- if (retval == NULL || retval[0] == NULL) { +- g_strfreev (retval); +- retval = g_strdupv (initial_config.layouts_variants); +- } +- +- return retval; +-} +- +-gint +-xkb_get_default_group () +-{ +- return g_settings_get_int (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP); +-} +- +-void +-xkb_save_default_group (gint default_group) +-{ +- g_settings_set_int (xkb_desktop_settings, +- GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP, +- default_group); +-} +- +-static void +-xkb_layouts_enable_disable_buttons (GtkBuilder * dialog) +-{ +- GtkWidget *add_layout_btn = WID ("xkb_layouts_add"); +- GtkWidget *show_layout_btn = WID ("xkb_layouts_show"); +- GtkWidget *del_layout_btn = WID ("xkb_layouts_remove"); +- GtkWidget *selected_layouts_tree = WID ("xkb_layouts_selected"); +- GtkWidget *move_up_layout_btn = WID ("xkb_layouts_move_up"); +- GtkWidget *move_down_layout_btn = WID ("xkb_layouts_move_down"); +- +- GtkTreeSelection *s_selection = +- gtk_tree_view_get_selection (GTK_TREE_VIEW +- (selected_layouts_tree)); +- const int n_selected_selected_layouts = +- gtk_tree_selection_count_selected_rows (s_selection); +- GtkTreeModel *selected_layouts_model = gtk_tree_view_get_model +- (GTK_TREE_VIEW (selected_layouts_tree)); +- const int n_selected_layouts = +- gtk_tree_model_iter_n_children (selected_layouts_model, +- NULL); +- gint sidx = find_selected_layout_idx (dialog); +- +- if (disable_buttons_sensibility_update) +- return; +- +- gtk_widget_set_sensitive (add_layout_btn, +- (n_selected_layouts < +- max_selected_layouts +- || max_selected_layouts == 0)); +- gtk_widget_set_sensitive (del_layout_btn, (n_selected_layouts > 1) +- && (n_selected_selected_layouts > 0)); +- gtk_widget_set_sensitive (show_layout_btn, +- (n_selected_selected_layouts > 0)); +- gtk_widget_set_sensitive (move_up_layout_btn, sidx > 0); +- gtk_widget_set_sensitive (move_down_layout_btn, sidx >= 0 +- && sidx < (n_selected_layouts - 1)); +-} +- +-static void +-update_layouts_list (GtkTreeModel *model, +- GtkBuilder *dialog) +-{ +- gboolean cont; +- GtkTreeIter iter; +- GPtrArray *array; +- +- array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free); +- cont = gtk_tree_model_get_iter_first (model, &iter); +- while (cont) { +- char *id; +- +- gtk_tree_model_get (model, &iter, +- SEL_LAYOUT_TREE_COL_ID, &id, +- -1); +- g_ptr_array_add (array, id); +- cont = gtk_tree_model_iter_next (model, &iter); +- } +- g_ptr_array_add (array, NULL); +- xkb_layouts_set_selected_list (array->pdata); +- g_ptr_array_free (array, TRUE); +- +- xkb_layouts_enable_disable_buttons (dialog); +-} +- +-static void +-xkb_layouts_drag_end (GtkWidget *widget, +- GdkDragContext *drag_context, +- gpointer user_data) +-{ +- update_layouts_list (gtk_tree_view_get_model (GTK_TREE_VIEW (widget)), +- GTK_BUILDER (user_data)); +-} +- +-void +-xkb_layouts_prepare_selected_tree (GtkBuilder * dialog) +-{ +- GtkListStore *list_store; +- GtkWidget *tree_view = WID ("xkb_layouts_selected"); +- GtkTreeSelection *selection; +- GtkTreeViewColumn *desc_column; +- +- list_store = gtk_list_store_new (SEL_LAYOUT_N_COLS, +- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); +- +- text_renderer = GTK_CELL_RENDERER (gtk_cell_renderer_text_new ()); +- +- desc_column = +- gtk_tree_view_column_new_with_attributes (_("Layout"), +- text_renderer, +- "text", +- SEL_LAYOUT_TREE_COL_DESCRIPTION, +- "sensitive", +- SEL_LAYOUT_TREE_COL_ENABLED, +- NULL); +- selection = +- gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); +- +- gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), +- GTK_TREE_MODEL (list_store)); +- +- gtk_tree_view_column_set_sizing (desc_column, +- GTK_TREE_VIEW_COLUMN_AUTOSIZE); +- gtk_tree_view_column_set_resizable (desc_column, TRUE); +- gtk_tree_view_column_set_expand (desc_column, TRUE); +- +- gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), +- desc_column); +- +- g_signal_connect_swapped (G_OBJECT (selection), "changed", +- G_CALLBACK +- (xkb_layouts_enable_disable_buttons), +- dialog); +- max_selected_layouts = xkl_engine_get_max_num_groups (engine); +- +- /* Setting up DnD */ +- gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree_view), TRUE); +- g_signal_connect (G_OBJECT (tree_view), "drag-end", +- G_CALLBACK (xkb_layouts_drag_end), dialog); +-} +- +-gchar * +-xkb_layout_description_utf8 (const gchar * visible) +-{ +- char *l, *sl, *v, *sv; +- if (gkbd_keyboard_config_get_descriptions +- (config_registry, visible, &sl, &l, &sv, &v)) +- visible = +- gkbd_keyboard_config_format_full_description (l, v); +- return g_strstrip (g_strdup (visible)); +-} +- +-void +-xkb_layouts_fill_selected_tree (GtkBuilder * dialog) +-{ +- gchar **layouts = xkb_layouts_get_selected_list (); +- guint i; +- GtkListStore *list_store = +- GTK_LIST_STORE (gtk_tree_view_get_model +- (GTK_TREE_VIEW +- (WID ("xkb_layouts_selected")))); +- +- /* temporarily disable the buttons' status update */ +- disable_buttons_sensibility_update = TRUE; +- +- gtk_list_store_clear (list_store); +- +- for (i = 0; layouts != NULL && layouts[i] != NULL; i++) { +- char *cur_layout = layouts[i]; +- gchar *utf_visible = +- xkb_layout_description_utf8 (cur_layout); +- +- gtk_list_store_insert_with_values (list_store, NULL, G_MAXINT, +- SEL_LAYOUT_TREE_COL_DESCRIPTION, +- utf_visible, +- SEL_LAYOUT_TREE_COL_ID, +- cur_layout, +- SEL_LAYOUT_TREE_COL_ENABLED, +- i < max_selected_layouts, -1); +- g_free (utf_visible); +- } +- +- g_strfreev (layouts); +- +- /* enable the buttons' status update */ +- disable_buttons_sensibility_update = FALSE; +- +- if (idx2select != -1) { +- GtkTreeSelection *selection = +- gtk_tree_view_get_selection ((GTK_TREE_VIEW +- (WID +- ("xkb_layouts_selected")))); +- GtkTreePath *path = +- gtk_tree_path_new_from_indices (idx2select, -1); +- gtk_tree_selection_select_path (selection, path); +- gtk_tree_path_free (path); +- idx2select = -1; +- } else { +- /* if there is nothing to select - just enable/disable the buttons, +- otherwise it would be done by the selection change */ +- xkb_layouts_enable_disable_buttons (dialog); +- } +-} +- +-static void +-add_default_switcher_if_necessary () +-{ +- gchar **layouts_list = xkb_layouts_get_selected_list(); +- gchar **options_list = xkb_options_get_selected_list (); +- gboolean was_appended; +- +- options_list = +- gkbd_keyboard_config_add_default_switch_option_if_necessary +- (layouts_list, options_list, &was_appended); +- if (was_appended) +- xkb_options_set_selected_list (options_list); +- g_strfreev (options_list); +-} +- +-static void +-chooser_response (GtkDialog *chooser, +- int response_id, +- GtkBuilder *dialog) +-{ +- if (response_id == GTK_RESPONSE_OK) { +- char *id, *name; +- GtkListStore *list_store; +- +- list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (WID ("xkb_layouts_selected")))); +- id = xkb_layout_chooser_get_selected_id (chooser); +- name = xkb_layout_description_utf8 (id); +- gtk_list_store_insert_with_values (list_store, NULL, G_MAXINT, +- SEL_LAYOUT_TREE_COL_DESCRIPTION, name, +- SEL_LAYOUT_TREE_COL_ID, id, +- SEL_LAYOUT_TREE_COL_ENABLED, TRUE, +- -1); +- g_free (name); +- add_default_switcher_if_necessary (); +- update_layouts_list (GTK_TREE_MODEL (list_store), dialog); +- } +- +- xkb_layout_chooser_response (chooser, response_id); +-} +- +-static void +-add_selected_layout (GtkWidget * button, GtkBuilder * dialog) +-{ +- GtkWidget *chooser; +- +- chooser = xkb_layout_choose (dialog); +- g_signal_connect (G_OBJECT (chooser), "response", +- G_CALLBACK (chooser_response), dialog); +-} +- +-static void +-show_selected_layout (GtkWidget * button, GtkBuilder * dialog) +-{ +- gint idx = find_selected_layout_idx (dialog); +- +- if (idx != -1) { +- GtkWidget *parent = WID ("region_notebook"); +- GtkWidget *popup = gkbd_keyboard_drawing_dialog_new (); +- gkbd_keyboard_drawing_dialog_set_group (popup, +- config_registry, +- idx); +- gtk_window_set_transient_for (GTK_WINDOW (popup), +- GTK_WINDOW +- (gtk_widget_get_toplevel +- (parent))); +- gtk_widget_show_all (popup); +- } +-} +- +-static void +-remove_selected_layout (GtkWidget * button, GtkBuilder * dialog) +-{ +- GtkTreeModel *model; +- GtkTreeIter iter; +- +- if (get_selected_iter (dialog, &model, &iter) == FALSE) +- return; +- +- gtk_list_store_remove (GTK_LIST_STORE (model), &iter); +- update_layouts_list (model, dialog); +-} +- +-static void +-move_up_selected_layout (GtkWidget * button, GtkBuilder * dialog) +-{ +- GtkTreeModel *model; +- GtkTreeIter iter, prev; +- GtkTreePath *path; +- +- if (get_selected_iter (dialog, &model, &iter) == FALSE) +- return; +- +- prev = iter; +- if (!gtk_tree_model_iter_previous (model, &prev)) +- return; +- +- path = gtk_tree_model_get_path (model, &prev); +- +- gtk_list_store_swap (GTK_LIST_STORE (model), &iter, &prev); +- +- update_layouts_list (model, dialog); +- +- set_selected_path (dialog, path); +- +- gtk_tree_path_free (path); +-} +- +-static void +-move_down_selected_layout (GtkWidget * button, GtkBuilder * dialog) +-{ +- GtkTreeModel *model; +- GtkTreeIter iter, next; +- GtkTreePath *path; +- +- if (get_selected_iter (dialog, &model, &iter) == FALSE) +- return; +- +- next = iter; +- if (!gtk_tree_model_iter_next (model, &next)) +- return; +- +- path = gtk_tree_model_get_path (model, &next); +- +- gtk_list_store_swap (GTK_LIST_STORE (model), &iter, &next); +- +- update_layouts_list (model, dialog); +- +- set_selected_path (dialog, path); +- +- gtk_tree_path_free (path); +-} +- +-void +-xkb_layouts_register_buttons_handlers (GtkBuilder * dialog) +-{ +- g_signal_connect (G_OBJECT (WID ("xkb_layouts_add")), "clicked", +- G_CALLBACK (add_selected_layout), dialog); +- g_signal_connect (G_OBJECT (WID ("xkb_layouts_show")), "clicked", +- G_CALLBACK (show_selected_layout), dialog); +- g_signal_connect (G_OBJECT (WID ("xkb_layouts_remove")), "clicked", +- G_CALLBACK (remove_selected_layout), dialog); +- g_signal_connect (G_OBJECT (WID ("xkb_layouts_move_up")), +- "clicked", G_CALLBACK (move_up_selected_layout), +- dialog); +- g_signal_connect (G_OBJECT (WID ("xkb_layouts_move_down")), +- "clicked", +- G_CALLBACK (move_down_selected_layout), dialog); +-} +- +-static void +-xkb_layouts_update_list (GSettings * settings, +- gchar * key, GtkBuilder * dialog) +-{ +- if (strcmp (key, GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS) == 0) { +- xkb_layouts_fill_selected_tree (dialog); +- enable_disable_restoring (dialog); +- } +-} +- +-void +-xkb_layouts_register_conf_listener (GtkBuilder * dialog) +-{ +- g_signal_connect (xkb_keyboard_settings, "changed", +- G_CALLBACK (xkb_layouts_update_list), dialog); +-} +diff -uNrp a/panels/region/cinnamon-region-panel-xkbot.c b/panels/region/cinnamon-region-panel-xkbot.c +--- a/panels/region/cinnamon-region-panel-xkbot.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-xkbot.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,516 +0,0 @@ +-/* cinnamon-region-panel-xkbot.c +- * Copyright (C) 2003-2007 Sergey V. Udaltsov +- * +- * Written by: Sergey V. Udaltsov <svu@gnome.org> +- * John Spray <spray_john@users.sourceforge.net> +- * +- * 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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifdef HAVE_CONFIG_H +-# include <config.h> +-#endif +- +-#include <glib/gi18n-lib.h> +-#include <string.h> +- +-#include "cinnamon-region-panel-xkb.h" +- +-static GtkBuilder *chooser_dialog = NULL; +-static const char *current1st_level_id = NULL; +-static GSList *option_checks_list = NULL; +-static GtkWidget *current_none_radio = NULL; +-static GtkWidget *current_expander = NULL; +-static gboolean current_multi_select = FALSE; +-static GSList *current_radio_group = NULL; +- +-#define OPTION_ID_PROP "optionID" +-#define SELCOUNTER_PROP "selectionCounter" +-#define GCONFSTATE_PROP "gconfState" +-#define EXPANDERS_PROP "expandersList" +- +-gchar ** +-xkb_options_get_selected_list (void) +-{ +- gchar **retval; +- +- retval = +- g_settings_get_strv (xkb_keyboard_settings, +- GKBD_KEYBOARD_CONFIG_KEY_OPTIONS); +- if (retval == NULL) { +- retval = g_strdupv (initial_config.options); +- } +- +- return retval; +-} +- +-/* Returns the selection counter of the expander (static current_expander) */ +-static int +-xkb_options_expander_selcounter_get (void) +-{ +- return +- GPOINTER_TO_INT (g_object_get_data +- (G_OBJECT (current_expander), +- SELCOUNTER_PROP)); +-} +- +-/* Increments the selection counter in the expander (static current_expander) +- using the value (can be 0)*/ +-static void +-xkb_options_expander_selcounter_add (int value) +-{ +- g_object_set_data (G_OBJECT (current_expander), SELCOUNTER_PROP, +- GINT_TO_POINTER +- (xkb_options_expander_selcounter_get () +- + value)); +-} +- +-/* Resets the seletion counter in the expander (static current_expander) */ +-static void +-xkb_options_expander_selcounter_reset (void) +-{ +- g_object_set_data (G_OBJECT (current_expander), SELCOUNTER_PROP, +- GINT_TO_POINTER (0)); +-} +- +-/* Formats the expander (static current_expander), based on the selection counter */ +-static void +-xkb_options_expander_highlight (void) +-{ +- char *utf_group_name = +- g_object_get_data (G_OBJECT (current_expander), +- "utfGroupName"); +- int counter = xkb_options_expander_selcounter_get (); +- if (utf_group_name != NULL) { +- gchar *titlemarkup = +- g_strconcat (counter > +- 0 ? "<span weight=\"bold\">" : "<span>", +- utf_group_name, "</span>", NULL); +- gtk_expander_set_label (GTK_EXPANDER (current_expander), +- titlemarkup); +- g_free (titlemarkup); +- } +-} +- +-/* Add optionname from the backend's selection list if it's not +- already in there. */ +-static void +-xkb_options_select (gchar * optionname) +-{ +- gboolean already_selected = FALSE; +- gchar **options_list; +- guint i; +- +- options_list = xkb_options_get_selected_list (); +- for (i = 0; options_list != NULL && options_list[i] != NULL; i++) { +- gchar *option = options_list[i]; +- if (!strcmp (option, optionname)) { +- already_selected = TRUE; +- break; +- } +- } +- +- if (!already_selected) { +- options_list = +- gkbd_strv_append (options_list, g_strdup (optionname)); +- xkb_options_set_selected_list (options_list); +- } +- +- g_strfreev (options_list); +-} +- +-/* Remove all occurences of optionname from the backend's selection list */ +-static void +-xkb_options_deselect (gchar * optionname) +-{ +- gchar **options_list = xkb_options_get_selected_list (); +- if (options_list != NULL) { +- gchar **option = options_list; +- while (*option != NULL) { +- gchar *id = *option; +- if (!strcmp (id, optionname)) { +- gkbd_strv_behead (option); +- } else +- option++; +- } +- xkb_options_set_selected_list (options_list); +- } +- g_strfreev (options_list); +-} +- +-/* Return true if optionname describes a string already in the backend's +- list of selected options */ +-static gboolean +-xkb_options_is_selected (gchar * optionname) +-{ +- gboolean retval = FALSE; +- gchar **options_list = xkb_options_get_selected_list (); +- if (options_list != NULL) { +- gchar **option = options_list; +- while (*option != NULL) { +- if (!strcmp (*option, optionname)) { +- retval = TRUE; +- break; +- } +- option++; +- } +- } +- g_strfreev (options_list); +- return retval; +-} +- +-/* Make sure selected options stay visible when navigating with the keyboard */ +-static gboolean +-option_focused_cb (GtkWidget * widget, GdkEventFocus * event, +- gpointer data) +-{ +- GtkScrolledWindow *win = GTK_SCROLLED_WINDOW (data); +- GtkAllocation alloc; +- GtkAdjustment *adj; +- +- gtk_widget_get_allocation (widget, &alloc); +- adj = gtk_scrolled_window_get_vadjustment (win); +- gtk_adjustment_clamp_page (adj, alloc.y, alloc.y + alloc.height); +- +- return FALSE; +-} +- +-/* Update xkb backend to reflect the new UI state */ +-static void +-option_toggled_cb (GtkWidget * checkbutton, gpointer data) +-{ +- gpointer optionID = +- g_object_get_data (G_OBJECT (checkbutton), OPTION_ID_PROP); +- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton))) +- xkb_options_select (optionID); +- else +- xkb_options_deselect (optionID); +-} +- +-/* Add a check_button or radio_button to control a particular option +- This function makes particular use of the current... variables at +- the top of this file. */ +-static void +-xkb_options_add_option (XklConfigRegistry * config_registry, +- XklConfigItem * config_item, GtkBuilder * dialog) +-{ +- GtkWidget *option_check; +- gchar *utf_option_name = xci_desc_to_utf8 (config_item); +- /* Copy this out because we'll load it into the widget with set_data */ +- gchar *full_option_name = +- g_strdup (gkbd_keyboard_config_merge_items +- (current1st_level_id, config_item->name)); +- gboolean initial_state; +- +- if (current_multi_select) +- option_check = +- gtk_check_button_new_with_label (utf_option_name); +- else { +- if (current_radio_group == NULL) { +- /* The first radio in a group is to be "Default", meaning none of +- the below options are to be included in the selected list. +- This is a HIG-compliant alternative to allowing no +- selection in the group. */ +- option_check = +- gtk_radio_button_new_with_label +- (current_radio_group, _("Default")); +- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON +- (option_check), +- TRUE); +- /* Make option name underscore - +- to enforce its first position in the list */ +- g_object_set_data_full (G_OBJECT (option_check), +- "utfOptionName", +- g_strdup (" "), g_free); +- option_checks_list = +- g_slist_append (option_checks_list, +- option_check); +- current_radio_group = +- gtk_radio_button_get_group (GTK_RADIO_BUTTON +- (option_check)); +- current_none_radio = option_check; +- +- g_signal_connect (option_check, "focus-in-event", +- G_CALLBACK (option_focused_cb), +- WID ("options_scroll")); +- } +- option_check = +- gtk_radio_button_new_with_label (current_radio_group, +- utf_option_name); +- current_radio_group = +- gtk_radio_button_get_group (GTK_RADIO_BUTTON +- (option_check)); +- g_object_set_data (G_OBJECT (option_check), "NoneRadio", +- current_none_radio); +- } +- +- initial_state = xkb_options_is_selected (full_option_name); +- +- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (option_check), +- initial_state); +- +- g_object_set_data_full (G_OBJECT (option_check), OPTION_ID_PROP, +- full_option_name, g_free); +- g_object_set_data_full (G_OBJECT (option_check), "utfOptionName", +- utf_option_name, g_free); +- +- g_signal_connect (option_check, "toggled", +- G_CALLBACK (option_toggled_cb), NULL); +- +- option_checks_list = +- g_slist_append (option_checks_list, option_check); +- +- g_signal_connect (option_check, "focus-in-event", +- G_CALLBACK (option_focused_cb), +- WID ("options_scroll")); +- +- xkb_options_expander_selcounter_add (initial_state); +- g_object_set_data (G_OBJECT (option_check), GCONFSTATE_PROP, +- GINT_TO_POINTER (initial_state)); +-} +- +-static gint +-xkb_option_checks_compare (GtkWidget * chk1, GtkWidget * chk2) +-{ +- const gchar *t1 = +- g_object_get_data (G_OBJECT (chk1), "utfOptionName"); +- const gchar *t2 = +- g_object_get_data (G_OBJECT (chk2), "utfOptionName"); +- return g_utf8_collate (t1, t2); +-} +- +-/* Add a group of options: create title and layout widgets and then +- add widgets for all the options in the group. */ +-static void +-xkb_options_add_group (XklConfigRegistry * config_registry, +- XklConfigItem * config_item, GtkBuilder * dialog) +-{ +- GtkWidget *align, *vbox, *option_check; +- gboolean allow_multiple_selection = +- GPOINTER_TO_INT (g_object_get_data (G_OBJECT (config_item), +- XCI_PROP_ALLOW_MULTIPLE_SELECTION)); +- +- GSList *expanders_list = +- g_object_get_data (G_OBJECT (dialog), EXPANDERS_PROP); +- +- gchar *utf_group_name = xci_desc_to_utf8 (config_item); +- gchar *titlemarkup = +- g_strconcat ("<span>", utf_group_name, "</span>", NULL); +- +- current_expander = gtk_expander_new (titlemarkup); +- gtk_expander_set_use_markup (GTK_EXPANDER (current_expander), +- TRUE); +- g_object_set_data_full (G_OBJECT (current_expander), +- "utfGroupName", utf_group_name, g_free); +- g_object_set_data_full (G_OBJECT (current_expander), "groupId", +- g_strdup (config_item->name), g_free); +- +- g_free (titlemarkup); +- align = gtk_alignment_new (0, 0, 1, 1); +- gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 12, 12, 0); +- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); +- gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); +- gtk_container_add (GTK_CONTAINER (align), vbox); +- gtk_container_add (GTK_CONTAINER (current_expander), align); +- +- current_multi_select = (gboolean) allow_multiple_selection; +- current_radio_group = NULL; +- current1st_level_id = config_item->name; +- +- option_checks_list = NULL; +- +- xkl_config_registry_foreach_option (config_registry, +- config_item->name, +- (ConfigItemProcessFunc) +- xkb_options_add_option, +- dialog); +- /* sort it */ +- option_checks_list = +- g_slist_sort (option_checks_list, +- (GCompareFunc) xkb_option_checks_compare); +- while (option_checks_list) { +- option_check = GTK_WIDGET (option_checks_list->data); +- gtk_box_pack_start (GTK_BOX (vbox), option_check, TRUE, +- TRUE, 0); +- option_checks_list = option_checks_list->next; +- } +- /* free it */ +- g_slist_free (option_checks_list); +- option_checks_list = NULL; +- +- xkb_options_expander_highlight (); +- +- expanders_list = g_slist_append (expanders_list, current_expander); +- g_object_set_data (G_OBJECT (dialog), EXPANDERS_PROP, +- expanders_list); +- +- g_signal_connect (current_expander, "focus-in-event", +- G_CALLBACK (option_focused_cb), +- WID ("options_scroll")); +-} +- +-static gint +-xkb_options_expanders_compare (GtkWidget * expander1, +- GtkWidget * expander2) +-{ +- const gchar *t1 = +- g_object_get_data (G_OBJECT (expander1), "utfGroupName"); +- const gchar *t2 = +- g_object_get_data (G_OBJECT (expander2), "utfGroupName"); +- return g_utf8_collate (t1, t2); +-} +- +-/* Create widgets to represent the options made available by the backend */ +-void +-xkb_options_load_options (GtkBuilder * dialog) +-{ +- GtkWidget *opts_vbox = WID ("options_vbox"); +- GtkWidget *dialog_vbox = WID ("dialog_vbox"); +- GtkWidget *options_scroll = WID ("options_scroll"); +- GtkWidget *expander; +- GSList *expanders_list; +- +- current1st_level_id = NULL; +- current_none_radio = NULL; +- current_multi_select = FALSE; +- current_radio_group = NULL; +- +- /* fill the list */ +- xkl_config_registry_foreach_option_group (config_registry, +- (ConfigItemProcessFunc) +- xkb_options_add_group, +- dialog); +- /* sort it */ +- expanders_list = +- g_object_get_data (G_OBJECT (dialog), EXPANDERS_PROP); +- expanders_list = +- g_slist_sort (expanders_list, +- (GCompareFunc) xkb_options_expanders_compare); +- g_object_set_data (G_OBJECT (dialog), EXPANDERS_PROP, +- expanders_list); +- while (expanders_list) { +- expander = GTK_WIDGET (expanders_list->data); +- gtk_box_pack_start (GTK_BOX (opts_vbox), expander, FALSE, +- FALSE, 0); +- expanders_list = expanders_list->next; +- } +- +- /* Somewhere in gtk3 the top vbox in dialog is made non-expandable */ +- gtk_box_set_child_packing (GTK_BOX (dialog_vbox), options_scroll, +- TRUE, TRUE, 0, GTK_PACK_START); +- gtk_widget_show_all (dialog_vbox); +-} +- +-static void +-chooser_response_cb (GtkDialog * dialog, gint response, gpointer data) +-{ +- switch (response) { +- case GTK_RESPONSE_DELETE_EVENT: +- case GTK_RESPONSE_CLOSE: { +- /* just cleanup */ +- GSList *expanders_list = +- g_object_get_data (G_OBJECT (dialog), +- EXPANDERS_PROP); +- g_object_set_data (G_OBJECT (dialog), +- EXPANDERS_PROP, NULL); +- g_slist_free (expanders_list); +- +- gtk_widget_destroy (GTK_WIDGET (dialog)); +- chooser_dialog = NULL; +- } +- break; +- } +-} +- +-/* Create popup dialog */ +-void +-xkb_options_popup_dialog (GtkBuilder * dialog) +-{ +- GtkWidget *chooser; +- +- chooser_dialog = gtk_builder_new (); +- gtk_builder_set_translation_domain (chooser_dialog, GETTEXT_PACKAGE); +- gtk_builder_add_from_file (chooser_dialog, CINNAMONCC_UI_DIR +- "/cinnamon-region-panel-options-dialog.ui", +- NULL); +- +- chooser = CWID ("xkb_options_dialog"); +- gtk_window_set_transient_for (GTK_WINDOW (chooser), +- GTK_WINDOW (gtk_widget_get_toplevel (WID ("region_notebook")))); +- gtk_window_set_modal (GTK_WINDOW (chooser), TRUE); +- xkb_options_load_options (chooser_dialog); +- +- g_signal_connect (chooser, "response", +- G_CALLBACK (chooser_response_cb), dialog); +- gtk_widget_show (chooser); +-} +- +-/* Update selected option counters for a group-bound expander */ +-static void +-xkb_options_update_option_counters (XklConfigRegistry * config_registry, +- XklConfigItem * config_item) +-{ +- gchar *full_option_name = +- g_strdup (gkbd_keyboard_config_merge_items +- (current1st_level_id, config_item->name)); +- gboolean current_state = +- xkb_options_is_selected (full_option_name); +- g_free (full_option_name); +- +- xkb_options_expander_selcounter_add (current_state); +-} +- +-/* Respond to a change in the xkb gconf settings */ +-static void +-xkb_options_update (GSettings * settings, gchar * key, GtkBuilder * dialog) +-{ +- if (!strcmp (key, GKBD_KEYBOARD_CONFIG_KEY_OPTIONS)) { +- /* Updating options is handled by gconf notifies for each widget +- This is here to avoid calling it N_OPTIONS times for each gconf +- change. */ +- enable_disable_restoring (dialog); +- +- if (chooser_dialog != NULL) { +- GSList *expanders_list = +- g_object_get_data (G_OBJECT (chooser_dialog), +- EXPANDERS_PROP); +- while (expanders_list) { +- current_expander = +- GTK_WIDGET (expanders_list->data); +- gchar *group_id = +- g_object_get_data (G_OBJECT +- (current_expander), +- "groupId"); +- current1st_level_id = group_id; +- xkb_options_expander_selcounter_reset (); +- xkl_config_registry_foreach_option +- (config_registry, group_id, +- (ConfigItemProcessFunc) +- xkb_options_update_option_counters, +- current_expander); +- xkb_options_expander_highlight (); +- expanders_list = expanders_list->next; +- } +- } +- } +-} +- +-void +-xkb_options_register_conf_listener (GtkBuilder * dialog) +-{ +- g_signal_connect (xkb_keyboard_settings, "changed", +- G_CALLBACK (xkb_options_update), dialog); +-} +diff -uNrp a/panels/region/cinnamon-region-panel-xkbpv.c b/panels/region/cinnamon-region-panel-xkbpv.c +--- a/panels/region/cinnamon-region-panel-xkbpv.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/cinnamon-region-panel-xkbpv.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,120 +0,0 @@ +-/* cinnamon-region-panel-xkbpv.c +- * Copyright (C) 2003-2007 Sergey V. Udaltsov +- * +- * Written by: Sergey V. Udaltsov <svu@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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifdef HAVE_CONFIG_H +-# include <config.h> +-#endif +- +-#include <libgnomekbd/gkbd-keyboard-drawing.h> +- +-#include "cinnamon-region-panel-xkb.h" +- +-#ifdef HAVE_X11_EXTENSIONS_XKB_H +-#include "X11/XKBlib.h" +-/** +- * BAD STYLE: Taken from xklavier_private_xkb.h +- * Any ideas on architectural improvements are WELCOME +- */ +-extern gboolean xkl_xkb_config_native_prepare (XklEngine * engine, +- const XklConfigRec * data, +- XkbComponentNamesPtr +- component_names); +- +-extern void xkl_xkb_config_native_cleanup (XklEngine * engine, +- XkbComponentNamesPtr +- component_names); +- +-/* */ +-#endif +- +-static GkbdKeyboardDrawingGroupLevel groupsLevels[] = +- { {0, 1}, {0, 3}, {0, 0}, {0, 2} }; +-static GkbdKeyboardDrawingGroupLevel *pGroupsLevels[] = { +- groupsLevels, groupsLevels + 1, groupsLevels + 2, groupsLevels + 3 +-}; +- +-GtkWidget * +-xkb_layout_preview_create_widget (GtkBuilder * chooserDialog) +-{ +- GtkWidget *kbdraw = gkbd_keyboard_drawing_new (); +- +- gkbd_keyboard_drawing_set_groups_levels (GKBD_KEYBOARD_DRAWING +- (kbdraw), pGroupsLevels); +- return kbdraw; +-} +- +-void +-xkb_layout_preview_set_drawing_layout (GtkWidget * kbdraw, +- const gchar * id) +-{ +-#ifdef HAVE_X11_EXTENSIONS_XKB_H +- if (kbdraw != NULL) { +- if (id != NULL) { +- XklConfigRec *data; +- char **p, *layout, *variant; +- XkbComponentNamesRec component_names; +- +- data = xkl_config_rec_new (); +- if (xkl_config_rec_get_from_server (data, engine)) { +- if ((p = data->layouts) != NULL) +- g_strfreev (data->layouts); +- +- if ((p = data->variants) != NULL) +- g_strfreev (data->variants); +- +- data->layouts = g_new0 (char *, 2); +- data->variants = g_new0 (char *, 2); +- if (gkbd_keyboard_config_split_items +- (id, &layout, &variant) +- && variant != NULL) { +- data->layouts[0] = +- (layout == +- NULL) ? NULL : +- g_strdup (layout); +- data->variants[0] = +- (variant == +- NULL) ? NULL : +- g_strdup (variant); +- } else { +- data->layouts[0] = +- (id == +- NULL) ? NULL : g_strdup (id); +- data->variants[0] = NULL; +- } +- +- if (xkl_xkb_config_native_prepare +- (engine, data, &component_names)) { +- gkbd_keyboard_drawing_set_keyboard +- (GKBD_KEYBOARD_DRAWING +- (kbdraw), &component_names); +- +- xkl_xkb_config_native_cleanup +- (engine, &component_names); +- } +- } +- g_object_unref (G_OBJECT (data)); +- } else +- gkbd_keyboard_drawing_set_keyboard +- (GKBD_KEYBOARD_DRAWING (kbdraw), NULL); +- +- } +-#endif +-} +diff -uNrp a/panels/region/.indent.pro b/panels/region/.indent.pro +--- a/panels/region/.indent.pro 1970-01-01 01:00:00.000000000 +0100 ++++ b/panels/region/.indent.pro 2013-08-25 16:50:30.000000000 +0100 +@@ -0,0 +1,2 @@ ++-kr -i8 -pcs -lps -psl ++ +diff -uNrp a/panels/region/Makefile.am b/panels/region/Makefile.am +--- a/panels/region/Makefile.am 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/Makefile.am 2013-09-21 13:24:15.347949247 +0100 +@@ -23,12 +23,9 @@ libregion_la_SOURCES = \ + cinnamon-region-panel-lang.h \ + cinnamon-region-panel-system.c \ + cinnamon-region-panel-system.h \ +- cinnamon-region-panel-xkb.c \ +- cinnamon-region-panel-xkblt.c \ +- cinnamon-region-panel-xkbltadd.c \ +- cinnamon-region-panel-xkbot.c \ +- cinnamon-region-panel-xkbpv.c \ +- cinnamon-region-panel-xkb.h ++ cinnamon-region-panel-input.c \ ++ cinnamon-region-panel-input.h \ ++ $(NULL) + + libregion_la_LIBADD = $(PANEL_LIBS) $(REGION_PANEL_LIBS) $(builddir)/../common/liblanguage.la + +@@ -39,8 +36,8 @@ libregion_la_LDFLAGS = $(PANEL_LDFLAGS) + uidir = $(pkgdatadir)/ui + ui_DATA = \ + cinnamon-region-panel.ui \ +- cinnamon-region-panel-layout-chooser.ui \ +- cinnamon-region-panel-options-dialog.ui ++ cinnamon-region-panel-input-chooser.ui \ ++ $(NULL) + + desktopdir = $(datadir)/applications + Desktop_in_files = cinnamon-region-panel.desktop.in +diff -uNrp a/panels/region/region-module.c b/panels/region/region-module.c +--- a/panels/region/region-module.c 2013-08-25 14:40:14.000000000 +0100 ++++ b/panels/region/region-module.c 2013-09-21 13:24:15.347949247 +0100 +@@ -28,6 +28,7 @@ + void + g_io_module_load (GIOModule * module) + { ++ + /* register the panel */ + cc_region_panel_register (module); + } diff --git a/community/cinnamon-desktop/PKGBUILD b/community/cinnamon-desktop/PKGBUILD index 2efe73174..b492d4376 100644 --- a/community/cinnamon-desktop/PKGBUILD +++ b/community/cinnamon-desktop/PKGBUILD @@ -3,8 +3,8 @@ # Contributor: Jan de Groot <jan@archlinux.org> pkgname=cinnamon-desktop -pkgver=2.0.0 -pkgrel=2 +pkgver=2.0.1 +pkgrel=1 pkgdesc="Library with common API for various Cinnamon modules" arch=(i686 x86_64) license=(GPL LGPL) @@ -14,13 +14,12 @@ url="https://github.com/linuxmint/cinnamon-desktop" options=(!libtool) install=cinnamon-desktop.install source=("${pkgname}-${pkgver}.tar.gz::https://github.com/linuxmint/cinnamon-desktop/archive/${pkgver}.tar.gz") -sha256sums=('dd4ef4c14699a0566ae8e7e060a7db8574ef65dcdac80751de350788ea99ff3c') +sha256sums=('326bb7f02692a0baa21821ec70968be3cf70702d8330a7452aa03f9fbc851de1') build() { cd $pkgname-$pkgver ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --libexecdir=/usr/lib/$pkgname --disable-static \ - --with-gnome-distributor="Arch Linux" + --libexecdir=/usr/lib/$pkgname --disable-static make } diff --git a/community/cinnamon-session/PKGBUILD b/community/cinnamon-session/PKGBUILD index 944ecce02..21b5a827d 100644 --- a/community/cinnamon-session/PKGBUILD +++ b/community/cinnamon-session/PKGBUILD @@ -3,8 +3,8 @@ # Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> pkgname=cinnamon-session -pkgver=2.0.0 -pkgrel=2 +pkgver=2.0.1 +pkgrel=1 pkgdesc="The Cinnamon Session Handler" arch=(i686 x86_64) license=(GPL LGPL) @@ -14,20 +14,15 @@ options=('!emptydirs') install=cinnamon-session.install url="https://github.com/linuxmint/cinnamon-session" source=(${pkgname}-${pkgver}.tar.gz::https://github.com/linuxmint/cinnamon-session/archive/${pkgver}.tar.gz - lightdm_userswitch.patch remove_sessionmigration.patch timeout.patch) -sha256sums=('d1eba64a5484f086f257ee75799d12afd77373fbdb0ced8d3ae48eadcd02a878' - '20e42cbb5504f67b1da5e1867a220629bc2fe1699cfd52be177a557c4096440b' +sha256sums=('e1dd1bc044be28c2849041e7f1cd23b388442c77500a59baf57d244a6d81b88b' 'f3c0bc1a3debfaa686230f19ba371b08dd4645064d90ead0c34f465c7d416736' 'ef421a14814c7858490b3a806568ab4ec8a0dc21d390e94f801771c1261bb24a') prepare() { cd $pkgname-$pkgver - # Add support for lightdm user switching - patch -Np1 -i ../lightdm_userswitch.patch - # Do not try to execute session-migration script (it's specific to Ubuntu) patch -Np1 -i ../remove_sessionmigration.patch @@ -46,4 +41,8 @@ build() { package() { cd $pkgname-$pkgver make DESTDIR="$pkgdir" install + + # Prefix 'Startup Applications' with 'Cinnamon' to avoid confusion with gnome-session + sed -i 's/^Name\(.*\)=\(.*\)/Name\1=Cinnamon \2/' \ + "$pkgdir/usr/share/applications/cinnamon-session-properties.desktop" } diff --git a/community/cinnamon-settings-daemon/PKGBUILD b/community/cinnamon-settings-daemon/PKGBUILD index 127c715ba..0d3417363 100644 --- a/community/cinnamon-settings-daemon/PKGBUILD +++ b/community/cinnamon-settings-daemon/PKGBUILD @@ -4,25 +4,37 @@ pkgname=cinnamon-settings-daemon pkgver=2.0.1 -pkgrel=1 +pkgrel=2 pkgdesc="The Cinnamon Settings daemon" arch=('i686' 'x86_64') license=('GPL') -depends=('dconf' 'cinnamon-desktop' 'gsettings-desktop-schemas' 'hicolor-icon-theme' 'libcanberra-pulse' 'libnotify' - 'libsystemd' 'libwacom' 'pulseaudio' 'pulseaudio-alsa' 'upower' 'ibus' 'librsvg' 'libgweather' 'libxklavier' - 'libgnomekbd') -makedepends=('intltool' 'xf86-input-wacom' 'libxslt' 'docbook-xsl' 'gnome-common') +depends=('cinnamon-desktop' 'ibus' 'libcanberra-pulse' 'librsvg' 'nss' 'pulseaudio-alsa' 'upower') +makedepends=('intltool' 'docbook-xsl' 'gnome-common') options=('!emptydirs' '!libtool') install=cinnamon-settings-daemon.install url="https://github.com/linuxmint/cinnamon-settings-daemon" -source=("${pkgname}-${pkgver}.tar.gz::https://github.com/linuxmint/cinnamon-settings-daemon/archive/${pkgver}.tar.gz") -sha256sums=('f03f5ea46bec11a6a0ed02b232dab8cb99a84fd8a9b52a76a454a7ba74dc1168') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/linuxmint/cinnamon-settings-daemon/archive/${pkgver}.tar.gz" + keyboard.patch + automount-plugin.patch) +sha256sums=('f03f5ea46bec11a6a0ed02b232dab8cb99a84fd8a9b52a76a454a7ba74dc1168' + '3c05b978cb414c8fc1530f211bab58627a64ac9c156630c9d486f5926a85109c' + '0a6dfbea6f28e5107212a8e8091ded6a3b5b34b1710c11c2f04c4d02846f9398') + +prepare() { + cd $pkgname-$pkgver + + # Fix crasher + patch -Np1 -i ../keyboard.patch + + # Turn automount helper into a plugin + patch -Np1 -i ../automount-plugin.patch +} build() { cd $pkgname-$pkgver ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --libexecdir=/usr/lib/$pkgname --disable-static + --libexecdir=/usr/lib/$pkgname --disable-static --enable-systemd #https://bugzilla.gnome.org/show_bug.cgi?id=656231 sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool diff --git a/community/cinnamon-settings-daemon/automount-plugin.patch b/community/cinnamon-settings-daemon/automount-plugin.patch new file mode 100644 index 000000000..f6ca1181f --- /dev/null +++ b/community/cinnamon-settings-daemon/automount-plugin.patch @@ -0,0 +1,447 @@ +diff -Naur cinnamon-settings-daemon-2.0.1.orig/data/org.cinnamon.settings-daemon.plugins.gschema.xml.in.in cinnamon-settings-daemon-2.0.1/data/org.cinnamon.settings-daemon.plugins.gschema.xml.in.in +--- cinnamon-settings-daemon-2.0.1.orig/data/org.cinnamon.settings-daemon.plugins.gschema.xml.in.in 2013-10-02 16:13:56.000000000 +0200 ++++ cinnamon-settings-daemon-2.0.1/data/org.cinnamon.settings-daemon.plugins.gschema.xml.in.in 2013-10-08 22:49:15.438929150 +0200 +@@ -2,6 +2,7 @@ + <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.cinnamon.settings-daemon.plugins" path="/org/cinnamon/settings-daemon/plugins/"> + <child name="a11y-keyboard" schema="org.cinnamon.settings-daemon.plugins.a11y-keyboard"/> + <child name="a11y-settings" schema="org.cinnamon.settings-daemon.plugins.a11y-settings"/> ++ <child name="automount" schema="org.cinnamon.settings-daemon.plugins.automount"/> + <child name="background" schema="org.cinnamon.settings-daemon.plugins.background"/> + <child name="clipboard" schema="org.cinnamon.settings-daemon.plugins.clipboard"/> + <child name="color" schema="org.cinnamon.settings-daemon.plugins.color"/> +@@ -43,6 +44,18 @@ + <_summary>Priority to use for this plugin</_summary> + <_description>Priority to use for this plugin in cinnamon-settings-daemon startup queue</_description> + </key> ++ </schema> ++ <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.cinnamon.settings-daemon.plugins.automount" path="/org/cinnamon/settings-daemon/plugins/automount/"> ++ <key name="active" type="b"> ++ <default>true</default> ++ <_summary>Activation of this plugin</_summary> ++ <_description>Whether this plugin would be activated by cinnamon-settings-daemon or not</_description> ++ </key> ++ <key name="priority" type="i"> ++ <default>97</default> ++ <_summary>Priority to use for this plugin</_summary> ++ <_description>Priority to use for this plugin in cinnamon-settings-daemon startup queue</_description> ++ </key> + </schema> + <schema gettext-domain="@GETTEXT_PACKAGE@" id="org.cinnamon.settings-daemon.plugins.clipboard" path="/org/cinnamon/settings-daemon/plugins/clipboard/"> + <key name="active" type="b"> +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/automount.cinnamon-settings-plugin.in cinnamon-settings-daemon-2.0.1/plugins/automount/automount.cinnamon-settings-plugin.in +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/automount.cinnamon-settings-plugin.in 1970-01-01 01:00:00.000000000 +0100 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/automount.cinnamon-settings-plugin.in 2013-10-08 22:35:10.771472456 +0200 +@@ -0,0 +1,8 @@ ++[Cinnamon Settings Plugin] ++Module=automount ++IAge=0 ++_Name=Automount ++_Description=Automounter plugin ++Authors=Tomas Bzatek ++Copyright=Copyright © 2010 Red Hat, Inc. ++Website= +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/cinnamon-fallback-mount-helper.c cinnamon-settings-daemon-2.0.1/plugins/automount/cinnamon-fallback-mount-helper.c +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/cinnamon-fallback-mount-helper.c 2013-10-02 16:13:56.000000000 +0200 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/cinnamon-fallback-mount-helper.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,65 +0,0 @@ +-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- +- * +- * Copyright (C) 2010 Red Hat, Inc. +- * +- * 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 of the License, 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 Street, Suite 500, Boston, MA 02110-1335 USA +- * +- * Author: Tomas Bzatek <tbzatek@redhat.com> +- */ +- +-#include "config.h" +- +-#include <glib.h> +-#include <glib/gi18n.h> +-#include <unistd.h> +-#include <gtk/gtk.h> +- +-#include "csd-automount-manager.h" +- +-int +-main (int argc, +- char **argv) +-{ +- GMainLoop *loop; +- CsdAutomountManager *manager; +- GError *error = NULL; +- +- g_type_init (); +- gtk_init (&argc, &argv); +- +- bindtextdomain (GETTEXT_PACKAGE, CINNAMON_SETTINGS_LOCALEDIR); +- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); +- textdomain (GETTEXT_PACKAGE); +- +- loop = g_main_loop_new (NULL, FALSE); +- manager = csd_automount_manager_new (); +- +- csd_automount_manager_start (manager, &error); +- +- if (error != NULL) { +- g_printerr ("Unable to start the mount manager: %s", +- error->message); +- +- g_error_free (error); +- _exit (1); +- } +- +- g_main_loop_run (loop); +- +- csd_automount_manager_stop (manager); +- g_main_loop_unref (loop); +- +- return 0; +-} +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/cinnamon-fallback-mount-helper.desktop.in.in cinnamon-settings-daemon-2.0.1/plugins/automount/cinnamon-fallback-mount-helper.desktop.in.in +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/cinnamon-fallback-mount-helper.desktop.in.in 2013-10-02 16:13:56.000000000 +0200 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/cinnamon-fallback-mount-helper.desktop.in.in 1970-01-01 01:00:00.000000000 +0100 +@@ -1,12 +0,0 @@ +-[Desktop Entry] +-_Name=Mount Helper +-_Comment=Automount and autorun plugged devices +-Exec=@LIBEXECDIR@/cinnamon-fallback-mount-helper +-Icon=drive-optical +-Terminal=false +-Type=Application +-Categories= +-NoDisplay=true +-OnlyShowIn=GNOME; +-X-GNOME-Autostart-Notify=true +- +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/csd-automount-plugin.c cinnamon-settings-daemon-2.0.1/plugins/automount/csd-automount-plugin.c +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/csd-automount-plugin.c 1970-01-01 01:00:00.000000000 +0100 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/csd-automount-plugin.c 2013-10-08 22:35:10.771472456 +0200 +@@ -0,0 +1,106 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2010 Red Hat, Inc. ++ * ++ * 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 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ * Author: Tomas Bzatek <tbzatek@redhat.com> ++ */ ++ ++#include "config.h" ++ ++#include <glib/gi18n-lib.h> ++#include <gmodule.h> ++ ++#include "cinnamon-settings-plugin.h" ++#include "csd-automount-plugin.h" ++#include "csd-automount-manager.h" ++ ++struct CsdAutomountPluginPrivate { ++ CsdAutomountManager *manager; ++}; ++ ++#define CSD_AUTOMOUNT_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), CSD_TYPE_AUTOMOUNT_PLUGIN, CsdAutomountPluginPrivate)) ++ ++CINNAMON_SETTINGS_PLUGIN_REGISTER (CsdAutomountPlugin, csd_automount_plugin) ++ ++static void ++csd_automount_plugin_init (CsdAutomountPlugin *plugin) ++{ ++ plugin->priv = CSD_AUTOMOUNT_PLUGIN_GET_PRIVATE (plugin); ++ ++ g_debug ("Automount plugin initializing"); ++ ++ plugin->priv->manager = csd_automount_manager_new (); ++} ++ ++static void ++csd_automount_plugin_finalize (GObject *object) ++{ ++ CsdAutomountPlugin *plugin; ++ ++ g_return_if_fail (object != NULL); ++ g_return_if_fail (CSD_IS_AUTOMOUNT_PLUGIN (object)); ++ ++ g_debug ("Automount plugin finalizing"); ++ ++ plugin = CSD_AUTOMOUNT_PLUGIN (object); ++ ++ g_return_if_fail (plugin->priv != NULL); ++ ++ if (plugin->priv->manager != NULL) { ++ g_object_unref (plugin->priv->manager); ++ } ++ ++ G_OBJECT_CLASS (csd_automount_plugin_parent_class)->finalize (object); ++} ++ ++static void ++impl_activate (CinnamonSettingsPlugin *plugin) ++{ ++ gboolean res; ++ GError *error; ++ ++ g_debug ("Activating automount plugin"); ++ ++ error = NULL; ++ res = csd_automount_manager_start (CSD_AUTOMOUNT_PLUGIN (plugin)->priv->manager, &error); ++ if (! res) { ++ g_warning ("Unable to start automount manager: %s", error->message); ++ g_error_free (error); ++ } ++} ++ ++static void ++impl_deactivate (CinnamonSettingsPlugin *plugin) ++{ ++ g_debug ("Deactivating automount plugin"); ++ csd_automount_manager_stop (CSD_AUTOMOUNT_PLUGIN (plugin)->priv->manager); ++} ++ ++static void ++csd_automount_plugin_class_init (CsdAutomountPluginClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ CinnamonSettingsPluginClass *plugin_class = CINNAMON_SETTINGS_PLUGIN_CLASS (klass); ++ ++ object_class->finalize = csd_automount_plugin_finalize; ++ ++ plugin_class->activate = impl_activate; ++ plugin_class->deactivate = impl_deactivate; ++ ++ g_type_class_add_private (klass, sizeof (CsdAutomountPluginPrivate)); ++} ++ +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/csd-automount-plugin.h cinnamon-settings-daemon-2.0.1/plugins/automount/csd-automount-plugin.h +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/csd-automount-plugin.h 1970-01-01 01:00:00.000000000 +0100 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/csd-automount-plugin.h 2013-10-08 22:35:10.771472456 +0200 +@@ -0,0 +1,60 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2010 Red Hat, Inc. ++ * ++ * 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 of the License, 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ * ++ * Author: Tomas Bzatek <tbzatek@redhat.com> ++ */ ++ ++#ifndef __CSD_AUTOMOUNT_PLUGIN_H__ ++#define __CSD_AUTOMOUNT_PLUGIN_H__ ++ ++#include <glib.h> ++#include <glib-object.h> ++#include <gmodule.h> ++ ++#include "cinnamon-settings-plugin.h" ++ ++G_BEGIN_DECLS ++ ++#define CSD_TYPE_AUTOMOUNT_PLUGIN (csd_automount_plugin_get_type ()) ++#define CSD_AUTOMOUNT_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CSD_TYPE_AUTOMOUNT_PLUGIN, CsdAutomountPlugin)) ++#define CSD_AUTOMOUNT_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CSD_TYPE_AUTOMOUNT_PLUGIN, CsdAutomountPluginClass)) ++#define CSD_IS_AUTOMOUNT_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CSD_TYPE_AUTOMOUNT_PLUGIN)) ++#define CSD_IS_AUTOMOUNT_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CSD_TYPE_AUTOMOUNT_PLUGIN)) ++#define CSD_AUTOMOUNT_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CSD_TYPE_AUTOMOUNT_PLUGIN, CsdAutomountPluginClass)) ++ ++typedef struct CsdAutomountPluginPrivate CsdAutomountPluginPrivate; ++ ++typedef struct ++{ ++ CinnamonSettingsPlugin parent; ++ CsdAutomountPluginPrivate *priv; ++} CsdAutomountPlugin; ++ ++typedef struct ++{ ++ CinnamonSettingsPluginClass parent_class; ++} CsdAutomountPluginClass; ++ ++GType csd_automount_plugin_get_type (void) G_GNUC_CONST; ++ ++/* All the plugins must implement this function */ ++G_MODULE_EXPORT GType register_cinnamon_settings_plugin (GTypeModule *module); ++ ++G_END_DECLS ++ ++#endif /* __CSD_AUTOMOUNT_PLUGIN_H__ */ +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/Makefile.am cinnamon-settings-daemon-2.0.1/plugins/automount/Makefile.am +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/Makefile.am 2013-10-02 16:13:56.000000000 +0200 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/Makefile.am 2013-10-08 22:48:19.240865461 +0200 +@@ -1,38 +1,87 @@ +-libexec_PROGRAMS = cinnamon-fallback-mount-helper ++NULL = + +-cinnamon_fallback_mount_helper_SOURCES = \ +- cinnamon-fallback-mount-helper.c \ +- csd-automount-manager.c \ +- csd-automount-manager.h \ +- csd-autorun.c \ +- csd-autorun.h ++plugin_name = automount + +-cinnamon_fallback_mount_helper_CPPFLAGS = \ ++libexec_PROGRAMS = csd-test-automount ++ ++csd_test_automount_SOURCES = \ ++ test-automount.c \ ++ csd-automount-manager.h \ ++ csd-automount-manager.c \ ++ csd-autorun.c \ ++ csd-autorun.h \ ++ $(NULL) ++ ++csd_test_automount_CPPFLAGS = \ + -I$(top_srcdir)/cinnamon-settings-daemon \ ++ -I$(top_srcdir)/plugins/common \ + -DCINNAMON_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ + $(AM_CPPFLAGS) + +-cinnamon_fallback_mount_helper_CFLAGS = \ ++csd_test_automount_CFLAGS = \ ++ $(PLUGIN_CFLAGS) \ + $(SETTINGS_PLUGIN_CFLAGS) \ + $(SYSTEMD_CFLAGS) \ + $(AUTOMOUNT_CFLAGS) ++ $(AM_CFLAGS) ++ ++csd_test_automount_LDADD = \ ++ $(top_builddir)/cinnamon-settings-daemon/libcsd.la \ ++ $(SETTINGS_PLUGIN_LIBS) \ ++ $(SYSTEMD_LIBS) \ ++ $(AUTOMOUNT_LIBS) \ ++ $(NULL) ++ ++plugin_LTLIBRARIES = \ ++ libautomount.la \ ++ $(NULL) ++ ++libautomount_la_SOURCES = \ ++ csd-automount-plugin.h \ ++ csd-automount-plugin.c \ ++ csd-automount-manager.h \ ++ csd-automount-manager.c \ ++ csd-autorun.c \ ++ csd-autorun.h \ ++ $(NULL) ++ ++libautomount_la_CPPFLAGS = \ ++ -I$(top_srcdir)/cinnamon-settings-daemon \ ++ -DCINNAMON_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ ++ $(AM_CPPFLAGS) ++ ++libautomount_la_CFLAGS = \ ++ $(SETTINGS_PLUGIN_CFLAGS) \ ++ $(SYSTEMD_CFLAGS) \ ++ $(AUTOMOUNT_CFLAGS) \ ++ $(AM_CFLAGS) ++ ++libautomount_la_LDFLAGS = \ ++ $(CSD_PLUGIN_LDFLAGS) \ ++ $(NULL) + +-cinnamon_fallback_mount_helper_LDADD = \ ++libautomount_la_LIBADD = \ + $(SETTINGS_PLUGIN_LIBS) \ + $(SYSTEMD_LIBS) \ + $(AUTOMOUNT_LIBS) \ +- $(top_builddir)/cinnamon-settings-daemon/libcsd.la ++ $(NULL) + +-autostartdir = $(sysconfdir)/xdg/autostart +-autostart_in_files = cinnamon-fallback-mount-helper.desktop.in +-autostart_in_in_files = cinnamon-fallback-mount-helper.desktop.in.in +-autostart_DATA = $(autostart_in_files:.desktop.in=.desktop) ++plugin_in_files = \ ++ automount.cinnamon-settings-plugin.in \ ++ $(NULL) + +-$(autostart_in_files): $(autostart_in_in_files) +- @sed -e "s|\@LIBEXECDIR\@|$(libexecdir)|" $< > $@ ++plugin_DATA = $(plugin_in_files:.cinnamon-settings-plugin.in=.cinnamon-settings-plugin) + +-@INTLTOOL_DESKTOP_RULE@ ++EXTRA_DIST = \ ++ $(plugin_in_files) \ ++ $(NULL) + +-EXTRA_DIST = $(autostart_in_in_files) ++CLEANFILES = \ ++ $(plugin_DATA) \ ++ $(NULL) + +-CLEANFILES = $(autostart_DATA) $(autostart_in_files) ++DISTCLEANFILES = \ ++ $(plugin_DATA) \ ++ $(NULL) ++ ++@CSD_INTLTOOL_PLUGIN_RULE@ +diff -Naur cinnamon-settings-daemon-2.0.1.orig/plugins/automount/test-automount.c cinnamon-settings-daemon-2.0.1/plugins/automount/test-automount.c +--- cinnamon-settings-daemon-2.0.1.orig/plugins/automount/test-automount.c 1970-01-01 01:00:00.000000000 +0100 ++++ cinnamon-settings-daemon-2.0.1/plugins/automount/test-automount.c 2013-10-08 22:42:53.759486525 +0200 +@@ -0,0 +1,7 @@ ++#define NEW csd_automount_manager_new ++#define START csd_automount_manager_start ++#define STOP csd_automount_manager_stop ++#define MANAGER CsdAutomountManager ++#include "csd-automount-manager.h" ++ ++#include "test-plugin.h" +diff -Naur cinnamon-settings-daemon-2.0.1.orig/po/POTFILES.in cinnamon-settings-daemon-2.0.1/po/POTFILES.in +--- cinnamon-settings-daemon-2.0.1.orig/po/POTFILES.in 2013-10-02 16:13:56.000000000 +0200 ++++ cinnamon-settings-daemon-2.0.1/po/POTFILES.in 2013-10-08 22:35:10.771472456 +0200 +@@ -18,8 +18,9 @@ + plugins/a11y-keyboard/csd-a11y-preferences-dialog.c + [type: gettext/glade]plugins/a11y-keyboard/csd-a11y-preferences-dialog.ui + [type: gettext/ini]plugins/a11y-settings/a11y-settings.cinnamon-settings-plugin.in +-plugins/automount/cinnamon-fallback-mount-helper.desktop.in.in ++[type: gettext/ini]plugins/automount/automount.cinnamon-settings-plugin.in + plugins/automount/csd-automount-manager.c ++plugins/automount/csd-automount-plugin.c + plugins/automount/csd-autorun.c + [type: gettext/ini]plugins/background/background.cinnamon-settings-plugin.in + [type: gettext/ini]plugins/clipboard/clipboard.cinnamon-settings-plugin.in +diff -Naur cinnamon-settings-daemon-2.0.1.orig/po/POTFILES.skip cinnamon-settings-daemon-2.0.1/po/POTFILES.skip +--- cinnamon-settings-daemon-2.0.1.orig/po/POTFILES.skip 2013-10-02 16:13:56.000000000 +0200 ++++ cinnamon-settings-daemon-2.0.1/po/POTFILES.skip 2013-10-08 22:37:20.224645009 +0200 +@@ -20,6 +20,5 @@ + data/org.cinnamon.settings-daemon.plugins.updates.gschema.xml.in + data/org.cinnamon.settings-daemon.plugins.xrandr.gschema.xml.in + data/org.cinnamon.settings-daemon.plugins.xsettings.gschema.xml.in +-plugins/automount/gnome-fallback-mount-helper.desktop.in + plugins/power/org.cinnamon.settings-daemon.plugins.power.policy.in + plugins/wacom/org.cinnamon.settings-daemon.plugins.wacom.policy.in diff --git a/community/cinnamon-settings-daemon/keyboard.patch b/community/cinnamon-settings-daemon/keyboard.patch new file mode 100644 index 000000000..927910d8a --- /dev/null +++ b/community/cinnamon-settings-daemon/keyboard.patch @@ -0,0 +1,4728 @@ +diff -uNrp a/cinnamon-settings-daemon/main.c b/cinnamon-settings-daemon/main.c +--- a/cinnamon-settings-daemon/main.c 2013-08-24 18:04:31.000000000 +0100 ++++ b/cinnamon-settings-daemon/main.c 2013-08-25 16:36:02.000000000 +0100 +@@ -319,6 +319,29 @@ set_legacy_ibus_env_vars (GDBusProxy *pr + } + #endif + ++static void ++got_session_proxy (GObject *source_object, ++ GAsyncResult *res, ++ gpointer user_data) ++{ ++ GDBusProxy *proxy; ++ GError *error = NULL; ++ ++ proxy = g_dbus_proxy_new_finish (res, &error); ++ if (proxy == NULL) { ++ g_debug ("Could not connect to the Session manager: %s", error->message); ++ g_error_free (error); ++ } else { ++ set_locale (proxy); ++#ifdef HAVE_IBUS ++ /* This will register with cinnamon-session after calling Setenv. */ ++ set_legacy_ibus_env_vars (proxy); ++#else ++ register_with_gnome_session (proxy); ++#endif ++ } ++} ++ + static gboolean + on_term_signal_pipe_closed (GIOChannel *source, + GIOCondition condition, +@@ -368,6 +391,16 @@ set_session_over_handler (GDBusConnectio + { + g_assert (bus != NULL); + ++ g_dbus_proxy_new (bus, ++ G_DBUS_PROXY_FLAGS_NONE, ++ NULL, ++ GNOME_SESSION_DBUS_NAME, ++ GNOME_SESSION_DBUS_OBJECT, ++ GNOME_SESSION_DBUS_INTERFACE, ++ NULL, ++ (GAsyncReadyCallback) got_session_proxy, ++ NULL); ++ + watch_for_term_signal (manager); + } + +@@ -390,56 +423,6 @@ name_lost_handler (GDBusConnection *conn + gtk_main_quit (); + } + +-static gboolean +-do_register_client (gpointer user_data) +-{ +- GDBusProxy *proxy = (GDBusProxy *) user_data; +- g_assert (proxy != NULL); +- +- const char *startup_id = g_getenv ("DESKTOP_AUTOSTART_ID"); +- g_dbus_proxy_call (proxy, +- "RegisterClient", +- g_variant_new ("(ss)", "cinnamon-settings-daemon", startup_id ? startup_id : ""), +- G_DBUS_CALL_FLAGS_NONE, +- -1, +- NULL, +- (GAsyncReadyCallback) on_client_registered, +- manager); +- +- return FALSE; +-} +- +-static void +-queue_register_client (void) +-{ +- GDBusConnection *bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); +- if (!bus) +- return; +- +- GError *error = NULL; +- GDBusProxy *proxy = g_dbus_proxy_new_sync (bus, +- G_DBUS_PROXY_FLAGS_NONE, +- NULL, +- GNOME_SESSION_DBUS_NAME, +- GNOME_SESSION_DBUS_OBJECT, +- GNOME_SESSION_DBUS_INTERFACE, +- NULL, +- &error); +- g_object_unref (bus); +- +- if (proxy == NULL) { +- g_debug ("Could not connect to the Session manager: %s", error->message); +- g_error_free (error); +- return; +- } +- +- /* Register the daemon with cinnamon-session */ +- g_signal_connect (G_OBJECT (proxy), "g-signal", +- G_CALLBACK (on_session_over), NULL); +- +- g_idle_add_full (G_PRIORITY_DEFAULT, do_register_client, proxy, NULL); +-} +- + static void + bus_register (void) + { +@@ -541,8 +524,6 @@ main (int argc, char *argv[]) + + notify_init ("cinnamon-settings-daemon"); + +- queue_register_client (); +- + bus_register (); + + cinnamon_settings_profile_start ("cinnamon_settings_manager_new"); +diff -uNrp a/configure.ac b/configure.ac +--- a/configure.ac 2013-08-24 18:04:31.000000000 +0100 ++++ b/configure.ac 2013-08-25 16:36:02.000000000 +0100 +@@ -53,6 +53,7 @@ UPOWER_GLIB_REQUIRED_VERSION=0.9.1 + PA_REQUIRED_VERSION=0.9.16 + UPOWER_REQUIRED_VERSION=0.9.11 + GTK_XINPUT_2_3_VERSION=3.7.8 ++IBUS_REQUIRED_VERSION=1.4.2 + + #EXTRA_COMPILE_WARNINGS(yes) + +@@ -199,8 +200,21 @@ dnl ------------------------------------ + dnl - Keyboard plugin stuff + dnl --------------------------------------------------------------------------- + +-LIBGNOMEKBD_REQUIRED=2.91.1 +-PKG_CHECK_MODULES(KEYBOARD, [libgnomekbdui >= $LIBGNOMEKBD_REQUIRED libgnomekbd >= $LIBGNOMEKBD_REQUIRED libxklavier >= 5.0 kbproto]) ++AC_ARG_ENABLE(ibus, ++ AS_HELP_STRING([--disable-ibus], ++ [Disable IBus support]), ++ enable_ibus=$enableval, ++ enable_ibus=yes) ++ ++if test "x$enable_ibus" = "xyes" ; then ++ IBUS_MODULE="ibus-1.0 >= $IBUS_REQUIRED_VERSION" ++ AC_DEFINE(HAVE_IBUS, 1, [Defined if IBus support is enabled]) ++else ++ IBUS_MODULE= ++fi ++AM_CONDITIONAL(HAVE_IBUS, test "x$enable_ibus" == "xyes") ++ ++PKG_CHECK_MODULES(KEYBOARD, xkbfile $IBUS_MODULE cinnamon-desktop >= $CINNAMON_DESKTOP_REQUIRED_VERSION) + + dnl --------------------------------------------------------------------------- + dnl - Housekeeping plugin stuff +diff -uNrp a/data/org.cinnamon.settings-daemon.plugins.media-keys.gschema.xml.in.in b/data/org.cinnamon.settings-daemon.plugins.media-keys.gschema.xml.in.in +--- a/data/org.cinnamon.settings-daemon.plugins.media-keys.gschema.xml.in.in 2013-08-24 18:04:31.000000000 +0100 ++++ b/data/org.cinnamon.settings-daemon.plugins.media-keys.gschema.xml.in.in 2013-08-25 16:36:02.000000000 +0100 +@@ -175,6 +175,15 @@ + <_summary>Magnifier zoom out</_summary> + <_description>Binding for the magnifier to zoom out</_description> + </key> ++ <key name="switch-input-source" type="s"> ++ <default>''</default> ++ <_summary>Switch input source</_summary> ++ <_description>Binding to select the next input source</_description> ++ </key> ++ <key name="switch-input-source-backward" type="s"> ++ <default>''</default> ++ <_summary>Switch input source backward</_summary> ++ <_description>Binding to select the previous input source</_description> ++ </key> + </schema> +- +-</schemalist> ++</schemalist> +\ No newline at end of file +diff -uNrp a/plugins/keyboard/csd-keyboard-manager.c b/plugins/keyboard/csd-keyboard-manager.c +--- a/plugins/keyboard/csd-keyboard-manager.c 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/csd-keyboard-manager.c 2013-08-25 16:36:02.000000000 +0100 +@@ -40,19 +40,22 @@ + + #include <X11/XKBlib.h> + #include <X11/keysym.h> ++#include <X11/extensions/XKBrules.h> ++ ++#define GNOME_DESKTOP_USE_UNSTABLE_API ++#include <libcinnamon-desktop/gnome-xkb-info.h> ++ ++#ifdef HAVE_IBUS ++#include <ibus.h> ++#endif + + #include "cinnamon-settings-profile.h" + #include "csd-keyboard-manager.h" ++#include "csd-input-helper.h" + #include "csd-enums.h" + +-#include "csd-keyboard-xkb.h" +- + #define CSD_KEYBOARD_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CSD_TYPE_KEYBOARD_MANAGER, CsdKeyboardManagerPrivate)) + +-#ifndef HOST_NAME_MAX +-# define HOST_NAME_MAX 255 +-#endif +- + #define CSD_KEYBOARD_DIR "org.cinnamon.settings-daemon.peripherals.keyboard" + + #define KEY_REPEAT "repeat" +@@ -60,6 +63,7 @@ + #define KEY_INTERVAL "repeat-interval" + #define KEY_DELAY "delay" + #define KEY_CLICK_VOLUME "click-volume" ++#define KEY_REMEMBER_NUMLOCK_STATE "remember-numlock-state" + #define KEY_NUMLOCK_STATE "numlock-state" + + #define KEY_BELL_VOLUME "bell-volume" +@@ -67,27 +71,560 @@ + #define KEY_BELL_DURATION "bell-duration" + #define KEY_BELL_MODE "bell-mode" + +-#define LIBGNOMEKBD_KEYBOARD_DIR "org.gnome.libgnomekbd.keyboard" +-#define LIBGNOMEKBD_KEY_LAYOUTS "layouts" ++#define KEY_SWITCHER "input-sources-switcher" ++ ++#define GNOME_DESKTOP_INTERFACE_DIR "org.cinnamon.desktop.interface" ++ ++#define KEY_GTK_IM_MODULE "gtk-im-module" ++#define GTK_IM_MODULE_SIMPLE "gtk-im-context-simple" ++#define GTK_IM_MODULE_IBUS "ibus" ++ ++#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.cinnamon.desktop.input-sources" ++ ++#define KEY_CURRENT_INPUT_SOURCE "current" ++#define KEY_INPUT_SOURCES "sources" ++#define KEY_KEYBOARD_OPTIONS "xkb-options" ++ ++#define INPUT_SOURCE_TYPE_XKB "xkb" ++#define INPUT_SOURCE_TYPE_IBUS "ibus" ++ ++#define DEFAULT_LANGUAGE "en_US" + + struct CsdKeyboardManagerPrivate + { + guint start_idle_id; + GSettings *settings; +- GSettings *libgnomekbd_settings; +- gboolean have_xkb; ++ GSettings *input_sources_settings; ++ GSettings *interface_settings; ++ GnomeXkbInfo *xkb_info; ++#ifdef HAVE_IBUS ++ IBusBus *ibus; ++ GHashTable *ibus_engines; ++ GHashTable *ibus_xkb_engines; ++ GCancellable *ibus_cancellable; ++ gboolean session_is_fallback; ++#endif + gint xkb_event_base; + CsdNumLockState old_state; ++ GdkDeviceManager *device_manager; ++ guint device_added_id; ++ guint device_removed_id; ++ ++ gboolean input_sources_switcher_spawned; ++ GPid input_sources_switcher_pid; + }; + + static void csd_keyboard_manager_class_init (CsdKeyboardManagerClass *klass); + static void csd_keyboard_manager_init (CsdKeyboardManager *keyboard_manager); + static void csd_keyboard_manager_finalize (GObject *object); ++static gboolean apply_input_sources_settings (GSettings *settings, ++ gpointer keys, ++ gint n_keys, ++ CsdKeyboardManager *manager); ++static void set_gtk_im_module (CsdKeyboardManager *manager, ++ const gchar *new_module); + + G_DEFINE_TYPE (CsdKeyboardManager, csd_keyboard_manager, G_TYPE_OBJECT) + + static gpointer manager_object = NULL; + ++static void ++init_builder_with_sources (GVariantBuilder *builder, ++ GSettings *settings) ++{ ++ const gchar *type; ++ const gchar *id; ++ GVariantIter iter; ++ GVariant *sources; ++ ++ sources = g_settings_get_value (settings, KEY_INPUT_SOURCES); ++ ++ g_variant_builder_init (builder, G_VARIANT_TYPE ("a(ss)")); ++ ++ g_variant_iter_init (&iter, sources); ++ while (g_variant_iter_next (&iter, "(&s&s)", &type, &id)) ++ g_variant_builder_add (builder, "(ss)", type, id); ++ ++ g_variant_unref (sources); ++} ++ ++static gboolean ++schema_is_installed (const gchar *name) ++{ ++ const gchar * const *schemas; ++ const gchar * const *s; ++ ++ schemas = g_settings_list_schemas (); ++ for (s = schemas; *s; ++s) ++ if (g_str_equal (*s, name)) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++#ifdef HAVE_IBUS ++static void ++clear_ibus (CsdKeyboardManager *manager) ++{ ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ ++ g_cancellable_cancel (priv->ibus_cancellable); ++ g_clear_object (&priv->ibus_cancellable); ++ g_clear_pointer (&priv->ibus_engines, g_hash_table_destroy); ++ g_clear_pointer (&priv->ibus_xkb_engines, g_hash_table_destroy); ++ g_clear_object (&priv->ibus); ++} ++ ++static gchar * ++make_xkb_source_id (const gchar *engine_id) ++{ ++ gchar *id; ++ gchar *p; ++ gint n_colons = 0; ++ ++ /* engine_id is like "xkb:layout:variant:lang" where ++ * 'variant' and 'lang' might be empty */ ++ ++ engine_id += 4; ++ ++ for (p = (gchar *)engine_id; *p; ++p) ++ if (*p == ':') ++ if (++n_colons == 2) ++ break; ++ if (!*p) ++ return NULL; ++ ++ id = g_strndup (engine_id, p - engine_id + 1); ++ ++ id[p - engine_id] = '\0'; ++ ++ /* id is "layout:variant" where 'variant' might be empty */ ++ ++ for (p = id; *p; ++p) ++ if (*p == ':') { ++ if (*(p + 1) == '\0') ++ *p = '\0'; ++ else ++ *p = '+'; ++ break; ++ } ++ ++ /* id is "layout+variant" or "layout" */ ++ ++ return id; ++} ++ ++static void ++fetch_ibus_engines_result (GObject *object, ++ GAsyncResult *result, ++ CsdKeyboardManager *manager) ++{ ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ GList *list, *l; ++ GError *error = NULL; ++ ++ /* engines shouldn't be there yet */ ++ g_return_if_fail (priv->ibus_engines == NULL); ++ ++ g_clear_object (&priv->ibus_cancellable); ++ ++ list = ibus_bus_list_engines_async_finish (priv->ibus, ++ result, ++ &error); ++ if (!list && error) { ++ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ g_warning ("Couldn't finish IBus request: %s", error->message); ++ g_error_free (error); ++ ++ clear_ibus (manager); ++ return; ++ } ++ ++ /* Maps IBus engine ids to engine description objects */ ++ priv->ibus_engines = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); ++ /* Maps XKB source id strings to engine description objects */ ++ priv->ibus_xkb_engines = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); ++ ++ for (l = list; l; l = l->next) { ++ IBusEngineDesc *engine = l->data; ++ const gchar *engine_id = ibus_engine_desc_get_name (engine); ++ ++ g_hash_table_replace (priv->ibus_engines, (gpointer)engine_id, engine); ++ ++ if (strncmp ("xkb:", engine_id, 4) == 0) { ++ gchar *xkb_source_id = make_xkb_source_id (engine_id); ++ if (xkb_source_id) ++ g_hash_table_replace (priv->ibus_xkb_engines, ++ xkb_source_id, ++ engine); ++ } ++ } ++ g_list_free (list); ++ ++ apply_input_sources_settings (priv->input_sources_settings, NULL, 0, manager); ++} ++ ++static void ++fetch_ibus_engines (CsdKeyboardManager *manager) ++{ ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ ++ /* engines shouldn't be there yet */ ++ g_return_if_fail (priv->ibus_engines == NULL); ++ g_return_if_fail (priv->ibus_cancellable == NULL); ++ ++ priv->ibus_cancellable = g_cancellable_new (); ++ ++ ibus_bus_list_engines_async (priv->ibus, ++ -1, ++ priv->ibus_cancellable, ++ (GAsyncReadyCallback)fetch_ibus_engines_result, ++ manager); ++} ++ ++static void ++maybe_start_ibus (CsdKeyboardManager *manager, ++ GVariant *sources) ++{ ++ gboolean need_ibus = FALSE; ++ GVariantIter iter; ++ const gchar *type; ++ ++ if (manager->priv->session_is_fallback) ++ return; ++ ++ g_variant_iter_init (&iter, sources); ++ while (g_variant_iter_next (&iter, "(&s&s)", &type, NULL)) ++ if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) { ++ need_ibus = TRUE; ++ break; ++ } ++ ++ if (!need_ibus) ++ return; ++ ++ if (!manager->priv->ibus) { ++ ibus_init (); ++ manager->priv->ibus = ibus_bus_new (); ++ g_signal_connect_swapped (manager->priv->ibus, "connected", ++ G_CALLBACK (fetch_ibus_engines), manager); ++ g_signal_connect_swapped (manager->priv->ibus, "disconnected", ++ G_CALLBACK (clear_ibus), manager); ++ } ++ /* IBus doesn't export API in the session bus. The only thing ++ * we have there is a well known name which we can use as a ++ * sure-fire way to activate it. */ ++ g_bus_unwatch_name (g_bus_watch_name (G_BUS_TYPE_SESSION, ++ IBUS_SERVICE_IBUS, ++ G_BUS_NAME_WATCHER_FLAGS_AUTO_START, ++ NULL, ++ NULL, ++ NULL, ++ NULL)); ++} ++ ++static void ++got_session_name (GObject *object, ++ GAsyncResult *res, ++ CsdKeyboardManager *manager) ++{ ++ GVariant *result, *variant; ++ GDBusConnection *connection = G_DBUS_CONNECTION (object); ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ const gchar *session_name = NULL; ++ GError *error = NULL; ++ ++ /* IBus shouldn't have been touched yet */ ++ g_return_if_fail (priv->ibus == NULL); ++ ++ g_clear_object (&priv->ibus_cancellable); ++ ++ result = g_dbus_connection_call_finish (connection, res, &error); ++ if (!result) { ++ g_warning ("Couldn't get session name: %s", error->message); ++ g_error_free (error); ++ goto out; ++ } ++ ++ g_variant_get (result, "(v)", &variant); ++ g_variant_unref (result); ++ ++ g_variant_get (variant, "&s", &session_name); ++ ++ if (g_strcmp0 (session_name, "gnome") == 0) ++ manager->priv->session_is_fallback = FALSE; ++ ++ g_variant_unref (variant); ++ out: ++ apply_input_sources_settings (manager->priv->input_sources_settings, NULL, 0, manager); ++ g_object_unref (connection); ++} ++ ++static void ++got_bus (GObject *object, ++ GAsyncResult *res, ++ CsdKeyboardManager *manager) ++{ ++ GDBusConnection *connection; ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ GError *error = NULL; ++ ++ /* IBus shouldn't have been touched yet */ ++ g_return_if_fail (priv->ibus == NULL); ++ ++ g_clear_object (&priv->ibus_cancellable); ++ ++ connection = g_bus_get_finish (res, &error); ++ if (!connection) { ++ g_warning ("Couldn't get session bus: %s", error->message); ++ g_error_free (error); ++ apply_input_sources_settings (priv->input_sources_settings, NULL, 0, manager); ++ return; ++ } ++ ++ priv->ibus_cancellable = g_cancellable_new (); ++ ++ g_dbus_connection_call (connection, ++ "org.gnome.SessionManager", ++ "/org/gnome/SessionManager", ++ "org.freedesktop.DBus.Properties", ++ "Get", ++ g_variant_new ("(ss)", ++ "org.gnome.SessionManager", ++ "SessionName"), ++ NULL, ++ G_DBUS_CALL_FLAGS_NONE, ++ -1, ++ priv->ibus_cancellable, ++ (GAsyncReadyCallback)got_session_name, ++ manager); ++} ++ ++static void ++set_ibus_engine_finish (GObject *object, ++ GAsyncResult *res, ++ CsdKeyboardManager *manager) ++{ ++ gboolean result; ++ IBusBus *ibus = IBUS_BUS (object); ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ GError *error = NULL; ++ ++ g_clear_object (&priv->ibus_cancellable); ++ ++ result = ibus_bus_set_global_engine_async_finish (ibus, res, &error); ++ if (!result) { ++ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ g_warning ("Couldn't set IBus engine: %s", error->message); ++ g_error_free (error); ++ } ++} ++ ++static void ++set_ibus_engine (CsdKeyboardManager *manager, ++ const gchar *engine_id) ++{ ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ ++ g_return_if_fail (priv->ibus != NULL); ++ g_return_if_fail (priv->ibus_engines != NULL); ++ ++ g_cancellable_cancel (priv->ibus_cancellable); ++ g_clear_object (&priv->ibus_cancellable); ++ priv->ibus_cancellable = g_cancellable_new (); ++ ++ ibus_bus_set_global_engine_async (priv->ibus, ++ engine_id, ++ -1, ++ priv->ibus_cancellable, ++ (GAsyncReadyCallback)set_ibus_engine_finish, ++ manager); ++} ++ ++static void ++set_ibus_xkb_engine (CsdKeyboardManager *manager, ++ const gchar *xkb_id) ++{ ++ IBusEngineDesc *engine; ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ ++ if (!priv->ibus_xkb_engines) ++ return; ++ ++ engine = g_hash_table_lookup (priv->ibus_xkb_engines, xkb_id); ++ if (!engine) ++ return; ++ ++ set_ibus_engine (manager, ibus_engine_desc_get_name (engine)); ++} ++ ++/* XXX: See upstream bug: ++ * https://codereview.appspot.com/6586075/ */ ++static gchar * ++layout_from_ibus_layout (const gchar *ibus_layout) ++{ ++ const gchar *p; ++ ++ /* we get something like "layout(variant)[option1,option2]" */ ++ ++ p = ibus_layout; ++ while (*p) { ++ if (*p == '(' || *p == '[') ++ break; ++ p += 1; ++ } ++ ++ return g_strndup (ibus_layout, p - ibus_layout); ++} ++ ++static gchar * ++variant_from_ibus_layout (const gchar *ibus_layout) ++{ ++ const gchar *a, *b; ++ ++ /* we get something like "layout(variant)[option1,option2]" */ ++ ++ a = ibus_layout; ++ while (*a) { ++ if (*a == '(') ++ break; ++ a += 1; ++ } ++ if (!*a) ++ return NULL; ++ ++ a += 1; ++ b = a; ++ while (*b) { ++ if (*b == ')') ++ break; ++ b += 1; ++ } ++ if (!*b) ++ return NULL; ++ ++ return g_strndup (a, b - a); ++} ++ ++static gchar ** ++options_from_ibus_layout (const gchar *ibus_layout) ++{ ++ const gchar *a, *b; ++ GPtrArray *opt_array; ++ ++ /* we get something like "layout(variant)[option1,option2]" */ ++ ++ a = ibus_layout; ++ while (*a) { ++ if (*a == '[') ++ break; ++ a += 1; ++ } ++ if (!*a) ++ return NULL; ++ ++ opt_array = g_ptr_array_new (); ++ ++ do { ++ a += 1; ++ b = a; ++ while (*b) { ++ if (*b == ',' || *b == ']') ++ break; ++ b += 1; ++ } ++ if (!*b) ++ goto out; ++ ++ g_ptr_array_add (opt_array, g_strndup (a, b - a)); ++ ++ a = b; ++ } while (*a && *a == ','); ++ ++out: ++ g_ptr_array_add (opt_array, NULL); ++ return (gchar **) g_ptr_array_free (opt_array, FALSE); ++} ++ ++static const gchar * ++engine_from_locale (void) ++{ ++ const gchar *locale; ++ const gchar *locale_engine[][2] = { ++ { "as_IN", "m17n:as:phonetic" }, ++ { "bn_IN", "m17n:bn:inscript" }, ++ { "gu_IN", "m17n:gu:inscript" }, ++ { "hi_IN", "m17n:hi:inscript" }, ++ { "ja_JP", "anthy" }, ++ { "kn_IN", "m17n:kn:kgp" }, ++ { "ko_KR", "hangul" }, ++ { "mai_IN", "m17n:mai:inscript" }, ++ { "ml_IN", "m17n:ml:inscript" }, ++ { "mr_IN", "m17n:mr:inscript" }, ++ { "or_IN", "m17n:or:inscript" }, ++ { "pa_IN", "m17n:pa:inscript" }, ++ { "sd_IN", "m17n:sd:inscript" }, ++ { "ta_IN", "m17n:ta:tamil99" }, ++ { "te_IN", "m17n:te:inscript" }, ++ { "zh_CN", "pinyin" }, ++ { "zh_HK", "cangjie3" }, ++ { "zh_TW", "chewing" }, ++ }; ++ gint i; ++ ++ locale = setlocale (LC_CTYPE, NULL); ++ if (!locale) ++ return NULL; ++ ++ for (i = 0; i < G_N_ELEMENTS (locale_engine); ++i) ++ if (g_str_has_prefix (locale, locale_engine[i][0])) ++ return locale_engine[i][1]; ++ ++ return NULL; ++} ++ ++static void ++add_ibus_sources_from_locale (GSettings *settings) ++{ ++ const gchar *locale_engine; ++ GVariantBuilder builder; ++ ++ locale_engine = engine_from_locale (); ++ if (!locale_engine) ++ return; ++ ++ init_builder_with_sources (&builder, settings); ++ g_variant_builder_add (&builder, "(ss)", INPUT_SOURCE_TYPE_IBUS, locale_engine); ++ g_settings_set_value (settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder)); ++} ++ ++static void ++convert_ibus (GSettings *settings) ++{ ++ GVariantBuilder builder; ++ GSettings *ibus_settings; ++ gchar **engines, **e; ++ ++ if (!schema_is_installed ("org.freedesktop.ibus.general")) ++ return; ++ ++ init_builder_with_sources (&builder, settings); ++ ++ ibus_settings = g_settings_new ("org.freedesktop.ibus.general"); ++ engines = g_settings_get_strv (ibus_settings, "preload-engines"); ++ for (e = engines; *e; ++e) { ++ if (g_str_has_prefix (*e, "xkb:")) ++ continue; ++ g_variant_builder_add (&builder, "(ss)", INPUT_SOURCE_TYPE_IBUS, *e); ++ } ++ ++ g_settings_set_value (settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder)); ++ ++ g_strfreev (engines); ++ g_object_unref (ibus_settings); ++} ++#endif /* HAVE_IBUS */ ++ + static gboolean + xkb_set_keyboard_autorepeat_rate (guint delay, guint interval) + { +@@ -97,32 +634,33 @@ xkb_set_keyboard_autorepeat_rate (guint + interval); + } + +-static void +-numlock_xkb_init (CsdKeyboardManager *manager) ++static gboolean ++check_xkb_extension (CsdKeyboardManager *manager) + { + Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); +- gboolean have_xkb; + int opcode, error_base, major, minor; ++ gboolean have_xkb; + + have_xkb = XkbQueryExtension (dpy, + &opcode, + &manager->priv->xkb_event_base, + &error_base, + &major, +- &minor) +- && XkbUseExtension (dpy, &major, &minor); ++ &minor); ++ return have_xkb; ++} + +- if (have_xkb) { +- XkbSelectEventDetails (dpy, +- XkbUseCoreKbd, +- XkbStateNotifyMask, +- XkbModifierLockMask, +- XkbModifierLockMask); +- } else { +- g_warning ("XKB extension not available"); +- } ++static void ++xkb_init (CsdKeyboardManager *manager) ++{ ++ Display *dpy; + +- manager->priv->have_xkb = have_xkb; ++ dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); ++ XkbSelectEventDetails (dpy, ++ XkbUseCoreKbd, ++ XkbStateNotify, ++ XkbModifierLockMask, ++ XkbModifierLockMask); + } + + static unsigned +@@ -143,19 +681,32 @@ numlock_set_xkb_state (CsdNumLockState n + XkbLockModifiers (dpy, XkbUseCoreKbd, num_mask, new_state == CSD_NUM_LOCK_STATE_ON ? num_mask : 0); + } + ++static const char * ++num_lock_state_to_string (CsdNumLockState numlock_state) ++{ ++ switch (numlock_state) { ++ case CSD_NUM_LOCK_STATE_UNKNOWN: ++ return "CSD_NUM_LOCK_STATE_UNKNOWN"; ++ case CSD_NUM_LOCK_STATE_ON: ++ return "CSD_NUM_LOCK_STATE_ON"; ++ case CSD_NUM_LOCK_STATE_OFF: ++ return "CSD_NUM_LOCK_STATE_OFF"; ++ default: ++ return "UNKNOWN"; ++ } ++} ++ + static GdkFilterReturn +-numlock_xkb_callback (GdkXEvent *xev_, +- GdkEvent *gdkev_, +- gpointer user_data) ++xkb_events_filter (GdkXEvent *xev_, ++ GdkEvent *gdkev_, ++ gpointer user_data) + { + XEvent *xev = (XEvent *) xev_; + XkbEvent *xkbev = (XkbEvent *) xev; + CsdKeyboardManager *manager = (CsdKeyboardManager *) user_data; + +- if (xev->type != manager->priv->xkb_event_base) +- return GDK_FILTER_CONTINUE; +- +- if (xkbev->any.xkb_type != XkbStateNotify) ++ if (xev->type != manager->priv->xkb_event_base || ++ xkbev->any.xkb_type != XkbStateNotify) + return GDK_FILTER_CONTINUE; + + if (xkbev->state.changed & XkbModifierLockMask) { +@@ -166,6 +717,9 @@ numlock_xkb_callback (GdkXEvent *xev_, + numlock_state = (num_mask & locked_mods) ? CSD_NUM_LOCK_STATE_ON : CSD_NUM_LOCK_STATE_OFF; + + if (numlock_state != manager->priv->old_state) { ++ g_debug ("New num-lock state '%s' != Old num-lock state '%s'", ++ num_lock_state_to_string (numlock_state), ++ num_lock_state_to_string (manager->priv->old_state)); + g_settings_set_enum (manager->priv->settings, + KEY_NUMLOCK_STATE, + numlock_state); +@@ -177,57 +731,509 @@ numlock_xkb_callback (GdkXEvent *xev_, + } + + static void +-numlock_install_xkb_callback (CsdKeyboardManager *manager) ++install_xkb_filter (CsdKeyboardManager *manager) + { +- if (!manager->priv->have_xkb) +- return; +- + gdk_window_add_filter (NULL, +- numlock_xkb_callback, ++ xkb_events_filter, + manager); + } + +-static guint +-_csd_settings_get_uint (GSettings *settings, +- const char *key) ++static void ++remove_xkb_filter (CsdKeyboardManager *manager) + { +- guint value; ++ gdk_window_remove_filter (NULL, ++ xkb_events_filter, ++ manager); ++} + +- g_settings_get (settings, key, "u", &value); +- return value; ++static void ++free_xkb_component_names (XkbComponentNamesRec *p) ++{ ++ g_return_if_fail (p != NULL); ++ ++ free (p->keymap); ++ free (p->keycodes); ++ free (p->types); ++ free (p->compat); ++ free (p->symbols); ++ free (p->geometry); ++ ++ g_free (p); ++} ++ ++static void ++upload_xkb_description (const gchar *rules_file_path, ++ XkbRF_VarDefsRec *var_defs, ++ XkbComponentNamesRec *comp_names) ++{ ++ Display *display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); ++ XkbDescRec *xkb_desc; ++ gchar *rules_file; ++ ++ /* Upload it to the X server using the same method as setxkbmap */ ++ xkb_desc = XkbGetKeyboardByName (display, ++ XkbUseCoreKbd, ++ comp_names, ++ XkbGBN_AllComponentsMask, ++ XkbGBN_AllComponentsMask & ++ (~XkbGBN_GeometryMask), True); ++ if (!xkb_desc) { ++ g_warning ("Couldn't upload new XKB keyboard description"); ++ return; ++ } ++ ++ XkbFreeKeyboard (xkb_desc, 0, True); ++ ++ rules_file = g_path_get_basename (rules_file_path); ++ ++ if (!XkbRF_SetNamesProp (display, rules_file, var_defs)) ++ g_warning ("Couldn't update the XKB root window property"); ++ ++ g_free (rules_file); ++} ++ ++static gchar * ++language_code_from_locale (const gchar *locale) ++{ ++ if (!locale || !locale[0] || !locale[1]) ++ return NULL; ++ ++ if (!locale[2] || locale[2] == '_' || locale[2] == '.') ++ return g_strndup (locale, 2); ++ ++ if (!locale[3] || locale[3] == '_' || locale[3] == '.') ++ return g_strndup (locale, 3); ++ ++ return NULL; ++} ++ ++static gchar * ++build_xkb_group_string (const gchar *user, ++ const gchar *locale, ++ const gchar *latin) ++{ ++ gchar *string; ++ gsize length = 0; ++ guint commas = 2; ++ ++ if (latin) ++ length += strlen (latin); ++ else ++ commas -= 1; ++ ++ if (locale) ++ length += strlen (locale); ++ else ++ commas -= 1; ++ ++ length += strlen (user) + commas + 1; ++ ++ string = malloc (length); ++ ++ if (locale && latin) ++ sprintf (string, "%s,%s,%s", user, locale, latin); ++ else if (locale) ++ sprintf (string, "%s,%s", user, locale); ++ else if (latin) ++ sprintf (string, "%s,%s", user, latin); ++ else ++ sprintf (string, "%s", user); ++ ++ return string; ++} ++ ++static gboolean ++layout_equal (const gchar *layout_a, ++ const gchar *variant_a, ++ const gchar *layout_b, ++ const gchar *variant_b) ++{ ++ return !g_strcmp0 (layout_a, layout_b) && !g_strcmp0 (variant_a, variant_b); + } + + static void +-apply_settings (GSettings *settings, +- const char *key, +- CsdKeyboardManager *manager) ++replace_layout_and_variant (CsdKeyboardManager *manager, ++ XkbRF_VarDefsRec *xkb_var_defs, ++ const gchar *layout, ++ const gchar *variant) + { ++ /* Toolkits need to know about both a latin layout to handle ++ * accelerators which are usually defined like Ctrl+C and a ++ * layout with the symbols for the language used in UI strings ++ * to handle mnemonics like Alt+Ф, so we try to find and add ++ * them in XKB group slots after the layout which the user ++ * actually intends to type with. */ ++ const gchar *latin_layout = "us"; ++ const gchar *latin_variant = ""; ++ const gchar *locale_layout = NULL; ++ const gchar *locale_variant = NULL; ++ const gchar *locale; ++ gchar *language; ++ ++ if (!layout) ++ return; ++ ++ if (!variant) ++ variant = ""; ++ ++ locale = setlocale (LC_MESSAGES, NULL); ++ /* If LANG is empty, default to en_US */ ++ if (!locale) ++ language = g_strdup (DEFAULT_LANGUAGE); ++ else ++ language = language_code_from_locale (locale); ++ ++ if (!language) ++ language = language_code_from_locale (DEFAULT_LANGUAGE); ++ ++ gnome_xkb_info_get_layout_info_for_language (manager->priv->xkb_info, ++ language, ++ NULL, ++ NULL, ++ NULL, ++ &locale_layout, ++ &locale_variant); ++ g_free (language); ++ ++ /* We want to minimize the number of XKB groups if we have ++ * duplicated layout+variant pairs. ++ * ++ * Also, if a layout doesn't have a variant we still have to ++ * include it in the variants string because the number of ++ * variants must agree with the number of layouts. For ++ * instance: ++ * ++ * layouts: "us,ru,us" ++ * variants: "dvorak,," ++ */ ++ if (layout_equal (latin_layout, latin_variant, locale_layout, locale_variant) || ++ layout_equal (latin_layout, latin_variant, layout, variant)) { ++ latin_layout = NULL; ++ latin_variant = NULL; ++ } ++ ++ if (layout_equal (locale_layout, locale_variant, layout, variant)) { ++ locale_layout = NULL; ++ locale_variant = NULL; ++ } ++ ++ free (xkb_var_defs->layout); ++ xkb_var_defs->layout = build_xkb_group_string (layout, locale_layout, latin_layout); ++ ++ free (xkb_var_defs->variant); ++ xkb_var_defs->variant = build_xkb_group_string (variant, locale_variant, latin_variant); ++} ++ ++static gchar * ++build_xkb_options_string (gchar **options) ++{ ++ gchar *string; ++ ++ if (*options) { ++ gint i; ++ gsize len; ++ gchar *ptr; ++ ++ /* First part, getting length */ ++ len = 1 + strlen (options[0]); ++ for (i = 1; options[i] != NULL; i++) ++ len += strlen (options[i]); ++ len += (i - 1); /* commas */ ++ ++ /* Second part, building string */ ++ string = malloc (len); ++ ptr = g_stpcpy (string, *options); ++ for (i = 1; options[i] != NULL; i++) { ++ ptr = g_stpcpy (ptr, ","); ++ ptr = g_stpcpy (ptr, options[i]); ++ } ++ } else { ++ string = malloc (1); ++ *string = '\0'; ++ } ++ ++ return string; ++} ++ ++static gchar ** ++append_options (gchar **a, ++ gchar **b) ++{ ++ gchar **c, **p; ++ ++ if (!a && !b) ++ return NULL; ++ else if (!a) ++ return g_strdupv (b); ++ else if (!b) ++ return g_strdupv (a); ++ ++ c = g_new0 (gchar *, g_strv_length (a) + g_strv_length (b) + 1); ++ p = c; ++ ++ while (*a) { ++ *p = g_strdup (*a); ++ p += 1; ++ a += 1; ++ } ++ while (*b) { ++ *p = g_strdup (*b); ++ p += 1; ++ b += 1; ++ } ++ ++ return c; ++} ++ ++static void ++add_xkb_options (CsdKeyboardManager *manager, ++ XkbRF_VarDefsRec *xkb_var_defs, ++ gchar **extra_options) ++{ ++ gchar **options; ++ gchar **settings_options; ++ ++ settings_options = g_settings_get_strv (manager->priv->input_sources_settings, ++ KEY_KEYBOARD_OPTIONS); ++ options = append_options (settings_options, extra_options); ++ g_strfreev (settings_options); ++ ++ free (xkb_var_defs->options); ++ xkb_var_defs->options = build_xkb_options_string (options); ++ ++ g_strfreev (options); ++} ++ ++static void ++apply_xkb_settings (CsdKeyboardManager *manager, ++ const gchar *layout, ++ const gchar *variant, ++ gchar **options) ++{ ++ XkbRF_RulesRec *xkb_rules; ++ XkbRF_VarDefsRec *xkb_var_defs; ++ gchar *rules_file_path; ++ ++ gnome_xkb_info_get_var_defs (&rules_file_path, &xkb_var_defs); ++ ++ add_xkb_options (manager, xkb_var_defs, options); ++ replace_layout_and_variant (manager, xkb_var_defs, layout, variant); ++ ++ gdk_error_trap_push (); ++ ++ xkb_rules = XkbRF_Load (rules_file_path, NULL, True, True); ++ if (xkb_rules) { ++ XkbComponentNamesRec *xkb_comp_names; ++ xkb_comp_names = g_new0 (XkbComponentNamesRec, 1); ++ ++ XkbRF_GetComponents (xkb_rules, xkb_var_defs, xkb_comp_names); ++ upload_xkb_description (rules_file_path, xkb_var_defs, xkb_comp_names); ++ ++ free_xkb_component_names (xkb_comp_names); ++ XkbRF_Free (xkb_rules, True); ++ } else { ++ g_warning ("Couldn't load XKB rules"); ++ } ++ ++ if (gdk_error_trap_pop ()) ++ g_warning ("Error loading XKB rules"); ++ ++ gnome_xkb_info_free_var_defs (xkb_var_defs); ++ g_free (rules_file_path); ++} ++ ++static void ++set_gtk_im_module (CsdKeyboardManager *manager, ++ const gchar *new_module) ++{ ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ gchar *current_module; ++ ++ current_module = g_settings_get_string (priv->interface_settings, ++ KEY_GTK_IM_MODULE); ++ if (!g_str_equal (current_module, new_module)) ++ g_settings_set_string (priv->interface_settings, ++ KEY_GTK_IM_MODULE, ++ new_module); ++ g_free (current_module); ++} ++ ++static gboolean ++apply_input_sources_settings (GSettings *settings, ++ gpointer keys, ++ gint n_keys, ++ CsdKeyboardManager *manager) ++{ ++ CsdKeyboardManagerPrivate *priv = manager->priv; ++ GVariant *sources; ++ guint current; ++ guint n_sources; ++ const gchar *type = NULL; ++ const gchar *id = NULL; ++ gchar *layout = NULL; ++ gchar *variant = NULL; ++ gchar **options = NULL; ++ ++ sources = g_settings_get_value (priv->input_sources_settings, KEY_INPUT_SOURCES); ++ current = g_settings_get_uint (priv->input_sources_settings, KEY_CURRENT_INPUT_SOURCE); ++ n_sources = g_variant_n_children (sources); ++ ++ if (n_sources < 1) ++ goto exit; ++ ++ if (current >= n_sources) { ++ g_settings_set_uint (priv->input_sources_settings, ++ KEY_CURRENT_INPUT_SOURCE, ++ n_sources - 1); ++ goto exit; ++ } ++ ++#ifdef HAVE_IBUS ++ maybe_start_ibus (manager, sources); ++#endif ++ ++ g_variant_get_child (sources, current, "(&s&s)", &type, &id); ++ ++ if (g_str_equal (type, INPUT_SOURCE_TYPE_XKB)) { ++ const gchar *l, *v; ++ gnome_xkb_info_get_layout_info (priv->xkb_info, id, NULL, NULL, &l, &v); ++ ++ layout = g_strdup (l); ++ variant = g_strdup (v); ++ ++ if (!layout || !layout[0]) { ++ g_warning ("Couldn't find XKB input source '%s'", id); ++ goto exit; ++ } ++ set_gtk_im_module (manager, GTK_IM_MODULE_SIMPLE); ++#ifdef HAVE_IBUS ++ set_ibus_xkb_engine (manager, id); ++#endif ++ } else if (g_str_equal (type, INPUT_SOURCE_TYPE_IBUS)) { ++#ifdef HAVE_IBUS ++ IBusEngineDesc *engine_desc = NULL; ++ ++ if (priv->session_is_fallback) ++ goto exit; ++ ++ if (priv->ibus_engines) ++ engine_desc = g_hash_table_lookup (priv->ibus_engines, id); ++ else ++ goto exit; /* we'll be called again when ibus is up and running */ ++ ++ if (engine_desc) { ++ const gchar *ibus_layout; ++ ibus_layout = ibus_engine_desc_get_layout (engine_desc); ++ ++ if (ibus_layout) { ++ layout = layout_from_ibus_layout (ibus_layout); ++ variant = variant_from_ibus_layout (ibus_layout); ++ options = options_from_ibus_layout (ibus_layout); ++ } ++ } else { ++ g_warning ("Couldn't find IBus input source '%s'", id); ++ goto exit; ++ } ++ ++ set_gtk_im_module (manager, GTK_IM_MODULE_IBUS); ++ set_ibus_engine (manager, id); ++#else ++ g_warning ("IBus input source type specified but IBus support was not compiled"); ++#endif ++ } else { ++ g_warning ("Unknown input source type '%s'", type); ++ } ++ ++ exit: ++ apply_xkb_settings (manager, layout, variant, options); ++ g_variant_unref (sources); ++ g_free (layout); ++ g_free (variant); ++ g_strfreev (options); ++ /* Prevent individual "changed" signal invocations since we ++ don't need them. */ ++ return TRUE; ++} ++ ++static void ++apply_bell (CsdKeyboardManager *manager) ++{ ++ GSettings *settings; + XKeyboardControl kbdcontrol; +- gboolean repeat; + gboolean click; +- guint interval; +- guint delay; +- int click_volume; + int bell_volume; + int bell_pitch; + int bell_duration; + CsdBellMode bell_mode; +- gboolean rnumlock; +- +- if (g_strcmp0 (key, KEY_NUMLOCK_STATE) == 0) +- return; ++ int click_volume; + +- repeat = g_settings_get_boolean (settings, KEY_REPEAT); ++ g_debug ("Applying the bell settings"); ++ settings = manager->priv->settings; + click = g_settings_get_boolean (settings, KEY_CLICK); +- interval = _csd_settings_get_uint (settings, KEY_INTERVAL); +- delay = _csd_settings_get_uint (settings, KEY_DELAY); + click_volume = g_settings_get_int (settings, KEY_CLICK_VOLUME); ++ + bell_pitch = g_settings_get_int (settings, KEY_BELL_PITCH); + bell_duration = g_settings_get_int (settings, KEY_BELL_DURATION); + + bell_mode = g_settings_get_enum (settings, KEY_BELL_MODE); + bell_volume = (bell_mode == CSD_BELL_MODE_ON) ? 50 : 0; + ++ /* as percentage from 0..100 inclusive */ ++ if (click_volume < 0) { ++ click_volume = 0; ++ } else if (click_volume > 100) { ++ click_volume = 100; ++ } ++ kbdcontrol.key_click_percent = click ? click_volume : 0; ++ kbdcontrol.bell_percent = bell_volume; ++ kbdcontrol.bell_pitch = bell_pitch; ++ kbdcontrol.bell_duration = bell_duration; ++ ++ gdk_error_trap_push (); ++ XChangeKeyboardControl (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), ++ KBKeyClickPercent | KBBellPercent | KBBellPitch | KBBellDuration, ++ &kbdcontrol); ++ ++ XSync (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), FALSE); ++ gdk_error_trap_pop_ignored (); ++} ++ ++static void ++apply_numlock (CsdKeyboardManager *manager) ++{ ++ GSettings *settings; ++ gboolean rnumlock; ++ ++ g_debug ("Applying the num-lock settings"); ++ settings = manager->priv->settings; ++ rnumlock = g_settings_get_boolean (settings, KEY_REMEMBER_NUMLOCK_STATE); ++ manager->priv->old_state = g_settings_get_enum (manager->priv->settings, KEY_NUMLOCK_STATE); ++ ++ gdk_error_trap_push (); ++ if (rnumlock) { ++ g_debug ("Remember num-lock is set, so applying setting '%s'", ++ num_lock_state_to_string (manager->priv->old_state)); ++ numlock_set_xkb_state (manager->priv->old_state); ++ } ++ ++ XSync (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), FALSE); ++ gdk_error_trap_pop_ignored (); ++} ++ ++static void ++apply_repeat (CsdKeyboardManager *manager) ++{ ++ GSettings *settings; ++ gboolean repeat; ++ guint interval; ++ guint delay; ++ ++ g_debug ("Applying the repeat settings"); ++ settings = manager->priv->settings; ++ repeat = g_settings_get_boolean (settings, KEY_REPEAT); ++ interval = g_settings_get_uint (settings, KEY_INTERVAL); ++ delay = g_settings_get_uint (settings, KEY_DELAY); ++ + gdk_error_trap_push (); + if (repeat) { + gboolean rate_set = FALSE; +@@ -243,124 +1249,319 @@ apply_settings (GSettings *sett + XAutoRepeatOff (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); + } + +- /* as percentage from 0..100 inclusive */ +- if (click_volume < 0) { +- click_volume = 0; +- } else if (click_volume > 100) { +- click_volume = 100; ++ XSync (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), FALSE); ++ gdk_error_trap_pop_ignored (); ++} ++ ++static void ++apply_all_settings (CsdKeyboardManager *manager) ++{ ++ apply_repeat (manager); ++ apply_bell (manager); ++ apply_numlock (manager); ++} ++ ++static void ++set_input_sources_switcher (CsdKeyboardManager *manager, ++ gboolean state) ++{ ++ if (state) { ++ GError *error = NULL; ++ char *args[2]; ++ ++ if (manager->priv->input_sources_switcher_spawned) ++ set_input_sources_switcher (manager, FALSE); ++ ++ args[0] = LIBEXECDIR "/csd-input-sources-switcher"; ++ args[1] = NULL; ++ ++ g_spawn_async (NULL, args, NULL, ++ 0, NULL, NULL, ++ &manager->priv->input_sources_switcher_pid, &error); ++ ++ manager->priv->input_sources_switcher_spawned = (error == NULL); ++ ++ if (error) { ++ g_warning ("Couldn't spawn %s: %s", args[0], error->message); ++ g_error_free (error); ++ } ++ } else if (manager->priv->input_sources_switcher_spawned) { ++ kill (manager->priv->input_sources_switcher_pid, SIGHUP); ++ g_spawn_close_pid (manager->priv->input_sources_switcher_pid); ++ manager->priv->input_sources_switcher_spawned = FALSE; + } +- kbdcontrol.key_click_percent = click ? click_volume : 0; +- kbdcontrol.bell_percent = bell_volume; +- kbdcontrol.bell_pitch = bell_pitch; +- kbdcontrol.bell_duration = bell_duration; +- XChangeKeyboardControl (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), +- KBKeyClickPercent | KBBellPercent | KBBellPitch | KBBellDuration, +- &kbdcontrol); ++} + +- if (g_strcmp0 (key, "remember-numlock-state") == 0 || key == NULL) { +- rnumlock = g_settings_get_boolean (settings, "remember-numlock-state"); ++static gboolean ++enable_switcher (CsdKeyboardManager *manager) ++{ ++ CsdInputSourcesSwitcher switcher; + +- manager->priv->old_state = g_settings_get_enum (manager->priv->settings, KEY_NUMLOCK_STATE); ++ switcher = g_settings_get_enum (manager->priv->settings, KEY_SWITCHER); + +- if (manager->priv->have_xkb && rnumlock) +- numlock_set_xkb_state (manager->priv->old_state); ++ return switcher != CSD_INPUT_SOURCES_SWITCHER_OFF; ++} ++ ++static void ++settings_changed (GSettings *settings, ++ const char *key, ++ CsdKeyboardManager *manager) ++{ ++ if (g_strcmp0 (key, KEY_CLICK) == 0|| ++ g_strcmp0 (key, KEY_CLICK_VOLUME) == 0 || ++ g_strcmp0 (key, KEY_BELL_PITCH) == 0 || ++ g_strcmp0 (key, KEY_BELL_DURATION) == 0 || ++ g_strcmp0 (key, KEY_BELL_MODE) == 0) { ++ g_debug ("Bell setting '%s' changed, applying bell settings", key); ++ apply_bell (manager); ++ } else if (g_strcmp0 (key, KEY_REMEMBER_NUMLOCK_STATE) == 0) { ++ g_debug ("Remember Num-Lock state '%s' changed, applying num-lock settings", key); ++ apply_numlock (manager); ++ } else if (g_strcmp0 (key, KEY_NUMLOCK_STATE) == 0) { ++ g_debug ("Num-Lock state '%s' changed, will apply at next startup", key); ++ } else if (g_strcmp0 (key, KEY_REPEAT) == 0 || ++ g_strcmp0 (key, KEY_INTERVAL) == 0 || ++ g_strcmp0 (key, KEY_DELAY) == 0) { ++ g_debug ("Key repeat setting '%s' changed, applying key repeat settings", key); ++ apply_repeat (manager); ++ } else if (g_strcmp0 (key, KEY_SWITCHER) == 0) { ++ set_input_sources_switcher (manager, enable_switcher (manager)); ++ } else { ++ g_warning ("Unhandled settings change, key '%s'", key); + } + +- XSync (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), FALSE); +- gdk_error_trap_pop_ignored (); + } + +-void +-csd_keyboard_manager_apply_settings (CsdKeyboardManager *manager) ++static void ++device_added_cb (GdkDeviceManager *device_manager, ++ GdkDevice *device, ++ CsdKeyboardManager *manager) + { +- apply_settings (manager->priv->settings, NULL, manager); ++ GdkInputSource source; ++ ++ source = gdk_device_get_source (device); ++ if (source == GDK_SOURCE_KEYBOARD) { ++ g_debug ("New keyboard plugged in, applying all settings"); ++ apply_all_settings (manager); ++ apply_input_sources_settings (manager->priv->input_sources_settings, NULL, 0, manager); ++ run_custom_command (device, COMMAND_DEVICE_ADDED); ++ } + } + + static void +-apply_libgnomekbd_settings (GSettings *settings, +- const char *key, +- CsdKeyboardManager *manager) ++device_removed_cb (GdkDeviceManager *device_manager, ++ GdkDevice *device, ++ CsdKeyboardManager *manager) + { +- gchar **layouts; ++ GdkInputSource source; + +- layouts = g_settings_get_strv (settings, LIBGNOMEKBD_KEY_LAYOUTS); ++ source = gdk_device_get_source (device); ++ if (source == GDK_SOURCE_KEYBOARD) { ++ run_custom_command (device, COMMAND_DEVICE_REMOVED); ++ } ++} + +- /* Get accounts daemon */ +- GDBusProxy *proxy = NULL; +- GDBusProxy *user = NULL; +- GVariant *variant = NULL; +- GError *error = NULL; +- gchar *object_path = NULL; ++static void ++set_devicepresence_handler (CsdKeyboardManager *manager) ++{ ++ GdkDeviceManager *device_manager; + +- proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, +- G_DBUS_PROXY_FLAGS_NONE, +- NULL, +- "org.freedesktop.Accounts", +- "/org/freedesktop/Accounts", +- "org.freedesktop.Accounts", +- NULL, +- &error); ++ device_manager = gdk_display_get_device_manager (gdk_display_get_default ()); + +- if (proxy == NULL) { +- g_warning ("Failed to contact accounts service: %s", error->message); +- g_error_free (error); +- goto bail; ++ manager->priv->device_added_id = g_signal_connect (G_OBJECT (device_manager), "device-added", ++ G_CALLBACK (device_added_cb), manager); ++ manager->priv->device_removed_id = g_signal_connect (G_OBJECT (device_manager), "device-removed", ++ G_CALLBACK (device_removed_cb), manager); ++ manager->priv->device_manager = device_manager; ++} ++ ++static void ++create_sources_from_current_xkb_config (GSettings *settings) ++{ ++ GVariantBuilder builder; ++ XkbRF_VarDefsRec *xkb_var_defs; ++ gchar *tmp; ++ gchar **layouts = NULL; ++ gchar **variants = NULL; ++ guint i, n; ++ ++ gnome_xkb_info_get_var_defs (&tmp, &xkb_var_defs); ++ g_free (tmp); ++ ++ if (xkb_var_defs->layout) ++ layouts = g_strsplit (xkb_var_defs->layout, ",", 0); ++ if (xkb_var_defs->variant) ++ variants = g_strsplit (xkb_var_defs->variant, ",", 0); ++ ++ gnome_xkb_info_free_var_defs (xkb_var_defs); ++ ++ if (!layouts) ++ goto out; ++ ++ if (variants && variants[0]) ++ n = MIN (g_strv_length (layouts), g_strv_length (variants)); ++ else ++ n = g_strv_length (layouts); ++ ++ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)")); ++ for (i = 0; i < n && layouts[i][0]; ++i) { ++ if (variants && variants[i] && variants[i][0]) ++ tmp = g_strdup_printf ("%s+%s", layouts[i], variants[i]); ++ else ++ tmp = g_strdup (layouts[i]); ++ ++ g_variant_builder_add (&builder, "(ss)", INPUT_SOURCE_TYPE_XKB, tmp); ++ g_free (tmp); + } ++ g_settings_set_value (settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder)); ++out: ++ g_strfreev (layouts); ++ g_strfreev (variants); ++} + +- variant = g_dbus_proxy_call_sync (proxy, +- "FindUserByName", +- g_variant_new ("(s)", g_get_user_name ()), +- G_DBUS_CALL_FLAGS_NONE, +- -1, +- NULL, +- &error); ++static void ++convert_libgnomekbd_options (GSettings *settings) ++{ ++ GPtrArray *opt_array; ++ GSettings *libgnomekbd_settings; ++ gchar **options, **o; + +- if (variant == NULL) { +- g_warning ("Could not contact accounts service to look up '%s': %s", +- g_get_user_name (), error->message); +- g_error_free (error); +- goto bail; ++ if (!schema_is_installed ("org.gnome.libgnomekbd.keyboard")) ++ return; ++ ++ opt_array = g_ptr_array_new_with_free_func (g_free); ++ ++ libgnomekbd_settings = g_settings_new ("org.gnome.libgnomekbd.keyboard"); ++ options = g_settings_get_strv (libgnomekbd_settings, "options"); ++ ++ for (o = options; *o; ++o) { ++ gchar **strv; ++ ++ strv = g_strsplit (*o, "\t", 2); ++ if (strv[0] && strv[1]) { ++ /* We don't want the group switcher because ++ * it's incompatible with the way we use XKB ++ * groups. */ ++ if (!g_str_has_prefix (strv[1], "grp:")) ++ g_ptr_array_add (opt_array, g_strdup (strv[1])); ++ } ++ g_strfreev (strv); + } ++ g_ptr_array_add (opt_array, NULL); + +- g_variant_get (variant, "(o)", &object_path); +- user = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, +- G_DBUS_PROXY_FLAGS_NONE, +- NULL, +- "org.freedesktop.Accounts", +- object_path, +- "org.freedesktop.Accounts.User", +- NULL, +- &error); +- g_free (object_path); ++ g_settings_set_strv (settings, KEY_KEYBOARD_OPTIONS, (const gchar * const*) opt_array->pdata); + +- if (user == NULL) { +- g_warning ("Could not create proxy for user '%s': %s", +- g_variant_get_string (variant, NULL), error->message); +- g_error_free (error); +- goto bail; ++ g_strfreev (options); ++ g_object_unref (libgnomekbd_settings); ++ g_ptr_array_free (opt_array, TRUE); ++} ++ ++static void ++convert_libgnomekbd_layouts (GSettings *settings) ++{ ++ GVariantBuilder builder; ++ GSettings *libgnomekbd_settings; ++ gchar **layouts, **l; ++ ++ if (!schema_is_installed ("org.gnome.libgnomekbd.keyboard")) ++ return; ++ ++ init_builder_with_sources (&builder, settings); ++ ++ libgnomekbd_settings = g_settings_new ("org.gnome.libgnomekbd.keyboard"); ++ layouts = g_settings_get_strv (libgnomekbd_settings, "layouts"); ++ ++ for (l = layouts; *l; ++l) { ++ gchar *id; ++ gchar **strv; ++ ++ strv = g_strsplit (*l, "\t", 2); ++ if (strv[0] && !strv[1]) ++ id = g_strdup (strv[0]); ++ else if (strv[0] && strv[1]) ++ id = g_strdup_printf ("%s+%s", strv[0], strv[1]); ++ else ++ id = NULL; ++ ++ if (id) ++ g_variant_builder_add (&builder, "(ss)", INPUT_SOURCE_TYPE_XKB, id); ++ ++ g_free (id); ++ g_strfreev (strv); + } +- g_variant_unref (variant); + +- variant = g_dbus_proxy_call_sync (user, +- "SetXKeyboardLayouts", +- g_variant_new ("(^as)", layouts), +- G_DBUS_CALL_FLAGS_NONE, +- -1, +- NULL, +- &error); ++ g_settings_set_value (settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder)); ++ ++ g_strfreev (layouts); ++ g_object_unref (libgnomekbd_settings); ++} + +- if (variant == NULL) { +- g_warning ("Failed to set the keyboard layouts: %s", error->message); ++static void ++maybe_convert_old_settings (GSettings *settings) ++{ ++ GVariant *sources; ++ gchar **options; ++ gchar *stamp_dir_path = NULL; ++ gchar *stamp_file_path = NULL; ++ GError *error = NULL; ++ ++ stamp_dir_path = g_build_filename (g_get_user_data_dir (), PACKAGE_NAME, NULL); ++ if (g_mkdir_with_parents (stamp_dir_path, 0755)) { ++ g_warning ("Failed to create directory %s: %s", stamp_dir_path, g_strerror (errno)); ++ goto out; ++ } ++ ++ stamp_file_path = g_build_filename (stamp_dir_path, "input-sources-converted", NULL); ++ if (g_file_test (stamp_file_path, G_FILE_TEST_EXISTS)) ++ goto out; ++ ++ sources = g_settings_get_value (settings, KEY_INPUT_SOURCES); ++ if (g_variant_n_children (sources) < 1) { ++ convert_libgnomekbd_layouts (settings); ++#ifdef HAVE_IBUS ++ convert_ibus (settings); ++#endif ++ } ++ g_variant_unref (sources); ++ ++ options = g_settings_get_strv (settings, KEY_KEYBOARD_OPTIONS); ++ if (g_strv_length (options) < 1) ++ convert_libgnomekbd_options (settings); ++ g_strfreev (options); ++ ++ if (!g_file_set_contents (stamp_file_path, "", 0, &error)) { ++ g_warning ("%s", error->message); + g_error_free (error); +- goto bail; + } ++out: ++ g_free (stamp_file_path); ++ g_free (stamp_dir_path); ++} + +-bail: +- if (proxy != NULL) +- g_object_unref (proxy); +- if (variant != NULL) +- g_variant_unref (variant); +- g_strfreev (layouts); ++static void ++maybe_create_input_sources (CsdKeyboardManager *manager) ++{ ++ GSettings *settings; ++ GVariant *sources; ++ ++ settings = manager->priv->input_sources_settings; ++ ++ if (g_getenv ("RUNNING_UNDER_GDM")) { ++ create_sources_from_current_xkb_config (settings); ++ return; ++ } ++ ++ maybe_convert_old_settings (settings); ++ ++ /* if we still don't have anything do some educated guesses */ ++ sources = g_settings_get_value (settings, KEY_INPUT_SOURCES); ++ if (g_variant_n_children (sources) < 1) { ++ create_sources_from_current_xkb_config (settings); ++#ifdef HAVE_IBUS ++ add_ibus_sources_from_locale (settings); ++#endif ++ } ++ g_variant_unref (sources); + } + + static gboolean +@@ -370,26 +1571,41 @@ start_keyboard_idle_cb (CsdKeyboardManag + + g_debug ("Starting keyboard manager"); + +- manager->priv->have_xkb = 0; + manager->priv->settings = g_settings_new (CSD_KEYBOARD_DIR); +- manager->priv->libgnomekbd_settings = g_settings_new (LIBGNOMEKBD_KEYBOARD_DIR); + +- /* Essential - xkb initialization should happen before */ +- csd_keyboard_xkb_init (manager); ++ xkb_init (manager); + +- numlock_xkb_init (manager); ++ set_devicepresence_handler (manager); + ++ manager->priv->input_sources_settings = g_settings_new (GNOME_DESKTOP_INPUT_SOURCES_DIR); ++ manager->priv->interface_settings = g_settings_new (GNOME_DESKTOP_INTERFACE_DIR); ++ manager->priv->xkb_info = gnome_xkb_info_new (); ++ ++ maybe_create_input_sources (manager); ++ ++#ifdef HAVE_IBUS ++ /* We don't want to touch IBus until we are sure this isn't a ++ fallback session. */ ++ manager->priv->session_is_fallback = TRUE; ++ manager->priv->ibus_cancellable = g_cancellable_new (); ++ g_bus_get (G_BUS_TYPE_SESSION, ++ manager->priv->ibus_cancellable, ++ (GAsyncReadyCallback)got_bus, ++ manager); ++#else ++ apply_input_sources_settings (manager->priv->input_sources_settings, NULL, 0, manager); ++#endif + /* apply current settings before we install the callback */ +- csd_keyboard_manager_apply_settings (manager); ++ g_debug ("Started the keyboard plugin, applying all settings"); ++ apply_all_settings (manager); + + g_signal_connect (G_OBJECT (manager->priv->settings), "changed", +- G_CALLBACK (apply_settings), manager); +- +- apply_libgnomekbd_settings (manager->priv->libgnomekbd_settings, NULL, manager); +- g_signal_connect (G_OBJECT (manager->priv->libgnomekbd_settings), "changed", +- G_CALLBACK (apply_libgnomekbd_settings), manager); ++ G_CALLBACK (settings_changed), manager); ++ g_signal_connect (G_OBJECT (manager->priv->input_sources_settings), "change-event", ++ G_CALLBACK (apply_input_sources_settings), manager); + +- numlock_install_xkb_callback (manager); ++ install_xkb_filter (manager); ++ set_input_sources_switcher (manager, enable_switcher (manager)); + + cinnamon_settings_profile_end (NULL); + +@@ -404,6 +1620,11 @@ csd_keyboard_manager_start (CsdKeyboardM + { + cinnamon_settings_profile_start (NULL); + ++ if (check_xkb_extension (manager) == FALSE) { ++ g_debug ("XKB is not supported, not applying any settings"); ++ return TRUE; ++ } ++ + manager->priv->start_idle_id = g_idle_add ((GSourceFunc) start_keyboard_idle_cb, manager); + + cinnamon_settings_profile_end (NULL); +@@ -418,37 +1639,24 @@ csd_keyboard_manager_stop (CsdKeyboardMa + + g_debug ("Stopping keyboard manager"); + +- if (p->settings != NULL) { +- g_object_unref (p->settings); +- p->settings = NULL; +- } ++ g_clear_object (&p->settings); ++ g_clear_object (&p->input_sources_settings); ++ g_clear_object (&p->interface_settings); ++ g_clear_object (&p->xkb_info); + +- if (p->libgnomekbd_settings != NULL) { +- g_object_unref (p->libgnomekbd_settings); +- p->libgnomekbd_settings = NULL; +- } ++#ifdef HAVE_IBUS ++ clear_ibus (manager); ++#endif + +- if (p->have_xkb) { +- gdk_window_remove_filter (NULL, +- numlock_xkb_callback, +- manager); ++ if (p->device_manager != NULL) { ++ g_signal_handler_disconnect (p->device_manager, p->device_added_id); ++ g_signal_handler_disconnect (p->device_manager, p->device_removed_id); ++ p->device_manager = NULL; + } + +- csd_keyboard_xkb_shutdown (); +-} +- +-static GObject * +-csd_keyboard_manager_constructor (GType type, +- guint n_construct_properties, +- GObjectConstructParam *construct_properties) +-{ +- CsdKeyboardManager *keyboard_manager; +- +- keyboard_manager = CSD_KEYBOARD_MANAGER (G_OBJECT_CLASS (csd_keyboard_manager_parent_class)->constructor (type, +- n_construct_properties, +- construct_properties)); ++ remove_xkb_filter (manager); + +- return G_OBJECT (keyboard_manager); ++ set_input_sources_switcher (manager, FALSE); + } + + static void +@@ -456,7 +1664,6 @@ csd_keyboard_manager_class_init (CsdKeyb + { + GObjectClass *object_class = G_OBJECT_CLASS (klass); + +- object_class->constructor = csd_keyboard_manager_constructor; + object_class->finalize = csd_keyboard_manager_finalize; + + g_type_class_add_private (klass, sizeof (CsdKeyboardManagerPrivate)); +diff -uNrp a/plugins/keyboard/csd-keyboard-manager.h b/plugins/keyboard/csd-keyboard-manager.h +--- a/plugins/keyboard/csd-keyboard-manager.h 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/csd-keyboard-manager.h 2013-08-25 16:36:02.000000000 +0100 +@@ -51,7 +51,6 @@ CsdKeyboardManager * csd_keyboard_ + gboolean csd_keyboard_manager_start (CsdKeyboardManager *manager, + GError **error); + void csd_keyboard_manager_stop (CsdKeyboardManager *manager); +-void csd_keyboard_manager_apply_settings (CsdKeyboardManager *manager); + + G_END_DECLS + +diff -uNrp a/plugins/keyboard/csd-keyboard-plugin.h b/plugins/keyboard/csd-keyboard-plugin.h +--- a/plugins/keyboard/csd-keyboard-plugin.h 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/csd-keyboard-plugin.h 2013-08-25 16:36:02.000000000 +0100 +@@ -52,7 +52,7 @@ typedef struct + GType csd_keyboard_plugin_get_type (void) G_GNUC_CONST; + + /* All the plugins must implement this function */ +-G_MODULE_EXPORT GType register_cinnamon_settings_plugin (GTypeModule *module); ++G_MODULE_EXPORT GType register_gnome_settings_plugin (GTypeModule *module); + + G_END_DECLS + +diff -uNrp a/plugins/keyboard/csd-keyboard-xkb.c b/plugins/keyboard/csd-keyboard-xkb.c +--- a/plugins/keyboard/csd-keyboard-xkb.c 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/csd-keyboard-xkb.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,579 +0,0 @@ +-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- +- * +- * Copyright (C) 2001 Udaltsoft +- * +- * Written by Sergey V. Oudaltsov <svu@users.sourceforge.net> +- * +- * 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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#include "config.h" +- +-#include <string.h> +-#include <time.h> +- +-#include <glib/gi18n.h> +-#include <gdk/gdk.h> +-#include <gdk/gdkx.h> +-#include <gtk/gtk.h> +- +-#include <libgnomekbd/gkbd-status.h> +- +-#include <libgnomekbd/gkbd-keyboard-drawing.h> +-#include <libgnomekbd/gkbd-desktop-config.h> +-#include <libgnomekbd/gkbd-indicator-config.h> +-#include <libgnomekbd/gkbd-keyboard-config.h> +-#include <libgnomekbd/gkbd-util.h> +- +-#include "csd-keyboard-xkb.h" +-#include "delayed-dialog.h" +-#include "cinnamon-settings-profile.h" +- +-#define SETTINGS_KEYBOARD_DIR "org.cinnamon.settings-daemon.plugins.keyboard" +- +-static CsdKeyboardManager *manager = NULL; +- +-static XklEngine *xkl_engine; +-static XklConfigRegistry *xkl_registry = NULL; +- +-static GkbdDesktopConfig current_config; +-static GkbdKeyboardConfig current_kbd_config; +- +-/* never terminated */ +-static GkbdKeyboardConfig initial_sys_kbd_config; +- +-static gboolean inited_ok = FALSE; +- +-static GSettings *settings_desktop = NULL; +-static GSettings *settings_keyboard = NULL; +- +-static PostActivationCallback pa_callback = NULL; +-static void *pa_callback_user_data = NULL; +- +-static GtkStatusIcon *icon = NULL; +- +-static GHashTable *preview_dialogs = NULL; +- +-static void +-activation_error (void) +-{ +- char const *vendor; +- GtkWidget *dialog; +- +- vendor = +- ServerVendor (GDK_DISPLAY_XDISPLAY +- (gdk_display_get_default ())); +- +- /* VNC viewers will not work, do not barrage them with warnings */ +- if (NULL != vendor && NULL != strstr (vendor, "VNC")) +- return; +- +- dialog = gtk_message_dialog_new_with_markup (NULL, +- 0, +- GTK_MESSAGE_ERROR, +- GTK_BUTTONS_CLOSE, +- _ +- ("Error activating XKB configuration.\n" +- "There can be various reasons for that.\n\n" +- "If you report this situation as a bug, include the results of\n" +- " • <b>%s</b>\n" +- " • <b>%s</b>\n" +- " • <b>%s</b>\n" +- " • <b>%s</b>"), +- "xprop -root | grep XKB", +- "gsettings get org.gnome.libgnomekbd.keyboard model", +- "gsettings get org.gnome.libgnomekbd.keyboard layouts", +- "gsettings get org.gnome.libgnomekbd.keyboard options"); +- g_signal_connect (dialog, "response", +- G_CALLBACK (gtk_widget_destroy), NULL); +- csd_delayed_show_dialog (dialog); +-} +- +-static gboolean +-ensure_xkl_registry (void) +-{ +- if (!xkl_registry) { +- xkl_registry = +- xkl_config_registry_get_instance (xkl_engine); +- /* load all materials, unconditionally! */ +- if (!xkl_config_registry_load (xkl_registry, TRUE)) { +- g_object_unref (xkl_registry); +- xkl_registry = NULL; +- return FALSE; +- } +- } +- +- return TRUE; +-} +- +-static void +-apply_desktop_settings (void) +-{ +- if (!inited_ok) +- return; +- +- csd_keyboard_manager_apply_settings (manager); +- gkbd_desktop_config_load (¤t_config); +- /* again, probably it would be nice to compare things +- before activating them */ +- gkbd_desktop_config_activate (¤t_config); +-} +- +-static void +-popup_menu_launch_capplet () +-{ +- GAppInfo *info; +- GdkAppLaunchContext *ctx; +- GError *error = NULL; +- +- info = +- g_app_info_create_from_commandline +- ("cinnamon-settings region", NULL, 0, &error); +- +- if (info != NULL) { +- ctx = +- gdk_display_get_app_launch_context +- (gdk_display_get_default ()); +- +- if (g_app_info_launch (info, NULL, +- G_APP_LAUNCH_CONTEXT (ctx), &error) == FALSE) { +- g_warning +- ("Could not execute keyboard properties capplet: [%s]\n", +- error->message); +- g_error_free (error); +- } +- +- g_object_unref (info); +- g_object_unref (ctx); +- } +- +-} +- +-static void +-show_layout_destroy (GtkWidget * dialog, gint group) +-{ +- g_hash_table_remove (preview_dialogs, GINT_TO_POINTER (group)); +-} +- +-static void +-popup_menu_show_layout () +-{ +- GtkWidget *dialog; +- XklEngine *engine = +- xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY +- (gdk_display_get_default ())); +- XklState *xkl_state = xkl_engine_get_current_state (engine); +- +- gchar **group_names = gkbd_status_get_group_names (); +- +- gpointer p = g_hash_table_lookup (preview_dialogs, +- GINT_TO_POINTER +- (xkl_state->group)); +- +- if (xkl_state->group < 0 +- || xkl_state->group >= g_strv_length (group_names)) { +- return; +- } +- +- if (p != NULL) { +- /* existing window */ +- gtk_window_present (GTK_WINDOW (p)); +- return; +- } +- +- if (!ensure_xkl_registry ()) +- return; +- +- dialog = gkbd_keyboard_drawing_dialog_new (); +- gkbd_keyboard_drawing_dialog_set_group (dialog, xkl_registry, xkl_state->group); +- +- g_signal_connect (dialog, "destroy", +- G_CALLBACK (show_layout_destroy), +- GINT_TO_POINTER (xkl_state->group)); +- g_hash_table_insert (preview_dialogs, +- GINT_TO_POINTER (xkl_state->group), dialog); +- gtk_widget_show_all (dialog); +-} +- +-static void +-popup_menu_set_group (gint group_number, gboolean only_menu) +-{ +- +- XklEngine *engine = gkbd_status_get_xkl_engine (); +- +- XklState *st = xkl_engine_get_current_state(engine); +- Window cur; +- st->group = group_number; +- xkl_engine_allow_one_switch_to_secondary_group (engine); +- cur = xkl_engine_get_current_window (engine); +- if (cur != (Window) NULL) { +- xkl_debug (150, "Enforcing the state %d for window %lx\n", +- st->group, cur); +- +- xkl_engine_save_state (engine, +- xkl_engine_get_current_window +- (engine), st); +-/* XSetInputFocus( GDK_DISPLAY(), cur, RevertToNone, CurrentTime );*/ +- } else { +- xkl_debug (150, +- "??? Enforcing the state %d for unknown window\n", +- st->group); +- /* strange situation - bad things can happen */ +- } +- if (!only_menu) +- xkl_engine_lock_group (engine, st->group); +-} +- +-static void +-popup_menu_set_group_cb (GtkMenuItem * item, gpointer param) +-{ +- gint group_number = GPOINTER_TO_INT (param); +- +- popup_menu_set_group(group_number, FALSE); +-} +- +- +-static GtkMenu * +-create_status_menu (void) +-{ +- GtkMenu *popup_menu = GTK_MENU (gtk_menu_new ()); +- int i = 0; +- +- GtkMenu *groups_menu = GTK_MENU (gtk_menu_new ()); +- gchar **current_name = gkbd_status_get_group_names (); +- +- GtkWidget *item = gtk_menu_item_new_with_mnemonic (_("_Layouts")); +- gtk_widget_show (item); +- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item); +- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), +- GTK_WIDGET (groups_menu)); +- +- item = gtk_menu_item_new_with_mnemonic (_("Show _Keyboard Layout...")); +- gtk_widget_show (item); +- g_signal_connect (item, "activate", popup_menu_show_layout, NULL); +- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item); +- +- /* translators note: +- * This is the name of the cinnamon-settings "region" panel */ +- item = gtk_menu_item_new_with_mnemonic (_("Region and Language Settings")); +- gtk_widget_show (item); +- g_signal_connect (item, "activate", popup_menu_launch_capplet, NULL); +- gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item); +- +- for (i = 0; current_name && *current_name; i++, current_name++) { +- +- gchar *image_file = gkbd_status_get_image_filename (i); +- +- if (image_file == NULL) { +- item = +- gtk_menu_item_new_with_label (*current_name); +- } else { +- GdkPixbuf *pixbuf = +- gdk_pixbuf_new_from_file_at_size (image_file, +- 24, 24, +- NULL); +- GtkWidget *img = +- gtk_image_new_from_pixbuf (pixbuf); +- item = +- gtk_image_menu_item_new_with_label +- (*current_name); +- gtk_widget_show (img); +- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM +- (item), img); +- gtk_image_menu_item_set_always_show_image +- (GTK_IMAGE_MENU_ITEM (item), TRUE); +- g_free (image_file); +- } +- gtk_widget_show (item); +- gtk_menu_shell_append (GTK_MENU_SHELL (groups_menu), item); +- g_signal_connect (item, "activate", +- G_CALLBACK (popup_menu_set_group_cb), +- GINT_TO_POINTER (i)); +- } +- +- return popup_menu; +-} +- +-static void +-status_icon_popup_menu_cb (GtkStatusIcon * icon, guint button, guint time) +-{ +- GtkMenu *popup_menu = create_status_menu (); +- +- gtk_menu_popup (popup_menu, NULL, NULL, +- gtk_status_icon_position_menu, +- (gpointer) icon, button, time); +-} +- +-static void +-show_hide_icon () +-{ +- if (g_strv_length (current_kbd_config.layouts_variants) > 1) { +- if (icon == NULL) { +- xkl_debug (150, "Creating keyboard status icon\n"); +- icon = gkbd_status_new (); +- g_signal_connect (icon, "popup-menu", +- G_CALLBACK +- (status_icon_popup_menu_cb), +- NULL); +- +- } +- } else { +- if (icon != NULL) { +- xkl_debug (150, "Destroying icon\n"); +- g_object_unref (icon); +- icon = NULL; +- } +- } +-} +- +-static gboolean +-try_activating_xkb_config_if_new (GkbdKeyboardConfig * +- current_sys_kbd_config) +-{ +- /* Activate - only if different! */ +- if (!gkbd_keyboard_config_equals +- (¤t_kbd_config, current_sys_kbd_config)) { +- if (gkbd_keyboard_config_activate (¤t_kbd_config)) { +- if (pa_callback != NULL) { +- (*pa_callback) (pa_callback_user_data); +- return TRUE; +- } +- } else { +- return FALSE; +- } +- } +- return TRUE; +-} +- +-static gboolean +-filter_xkb_config (void) +-{ +- XklConfigItem *item; +- gchar *lname; +- gchar *vname; +- gchar **lv; +- gboolean any_change = FALSE; +- +- xkl_debug (100, "Filtering configuration against the registry\n"); +- if (!ensure_xkl_registry ()) +- return FALSE; +- +- lv = current_kbd_config.layouts_variants; +- item = xkl_config_item_new (); +- while (*lv) { +- xkl_debug (100, "Checking [%s]\n", *lv); +- if (gkbd_keyboard_config_split_items (*lv, &lname, &vname)) { +- gboolean should_be_dropped = FALSE; +- g_snprintf (item->name, sizeof (item->name), "%s", +- lname); +- if (!xkl_config_registry_find_layout +- (xkl_registry, item)) { +- xkl_debug (100, "Bad layout [%s]\n", +- lname); +- should_be_dropped = TRUE; +- } else if (vname) { +- g_snprintf (item->name, +- sizeof (item->name), "%s", +- vname); +- if (!xkl_config_registry_find_variant +- (xkl_registry, lname, item)) { +- xkl_debug (100, +- "Bad variant [%s(%s)]\n", +- lname, vname); +- should_be_dropped = TRUE; +- } +- } +- if (should_be_dropped) { +- gkbd_strv_behead (lv); +- any_change = TRUE; +- continue; +- } +- } +- lv++; +- } +- g_object_unref (item); +- return any_change; +-} +- +-static void +-apply_xkb_settings (void) +-{ +- GkbdKeyboardConfig current_sys_kbd_config; +- +- if (!inited_ok) +- return; +- +- gkbd_keyboard_config_init (¤t_sys_kbd_config, xkl_engine); +- +- gkbd_keyboard_config_load (¤t_kbd_config, +- &initial_sys_kbd_config); +- +- gkbd_keyboard_config_load_from_x_current (¤t_sys_kbd_config, +- NULL); +- +- if (!try_activating_xkb_config_if_new (¤t_sys_kbd_config)) { +- if (filter_xkb_config ()) { +- if (!try_activating_xkb_config_if_new +- (¤t_sys_kbd_config)) { +- g_warning +- ("Could not activate the filtered XKB configuration"); +- activation_error (); +- } +- } else { +- g_warning +- ("Could not activate the XKB configuration"); +- activation_error (); +- } +- } else +- xkl_debug (100, +- "Actual KBD configuration was not changed: redundant notification\n"); +- +- gkbd_keyboard_config_term (¤t_sys_kbd_config); +- show_hide_icon (); +-} +- +-static void +-csd_keyboard_xkb_analyze_sysconfig (void) +-{ +- if (!inited_ok) +- return; +- +- gkbd_keyboard_config_init (&initial_sys_kbd_config, xkl_engine); +- gkbd_keyboard_config_load_from_x_initial (&initial_sys_kbd_config, +- NULL); +-} +- +-void +-csd_keyboard_xkb_set_post_activation_callback (PostActivationCallback fun, +- void *user_data) +-{ +- pa_callback = fun; +- pa_callback_user_data = user_data; +-} +- +-static GdkFilterReturn +-csd_keyboard_xkb_evt_filter (GdkXEvent * xev, GdkEvent * event) +-{ +- XEvent *xevent = (XEvent *) xev; +- xkl_engine_filter_events (xkl_engine, xevent); +- return GDK_FILTER_CONTINUE; +-} +- +-/* When new Keyboard is plugged in - reload the settings */ +-static void +-csd_keyboard_new_device (XklEngine * engine) +-{ +- apply_desktop_settings (); +- apply_xkb_settings (); +-} +- +-void +-csd_keyboard_xkb_init (CsdKeyboardManager * kbd_manager) +-{ +- Display *display = +- GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); +- cinnamon_settings_profile_start (NULL); +- +- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), +- DATADIR G_DIR_SEPARATOR_S +- "icons"); +- +- manager = kbd_manager; +- cinnamon_settings_profile_start ("xkl_engine_get_instance"); +- xkl_engine = xkl_engine_get_instance (display); +- cinnamon_settings_profile_end ("xkl_engine_get_instance"); +- if (xkl_engine) { +- inited_ok = TRUE; +- +- gkbd_desktop_config_init (¤t_config, xkl_engine); +- gkbd_keyboard_config_init (¤t_kbd_config, +- xkl_engine); +- xkl_engine_backup_names_prop (xkl_engine); +- csd_keyboard_xkb_analyze_sysconfig (); +- +- settings_desktop = g_settings_new (GKBD_DESKTOP_SCHEMA); +- settings_keyboard = g_settings_new (GKBD_KEYBOARD_SCHEMA); +- g_signal_connect (settings_desktop, "changed", +- (GCallback) apply_desktop_settings, +- NULL); +- g_signal_connect (settings_keyboard, "changed", +- (GCallback) apply_xkb_settings, NULL); +- +- gdk_window_add_filter (NULL, (GdkFilterFunc) +- csd_keyboard_xkb_evt_filter, NULL); +- +- if (xkl_engine_get_features (xkl_engine) & +- XKLF_DEVICE_DISCOVERY) +- g_signal_connect (xkl_engine, "X-new-device", +- G_CALLBACK +- (csd_keyboard_new_device), NULL); +- +- cinnamon_settings_profile_start ("xkl_engine_start_listen"); +- xkl_engine_start_listen (xkl_engine, +- XKLL_MANAGE_LAYOUTS | +- XKLL_MANAGE_WINDOW_STATES); +- cinnamon_settings_profile_end ("xkl_engine_start_listen"); +- +- cinnamon_settings_profile_start ("apply_desktop_settings"); +- apply_desktop_settings (); +- cinnamon_settings_profile_end ("apply_desktop_settings"); +- cinnamon_settings_profile_start ("apply_xkb_settings"); +- apply_xkb_settings (); +- cinnamon_settings_profile_end ("apply_xkb_settings"); +- } +- preview_dialogs = g_hash_table_new (g_direct_hash, g_direct_equal); +- +- cinnamon_settings_profile_end (NULL); +-} +- +-void +-csd_keyboard_xkb_shutdown (void) +-{ +- if (!inited_ok) +- return; +- +- pa_callback = NULL; +- pa_callback_user_data = NULL; +- manager = NULL; +- +- if (preview_dialogs != NULL) +- g_hash_table_destroy (preview_dialogs); +- +- if (!inited_ok) +- return; +- +- xkl_engine_stop_listen (xkl_engine, +- XKLL_MANAGE_LAYOUTS | +- XKLL_MANAGE_WINDOW_STATES); +- +- gdk_window_remove_filter (NULL, (GdkFilterFunc) +- csd_keyboard_xkb_evt_filter, NULL); +- +- g_object_unref (settings_desktop); +- settings_desktop = NULL; +- g_object_unref (settings_keyboard); +- settings_keyboard = NULL; +- +- if (xkl_registry) { +- g_object_unref (xkl_registry); +- } +- +- g_object_unref (xkl_engine); +- +- xkl_engine = NULL; +- +- inited_ok = FALSE; +-} +diff -uNrp a/plugins/keyboard/csd-keyboard-xkb.h b/plugins/keyboard/csd-keyboard-xkb.h +--- a/plugins/keyboard/csd-keyboard-xkb.h 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/csd-keyboard-xkb.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,39 +0,0 @@ +-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- +- * cinnamon-settings-keyboard-xkb.h +- * +- * Copyright (C) 2001 Udaltsoft +- * +- * Written by Sergey V. Oudaltsov <svu@users.sourceforge.net> +- * +- * 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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#ifndef __CSD_KEYBOARD_XKB_H +-#define __CSD_KEYBOARD_XKB_H +- +-#include <libxklavier/xklavier.h> +-#include "csd-keyboard-manager.h" +- +-void csd_keyboard_xkb_init (CsdKeyboardManager *manager); +-void csd_keyboard_xkb_shutdown (void); +- +-typedef void (*PostActivationCallback) (void *userData); +- +-void +-csd_keyboard_xkb_set_post_activation_callback (PostActivationCallback fun, +- void *userData); +- +-#endif +diff -uNrp a/plugins/keyboard/delayed-dialog.c b/plugins/keyboard/delayed-dialog.c +--- a/plugins/keyboard/delayed-dialog.c 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/delayed-dialog.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,128 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * +- * 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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +-#include <stdlib.h> +-#include <string.h> +- +-#include <gtk/gtk.h> +-#include <gdk/gdkx.h> +- +-#include "delayed-dialog.h" +- +-static gboolean delayed_show_timeout (gpointer data); +-static GdkFilterReturn message_filter (GdkXEvent *xevent, +- GdkEvent *event, +- gpointer data); +- +-static GSList *dialogs = NULL; +- +-/** +- * csd_delayed_show_dialog: +- * @dialog: the dialog +- * +- * Shows the dialog as with gtk_widget_show(), unless a window manager +- * hasn't been started yet, in which case it will wait up to 5 seconds +- * for that to happen before showing the dialog. +- **/ +-void +-csd_delayed_show_dialog (GtkWidget *dialog) +-{ +- GdkDisplay *display = gtk_widget_get_display (dialog); +- Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); +- GdkScreen *screen = gtk_widget_get_screen (dialog); +- char selection_name[10]; +- Atom selection_atom; +- +- /* We can't use gdk_selection_owner_get() for this, because +- * it's an unknown out-of-process window. +- */ +- snprintf (selection_name, sizeof (selection_name), "WM_S%d", +- gdk_screen_get_number (screen)); +- selection_atom = XInternAtom (xdisplay, selection_name, True); +- if (selection_atom && +- XGetSelectionOwner (xdisplay, selection_atom) != None) { +- gtk_widget_show (dialog); +- return; +- } +- +- dialogs = g_slist_prepend (dialogs, dialog); +- +- gdk_window_add_filter (NULL, message_filter, NULL); +- +- g_timeout_add (5000, delayed_show_timeout, NULL); +-} +- +-static gboolean +-delayed_show_timeout (gpointer data) +-{ +- GSList *l; +- +- for (l = dialogs; l; l = l->next) +- gtk_widget_show (l->data); +- g_slist_free (dialogs); +- dialogs = NULL; +- +- /* FIXME: There's no gdk_display_remove_client_message_filter */ +- +- return FALSE; +-} +- +-static GdkFilterReturn +-message_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data) +-{ +- XClientMessageEvent *evt; +- char *selection_name; +- int screen; +- GSList *l, *next; +- +- if (((XEvent *)xevent)->type != ClientMessage) +- return GDK_FILTER_CONTINUE; +- +- evt = (XClientMessageEvent *)xevent; +- +- if (evt->message_type != XInternAtom (evt->display, "MANAGER", FALSE)) +- return GDK_FILTER_CONTINUE; +- +- selection_name = XGetAtomName (evt->display, evt->data.l[1]); +- +- if (strncmp (selection_name, "WM_S", 4) != 0) { +- XFree (selection_name); +- return GDK_FILTER_CONTINUE; +- } +- +- screen = atoi (selection_name + 4); +- +- for (l = dialogs; l; l = next) { +- GtkWidget *dialog = l->data; +- next = l->next; +- +- if (gdk_screen_get_number (gtk_widget_get_screen (dialog)) == screen) { +- gtk_widget_show (dialog); +- dialogs = g_slist_remove (dialogs, dialog); +- } +- } +- +- if (!dialogs) { +- gdk_window_remove_filter (NULL, message_filter, NULL); +- } +- +- XFree (selection_name); +- +- return GDK_FILTER_CONTINUE; +-} +diff -uNrp a/plugins/keyboard/delayed-dialog.h b/plugins/keyboard/delayed-dialog.h +--- a/plugins/keyboard/delayed-dialog.h 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/delayed-dialog.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,32 +0,0 @@ +-/* +- * Copyright © 2006 Novell, Inc. +- * +- * 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 Street - Suite 500, Boston, MA +- * 02110-1335, USA. +- */ +- +- +-#ifndef __DELAYED_DIALOG_H +-#define __DELAYED_DIALOG_H +- +-#include <gtk/gtk.h> +- +-G_BEGIN_DECLS +- +-void csd_delayed_show_dialog (GtkWidget *dialog); +- +-G_END_DECLS +- +-#endif +diff -uNrp a/plugins/keyboard/gkbd-configuration.c b/plugins/keyboard/gkbd-configuration.c +--- a/plugins/keyboard/gkbd-configuration.c 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/gkbd-configuration.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,350 +0,0 @@ +-/* +- * Copyright (C) 2010 Canonical Ltd. +- * +- * Authors: Jan Arne Petersen <jpetersen@openismus.com> +- * +- * Based on gkbd-status.c by Sergey V. Udaltsov <svu@gnome.org> +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the +- * Free Software Foundation, Inc., 51 Franklin Street - Suite 500, +- * Boston, MA 02110-1335, USA. +- */ +- +-#include <memory.h> +- +-#include <gdk/gdkkeysyms.h> +-#include <gdk/gdkx.h> +-#include <glib/gi18n.h> +- +-#include <libgnomekbd/gkbd-desktop-config.h> +-#include <libgnomekbd/gkbd-indicator-config.h> +- +-#include "gkbd-configuration.h" +- +-struct _GkbdConfigurationPrivate { +- XklEngine *engine; +- XklConfigRegistry *registry; +- +- GkbdDesktopConfig cfg; +- GkbdIndicatorConfig ind_cfg; +- GkbdKeyboardConfig kbd_cfg; +- +- gchar **full_group_names; +- gchar **short_group_names; +- +- gulong state_changed_handler; +- gulong config_changed_handler; +-}; +- +-enum { +- SIGNAL_CHANGED, +- SIGNAL_GROUP_CHANGED, +- LAST_SIGNAL +-}; +- +-static guint signals[LAST_SIGNAL] = { 0, }; +- +-#define GKBD_CONFIGURATION_GET_PRIVATE(o) \ +- (G_TYPE_INSTANCE_GET_PRIVATE ((o), GKBD_TYPE_CONFIGURATION, GkbdConfigurationPrivate)) +- +-G_DEFINE_TYPE (GkbdConfiguration, gkbd_configuration, G_TYPE_OBJECT) +- +-/* Should be called once for all widgets */ +-static void +-gkbd_configuration_cfg_changed (GSettings *settings, +- const char *key, +- GkbdConfiguration * configuration) +-{ +- GkbdConfigurationPrivate *priv = configuration->priv; +- +- xkl_debug (100, +- "General configuration changed in GSettings - reiniting...\n"); +- gkbd_desktop_config_load (&priv->cfg); +- gkbd_desktop_config_activate (&priv->cfg); +- +- g_signal_emit (configuration, +- signals[SIGNAL_CHANGED], 0); +-} +- +-/* Should be called once for all widgets */ +-static void +-gkbd_configuration_ind_cfg_changed (GSettings *settings, +- const char *key, +- GkbdConfiguration * configuration) +-{ +- GkbdConfigurationPrivate *priv = configuration->priv; +- xkl_debug (100, +- "Applet configuration changed in GSettings - reiniting...\n"); +- gkbd_indicator_config_load (&priv->ind_cfg); +- +- gkbd_indicator_config_free_image_filenames (&priv->ind_cfg); +- gkbd_indicator_config_load_image_filenames (&priv->ind_cfg, +- &priv->kbd_cfg); +- +- gkbd_indicator_config_activate (&priv->ind_cfg); +- +- g_signal_emit (configuration, +- signals[SIGNAL_CHANGED], 0); +-} +- +-static void +-gkbd_configuration_load_group_names (GkbdConfiguration * configuration, +- XklConfigRec * xklrec) +-{ +- GkbdConfigurationPrivate *priv = configuration->priv; +- +- if (!gkbd_desktop_config_load_group_descriptions (&priv->cfg, +- priv->registry, +- (const char **) xklrec->layouts, +- (const char **) xklrec->variants, +- &priv->short_group_names, +- &priv->full_group_names)) { +- /* We just populate no short names (remain NULL) - +- * full names are going to be used anyway */ +- gint i, total_groups = +- xkl_engine_get_num_groups (priv->engine); +- xkl_debug (150, "group descriptions loaded: %d!\n", +- total_groups); +- priv->full_group_names = +- g_new0 (char *, total_groups + 1); +- +- if (xkl_engine_get_features (priv->engine) & +- XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { +- for (i = 0; priv->kbd_cfg.layouts_variants[i]; i++) { +- priv->full_group_names[i] = +- g_strdup ((char *) priv->kbd_cfg.layouts_variants[i]); +- } +- } else { +- for (i = total_groups; --i >= 0;) { +- priv->full_group_names[i] = +- g_strdup_printf ("Group %d", i); +- } +- } +- } +-} +- +-/* Should be called once for all widgets */ +-static void +-gkbd_configuration_kbd_cfg_callback (XklEngine *engine, +- GkbdConfiguration *configuration) +-{ +- GkbdConfigurationPrivate *priv = configuration->priv; +- XklConfigRec *xklrec = xkl_config_rec_new (); +- xkl_debug (100, +- "XKB configuration changed on X Server - reiniting...\n"); +- +- gkbd_keyboard_config_load_from_x_current (&priv->kbd_cfg, +- xklrec); +- +- gkbd_indicator_config_free_image_filenames (&priv->ind_cfg); +- gkbd_indicator_config_load_image_filenames (&priv->ind_cfg, +- &priv->kbd_cfg); +- +- g_strfreev (priv->full_group_names); +- priv->full_group_names = NULL; +- +- g_strfreev (priv->short_group_names); +- priv->short_group_names = NULL; +- +- gkbd_configuration_load_group_names (configuration, +- xklrec); +- +- g_signal_emit (configuration, +- signals[SIGNAL_CHANGED], +- 0); +- +- g_object_unref (G_OBJECT (xklrec)); +-} +- +-/* Should be called once for all applets */ +-static void +-gkbd_configuration_state_callback (XklEngine * engine, +- XklEngineStateChange changeType, +- gint group, gboolean restore, +- GkbdConfiguration * configuration) +-{ +- xkl_debug (150, "group is now %d, restore: %d\n", group, restore); +- +- if (changeType == GROUP_CHANGED) { +- g_signal_emit (configuration, +- signals[SIGNAL_GROUP_CHANGED], 0, +- group); +- } +-} +- +-static void +-gkbd_configuration_init (GkbdConfiguration *configuration) +-{ +- GkbdConfigurationPrivate *priv; +- XklConfigRec *xklrec = xkl_config_rec_new (); +- +- priv = GKBD_CONFIGURATION_GET_PRIVATE (configuration); +- configuration->priv = priv; +- +- priv->engine = xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); +- if (priv->engine == NULL) { +- xkl_debug (0, "Libxklavier initialization error"); +- return; +- } +- +- priv->state_changed_handler = +- g_signal_connect (priv->engine, "X-state-changed", +- G_CALLBACK (gkbd_configuration_state_callback), +- configuration); +- priv->config_changed_handler = +- g_signal_connect (priv->engine, "X-config-changed", +- G_CALLBACK (gkbd_configuration_kbd_cfg_callback), +- configuration); +- +- gkbd_desktop_config_init (&priv->cfg, priv->engine); +- gkbd_keyboard_config_init (&priv->kbd_cfg, priv->engine); +- gkbd_indicator_config_init (&priv->ind_cfg, priv->engine); +- +- gkbd_desktop_config_load (&priv->cfg); +- gkbd_desktop_config_activate (&priv->cfg); +- +- priv->registry = xkl_config_registry_get_instance (priv->engine); +- xkl_config_registry_load (priv->registry, +- priv->cfg.load_extra_items); +- +- gkbd_keyboard_config_load_from_x_current (&priv->kbd_cfg, +- xklrec); +- +- gkbd_indicator_config_load (&priv->ind_cfg); +- +- gkbd_indicator_config_load_image_filenames (&priv->ind_cfg, +- &priv->kbd_cfg); +- +- gkbd_indicator_config_activate (&priv->ind_cfg); +- +- gkbd_configuration_load_group_names (configuration, +- xklrec); +- g_object_unref (G_OBJECT (xklrec)); +- +- gkbd_desktop_config_start_listen (&priv->cfg, +- G_CALLBACK (gkbd_configuration_cfg_changed), +- configuration); +- gkbd_indicator_config_start_listen (&priv->ind_cfg, +- G_CALLBACK (gkbd_configuration_ind_cfg_changed), +- configuration); +- xkl_engine_start_listen (priv->engine, +- XKLL_TRACK_KEYBOARD_STATE); +- +- xkl_debug (100, "Initiating the widget startup process for %p\n", +- configuration); +-} +- +-static void +-gkbd_configuration_finalize (GObject * obj) +-{ +- GkbdConfiguration *configuration = GKBD_CONFIGURATION (obj); +- GkbdConfigurationPrivate *priv = configuration->priv; +- +- xkl_debug (100, +- "Starting the gnome-kbd-configuration widget shutdown process for %p\n", +- configuration); +- +- xkl_engine_stop_listen (priv->engine, +- XKLL_TRACK_KEYBOARD_STATE); +- +- gkbd_desktop_config_stop_listen (&priv->cfg); +- gkbd_indicator_config_stop_listen (&priv->ind_cfg); +- +- gkbd_indicator_config_term (&priv->ind_cfg); +- gkbd_keyboard_config_term (&priv->kbd_cfg); +- gkbd_desktop_config_term (&priv->cfg); +- +- if (g_signal_handler_is_connected (priv->engine, +- priv->state_changed_handler)) { +- g_signal_handler_disconnect (priv->engine, +- priv->state_changed_handler); +- priv->state_changed_handler = 0; +- } +- if (g_signal_handler_is_connected (priv->engine, +- priv->config_changed_handler)) { +- g_signal_handler_disconnect (priv->engine, +- priv->config_changed_handler); +- priv->config_changed_handler = 0; +- } +- +- g_object_unref (priv->registry); +- priv->registry = NULL; +- g_object_unref (priv->engine); +- priv->engine = NULL; +- +- G_OBJECT_CLASS (gkbd_configuration_parent_class)->finalize (obj); +-} +- +-static void +-gkbd_configuration_class_init (GkbdConfigurationClass * klass) +-{ +- GObjectClass *object_class = G_OBJECT_CLASS (klass); +- +- /* Initing vtable */ +- object_class->finalize = gkbd_configuration_finalize; +- +- /* Signals */ +- signals[SIGNAL_CHANGED] = g_signal_new ("changed", +- GKBD_TYPE_CONFIGURATION, +- G_SIGNAL_RUN_LAST, +- 0, +- NULL, NULL, +- g_cclosure_marshal_VOID__VOID, +- G_TYPE_NONE, +- 0); +- signals[SIGNAL_GROUP_CHANGED] = g_signal_new ("group-changed", +- GKBD_TYPE_CONFIGURATION, +- G_SIGNAL_RUN_LAST, +- 0, +- NULL, NULL, +- g_cclosure_marshal_VOID__INT, +- G_TYPE_NONE, +- 1, +- G_TYPE_INT); +- +- g_type_class_add_private (klass, sizeof (GkbdConfigurationPrivate)); +-} +- +-GkbdConfiguration * +-gkbd_configuration_get (void) +-{ +- static gpointer instance = NULL; +- +- if (!instance) { +- instance = g_object_new (GKBD_TYPE_CONFIGURATION, NULL); +- g_object_add_weak_pointer (instance, &instance); +- } else { +- g_object_ref (instance); +- } +- +- return instance; +-} +- +-XklEngine * +-gkbd_configuration_get_xkl_engine (GkbdConfiguration *configuration) +-{ +- return configuration->priv->engine; +-} +- +-const char * const * +-gkbd_configuration_get_group_names (GkbdConfiguration *configuration) +-{ +- return configuration->priv->full_group_names; +-} +- +-const char * const * +-gkbd_configuration_get_short_group_names (GkbdConfiguration *configuration) +-{ +- return configuration->priv->short_group_names; +-} +diff -uNrp a/plugins/keyboard/gkbd-configuration.h b/plugins/keyboard/gkbd-configuration.h +--- a/plugins/keyboard/gkbd-configuration.h 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/gkbd-configuration.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,65 +0,0 @@ +-/* +- * Copyright (C) 2010 Canonical Ltd. +- * +- * Authors: Jan Arne Petersen <jpetersen@openismus.com> +- * +- * Based on gkbd-status.h by Sergey V. Udaltsov <svu@gnome.org> +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License as published by the Free Software Foundation; either +- * version 2 of the License, or (at your option) any later version. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the +- * Free Software Foundation, Inc., 51 Franklin Street - Suite 500, +- * Boston, MA 02110-1335, USA. +- */ +- +-#ifndef __GKBD_CONFIGURATION_H__ +-#define __GKBD_CONFIGURATION_H__ +- +-#include <glib-object.h> +- +-#include <libxklavier/xklavier.h> +- +-G_BEGIN_DECLS +- +-typedef struct _GkbdConfiguration GkbdConfiguration; +-typedef struct _GkbdConfigurationPrivate GkbdConfigurationPrivate; +-typedef struct _GkbdConfigurationClass GkbdConfigurationClass; +- +-#define GKBD_TYPE_CONFIGURATION (gkbd_configuration_get_type ()) +-#define GKBD_CONFIGURATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GKBD_TYPE_CONFIGURATION, GkbdConfiguration)) +-#define GKBD_INDCATOR_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), GKBD_TYPE_CONFIGURATION, GkbdConfigurationClass)) +-#define GKBD_IS_CONFIGURATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GKBD_TYPE_CONFIGURATION)) +-#define GKBD_IS_CONFIGURATION_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), GKBD_TYPE_CONFIGURATION)) +-#define GKBD_CONFIGURATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GKBD_TYPE_CONFIGURATION, GkbdConfigurationClass)) +- +-struct _GkbdConfiguration { +- GObject parent; +- +- GkbdConfigurationPrivate *priv; +-}; +- +-struct _GkbdConfigurationClass { +- GObjectClass parent_class; +-}; +- +-extern GType gkbd_configuration_get_type (void); +- +-extern GkbdConfiguration *gkbd_configuration_get (void); +- +-extern XklEngine *gkbd_configuration_get_xkl_engine (GkbdConfiguration *configuration); +- +-extern const char * const *gkbd_configuration_get_group_names (GkbdConfiguration *configuration); +-extern const char * const *gkbd_configuration_get_short_group_names (GkbdConfiguration *configuration); +- +-G_END_DECLS +- +-#endif +diff -uNrp a/plugins/keyboard/.indent.pro b/plugins/keyboard/.indent.pro +--- a/plugins/keyboard/.indent.pro 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/.indent.pro 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,2 @@ ++-kr -i8 -pcs -lps -psl ++ +diff -uNrp a/plugins/keyboard/Makefile.am b/plugins/keyboard/Makefile.am +--- a/plugins/keyboard/Makefile.am 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/keyboard/Makefile.am 2013-08-25 16:36:02.000000000 +0100 +@@ -20,25 +20,20 @@ libkeyboard_la_SOURCES = \ + csd-keyboard-plugin.c \ + csd-keyboard-manager.h \ + csd-keyboard-manager.c \ +- csd-keyboard-xkb.h \ +- csd-keyboard-xkb.c \ +- delayed-dialog.h \ +- delayed-dialog.c \ +- gkbd-configuration.c \ +- gkbd-configuration.h \ + $(NULL) + + libkeyboard_la_CPPFLAGS = \ + -I$(top_srcdir)/cinnamon-settings-daemon \ + -I$(top_srcdir)/data \ ++ -I$(top_srcdir)/plugins/common \ + -DDATADIR=\""$(pkgdatadir)"\" \ ++ -DLIBEXECDIR=\""$(libexecdir)"\" \ + -DCINNAMON_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ + $(AM_CPPFLAGS) + + libkeyboard_la_CFLAGS = \ + $(PLUGIN_CFLAGS) \ + $(SETTINGS_PLUGIN_CFLAGS) \ +- $(APPINDICATOR_CFLAGS) \ + $(KEYBOARD_CFLAGS) \ + $(AM_CFLAGS) + +@@ -46,19 +41,63 @@ libkeyboard_la_LDFLAGS = \ + $(CSD_PLUGIN_LDFLAGS) \ + $(NULL) + +-libkeyboard_la_LIBADD = \ +- $(SETTINGS_PLUGIN_LIBS) \ +- $(XF86MISC_LIBS) \ +- $(KEYBOARD_LIBS) \ +- $(APPINDICATOR_LIBS) \ ++libkeyboard_la_LIBADD = \ ++ $(top_builddir)/plugins/common/libcommon.la \ ++ $(SETTINGS_PLUGIN_LIBS) \ ++ $(XF86MISC_LIBS) \ ++ $(KEYBOARD_LIBS) \ + $(NULL) + ++libexec_PROGRAMS = csd-test-keyboard ++csd_test_keyboard_SOURCES = \ ++ test-keyboard.c \ ++ csd-keyboard-manager.h \ ++ csd-keyboard-manager.c \ ++ $(NULL) ++ ++csd_test_keyboard_CFLAGS = $(libkeyboard_la_CFLAGS) ++csd_test_keyboard_CPPFLAGS = $(libkeyboard_la_CPPFLAGS) ++csd_test_keyboard_LDADD = $(libkeyboard_la_LIBADD) $(top_builddir)/cinnamon-settings-daemon/libcsd.la ++ + plugin_in_files = \ + keyboard.cinnamon-settings-plugin.in \ + $(NULL) + + plugin_DATA = $(plugin_in_files:.cinnamon-settings-plugin.in=.cinnamon-settings-plugin) + ++if HAVE_IBUS ++noinst_PROGRAMS = test-keyboard-ibus-utils ++test_keyboard_ibus_utils_SOURCES = test-keyboard-ibus-utils.c ++test_keyboard_ibus_utils_CFLAGS = $(libkeyboard_la_CFLAGS) ++test_keyboard_ibus_utils_CPPFLAGS = $(libkeyboard_la_CPPFLAGS) ++test_keyboard_ibus_utils_LDADD = $(libkeyboard_la_LIBADD) $(top_builddir)/cinnamon-settings-daemon/libcsd.la ++ ++check-local: test-keyboard-ibus-utils ++ $(builddir)/test-keyboard-ibus-utils > /dev/null ++endif ++ ++libexec_PROGRAMS += csd-input-sources-switcher ++ ++csd_input_sources_switcher_SOURCES = \ ++ csd-input-sources-switcher.c \ ++ $(NULL) ++ ++csd_input_sources_switcher_CPPFLAGS = \ ++ -I$(top_srcdir)/data \ ++ -I$(top_srcdir)/plugins/common \ ++ $(AM_CPPFLAGS) \ ++ $(NULL) ++ ++csd_input_sources_switcher_CFLAGS = \ ++ $(SETTINGS_PLUGIN_CFLAGS) \ ++ $(AM_CFLAGS) \ ++ $(NULL) ++ ++csd_input_sources_switcher_LDADD = \ ++ $(top_builddir)/plugins/common/libcommon.la \ ++ $(SETTINGS_PLUGIN_LIBS) \ ++ $(NULL) ++ + EXTRA_DIST = \ + $(icons_DATA) \ + $(plugin_in_files) \ +diff -uNrp a/plugins/keyboard/test-keyboard.c b/plugins/keyboard/test-keyboard.c +--- a/plugins/keyboard/test-keyboard.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/test-keyboard.c 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,7 @@ ++#define NEW csd_keyboard_manager_new ++#define START csd_keyboard_manager_start ++#define STOP csd_keyboard_manager_stop ++#define MANAGER CsdKeyboardManager ++#include "csd-keyboard-manager.h" ++ ++#include "test-plugin.h" +diff -uNrp a/plugins/keyboard/test-keyboard-ibus-utils.c b/plugins/keyboard/test-keyboard-ibus-utils.c +--- a/plugins/keyboard/test-keyboard-ibus-utils.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/test-keyboard-ibus-utils.c 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,116 @@ ++#include "csd-keyboard-manager.c" ++ ++static void ++test_make_xkb_source_id (void) ++{ ++ gint i; ++ const gchar *test_strings[][2] = { ++ /* input output */ ++ { "xkb:aa:bb:cc", "aa+bb" }, ++ { "xkb:aa:bb:", "aa+bb" }, ++ { "xkb:aa::cc", "aa" }, ++ { "xkb:aa::", "aa" }, ++ { "xkb::bb:cc", "+bb" }, ++ { "xkb::bb:", "+bb" }, ++ { "xkb:::cc", "" }, ++ { "xkb:::", "" }, ++ }; ++ ++ for (i = 0; i < G_N_ELEMENTS (test_strings); ++i) ++ g_assert_cmpstr (make_xkb_source_id (test_strings[i][0]), ==, test_strings[i][1]); ++} ++ ++static void ++test_layout_from_ibus_layout (void) ++{ ++ gint i; ++ const gchar *test_strings[][2] = { ++ /* input output */ ++ { "", "" }, ++ { "a", "a" }, ++ { "a(", "a" }, ++ { "a[", "a" }, ++ }; ++ ++ for (i = 0; i < G_N_ELEMENTS (test_strings); ++i) ++ g_assert_cmpstr (layout_from_ibus_layout (test_strings[i][0]), ==, test_strings[i][1]); ++} ++ ++static void ++test_variant_from_ibus_layout (void) ++{ ++ gint i; ++ const gchar *test_strings[][2] = { ++ /* input output */ ++ { "", NULL }, ++ { "a", NULL }, ++ { "(", NULL }, ++ { "()", "" }, ++ { "(b)", "b" }, ++ { "a(", NULL }, ++ { "a()", "" }, ++ { "a(b)", "b" }, ++ }; ++ ++ for (i = 0; i < G_N_ELEMENTS (test_strings); ++i) ++ g_assert_cmpstr (variant_from_ibus_layout (test_strings[i][0]), ==, test_strings[i][1]); ++} ++ ++static void ++test_options_from_ibus_layout (void) ++{ ++ gint i, j; ++ gchar *output_0[] = { ++ NULL ++ }; ++ gchar *output_1[] = { ++ "", ++ NULL ++ }; ++ gchar *output_2[] = { ++ "b", ++ NULL ++ }; ++ gchar *output_3[] = { ++ "b", "", ++ NULL ++ }; ++ gchar *output_4[] = { ++ "b", "c", ++ NULL ++ }; ++ const gpointer tests[][2] = { ++ /* input output */ ++ { "", NULL }, ++ { "a", NULL }, ++ { "a[", output_0 }, ++ { "a[]", output_1 }, ++ { "a[b]", output_2 }, ++ { "a[b,]", output_3 }, ++ { "a[b,c]", output_4 }, ++ }; ++ ++ for (i = 0; i < G_N_ELEMENTS (tests); ++i) { ++ if (tests[i][1] == NULL) { ++ g_assert (options_from_ibus_layout (tests[i][0]) == NULL); ++ } else { ++ gchar **strv_a = options_from_ibus_layout (tests[i][0]); ++ gchar **strv_b = tests[i][1]; ++ ++ g_assert (g_strv_length (strv_a) == g_strv_length (strv_b)); ++ for (j = 0; j < g_strv_length (strv_a); ++j) ++ g_assert_cmpstr (strv_a[j], ==, strv_b[j]); ++ } ++ } ++} ++ ++int ++main (void) ++{ ++ test_make_xkb_source_id (); ++ test_layout_from_ibus_layout (); ++ test_variant_from_ibus_layout (); ++ test_options_from_ibus_layout (); ++ ++ return 0; ++} +diff -uNrp a/plugins/keyboard/xxx/csd-keyboard-xkb.c b/plugins/keyboard/xxx/csd-keyboard-xkb.c +--- a/plugins/keyboard/xxx/csd-keyboard-xkb.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/xxx/csd-keyboard-xkb.c 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,579 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2001 Udaltsoft ++ * ++ * Written by Sergey V. Oudaltsov <svu@users.sourceforge.net> ++ * ++ * 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 Street - Suite 500, Boston, MA ++ * 02110-1335, USA. ++ */ ++ ++#include "config.h" ++ ++#include <string.h> ++#include <time.h> ++ ++#include <glib/gi18n.h> ++#include <gdk/gdk.h> ++#include <gdk/gdkx.h> ++#include <gtk/gtk.h> ++ ++#include <libgnomekbd/gkbd-status.h> ++ ++#include <libgnomekbd/gkbd-keyboard-drawing.h> ++#include <libgnomekbd/gkbd-desktop-config.h> ++#include <libgnomekbd/gkbd-indicator-config.h> ++#include <libgnomekbd/gkbd-keyboard-config.h> ++#include <libgnomekbd/gkbd-util.h> ++ ++#include "csd-keyboard-xkb.h" ++#include "delayed-dialog.h" ++#include "cinnamon-settings-profile.h" ++ ++#define SETTINGS_KEYBOARD_DIR "org.cinnamon.settings-daemon.plugins.keyboard" ++ ++static CsdKeyboardManager *manager = NULL; ++ ++static XklEngine *xkl_engine; ++static XklConfigRegistry *xkl_registry = NULL; ++ ++static GkbdDesktopConfig current_config; ++static GkbdKeyboardConfig current_kbd_config; ++ ++/* never terminated */ ++static GkbdKeyboardConfig initial_sys_kbd_config; ++ ++static gboolean inited_ok = FALSE; ++ ++static GSettings *settings_desktop = NULL; ++static GSettings *settings_keyboard = NULL; ++ ++static PostActivationCallback pa_callback = NULL; ++static void *pa_callback_user_data = NULL; ++ ++static GtkStatusIcon *icon = NULL; ++ ++static GHashTable *preview_dialogs = NULL; ++ ++static void ++activation_error (void) ++{ ++ char const *vendor; ++ GtkWidget *dialog; ++ ++ vendor = ++ ServerVendor (GDK_DISPLAY_XDISPLAY ++ (gdk_display_get_default ())); ++ ++ /* VNC viewers will not work, do not barrage them with warnings */ ++ if (NULL != vendor && NULL != strstr (vendor, "VNC")) ++ return; ++ ++ dialog = gtk_message_dialog_new_with_markup (NULL, ++ 0, ++ GTK_MESSAGE_ERROR, ++ GTK_BUTTONS_CLOSE, ++ _ ++ ("Error activating XKB configuration.\n" ++ "There can be various reasons for that.\n\n" ++ "If you report this situation as a bug, include the results of\n" ++ " • <b>%s</b>\n" ++ " • <b>%s</b>\n" ++ " • <b>%s</b>\n" ++ " • <b>%s</b>"), ++ "xprop -root | grep XKB", ++ "gsettings get org.gnome.libgnomekbd.keyboard model", ++ "gsettings get org.gnome.libgnomekbd.keyboard layouts", ++ "gsettings get org.gnome.libgnomekbd.keyboard options"); ++ g_signal_connect (dialog, "response", ++ G_CALLBACK (gtk_widget_destroy), NULL); ++ csd_delayed_show_dialog (dialog); ++} ++ ++static gboolean ++ensure_xkl_registry (void) ++{ ++ if (!xkl_registry) { ++ xkl_registry = ++ xkl_config_registry_get_instance (xkl_engine); ++ /* load all materials, unconditionally! */ ++ if (!xkl_config_registry_load (xkl_registry, TRUE)) { ++ g_object_unref (xkl_registry); ++ xkl_registry = NULL; ++ return FALSE; ++ } ++ } ++ ++ return TRUE; ++} ++ ++static void ++apply_desktop_settings (void) ++{ ++ if (!inited_ok) ++ return; ++ ++ csd_keyboard_manager_apply_settings (manager); ++ gkbd_desktop_config_load (¤t_config); ++ /* again, probably it would be nice to compare things ++ before activating them */ ++ gkbd_desktop_config_activate (¤t_config); ++} ++ ++static void ++popup_menu_launch_capplet () ++{ ++ GAppInfo *info; ++ GdkAppLaunchContext *ctx; ++ GError *error = NULL; ++ ++ info = ++ g_app_info_create_from_commandline ++ ("cinnamon-settings region", NULL, 0, &error); ++ ++ if (info != NULL) { ++ ctx = ++ gdk_display_get_app_launch_context ++ (gdk_display_get_default ()); ++ ++ if (g_app_info_launch (info, NULL, ++ G_APP_LAUNCH_CONTEXT (ctx), &error) == FALSE) { ++ g_warning ++ ("Could not execute keyboard properties capplet: [%s]\n", ++ error->message); ++ g_error_free (error); ++ } ++ ++ g_object_unref (info); ++ g_object_unref (ctx); ++ } ++ ++} ++ ++static void ++show_layout_destroy (GtkWidget * dialog, gint group) ++{ ++ g_hash_table_remove (preview_dialogs, GINT_TO_POINTER (group)); ++} ++ ++static void ++popup_menu_show_layout () ++{ ++ GtkWidget *dialog; ++ XklEngine *engine = ++ xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY ++ (gdk_display_get_default ())); ++ XklState *xkl_state = xkl_engine_get_current_state (engine); ++ ++ gchar **group_names = gkbd_status_get_group_names (); ++ ++ gpointer p = g_hash_table_lookup (preview_dialogs, ++ GINT_TO_POINTER ++ (xkl_state->group)); ++ ++ if (xkl_state->group < 0 ++ || xkl_state->group >= g_strv_length (group_names)) { ++ return; ++ } ++ ++ if (p != NULL) { ++ /* existing window */ ++ gtk_window_present (GTK_WINDOW (p)); ++ return; ++ } ++ ++ if (!ensure_xkl_registry ()) ++ return; ++ ++ dialog = gkbd_keyboard_drawing_dialog_new (); ++ gkbd_keyboard_drawing_dialog_set_group (dialog, xkl_registry, xkl_state->group); ++ ++ g_signal_connect (dialog, "destroy", ++ G_CALLBACK (show_layout_destroy), ++ GINT_TO_POINTER (xkl_state->group)); ++ g_hash_table_insert (preview_dialogs, ++ GINT_TO_POINTER (xkl_state->group), dialog); ++ gtk_widget_show_all (dialog); ++} ++ ++static void ++popup_menu_set_group (gint group_number, gboolean only_menu) ++{ ++ ++ XklEngine *engine = gkbd_status_get_xkl_engine (); ++ ++ XklState *st = xkl_engine_get_current_state(engine); ++ Window cur; ++ st->group = group_number; ++ xkl_engine_allow_one_switch_to_secondary_group (engine); ++ cur = xkl_engine_get_current_window (engine); ++ if (cur != (Window) NULL) { ++ xkl_debug (150, "Enforcing the state %d for window %lx\n", ++ st->group, cur); ++ ++ xkl_engine_save_state (engine, ++ xkl_engine_get_current_window ++ (engine), st); ++/* XSetInputFocus( GDK_DISPLAY(), cur, RevertToNone, CurrentTime );*/ ++ } else { ++ xkl_debug (150, ++ "??? Enforcing the state %d for unknown window\n", ++ st->group); ++ /* strange situation - bad things can happen */ ++ } ++ if (!only_menu) ++ xkl_engine_lock_group (engine, st->group); ++} ++ ++static void ++popup_menu_set_group_cb (GtkMenuItem * item, gpointer param) ++{ ++ gint group_number = GPOINTER_TO_INT (param); ++ ++ popup_menu_set_group(group_number, FALSE); ++} ++ ++ ++static GtkMenu * ++create_status_menu (void) ++{ ++ GtkMenu *popup_menu = GTK_MENU (gtk_menu_new ()); ++ int i = 0; ++ ++ GtkMenu *groups_menu = GTK_MENU (gtk_menu_new ()); ++ gchar **current_name = gkbd_status_get_group_names (); ++ ++ GtkWidget *item = gtk_menu_item_new_with_mnemonic (_("_Layouts")); ++ gtk_widget_show (item); ++ gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item); ++ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), ++ GTK_WIDGET (groups_menu)); ++ ++ item = gtk_menu_item_new_with_mnemonic (_("Show _Keyboard Layout...")); ++ gtk_widget_show (item); ++ g_signal_connect (item, "activate", popup_menu_show_layout, NULL); ++ gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item); ++ ++ /* translators note: ++ * This is the name of the cinnamon-settings "region" panel */ ++ item = gtk_menu_item_new_with_mnemonic (_("Region and Language Settings")); ++ gtk_widget_show (item); ++ g_signal_connect (item, "activate", popup_menu_launch_capplet, NULL); ++ gtk_menu_shell_append (GTK_MENU_SHELL (popup_menu), item); ++ ++ for (i = 0; current_name && *current_name; i++, current_name++) { ++ ++ gchar *image_file = gkbd_status_get_image_filename (i); ++ ++ if (image_file == NULL) { ++ item = ++ gtk_menu_item_new_with_label (*current_name); ++ } else { ++ GdkPixbuf *pixbuf = ++ gdk_pixbuf_new_from_file_at_size (image_file, ++ 24, 24, ++ NULL); ++ GtkWidget *img = ++ gtk_image_new_from_pixbuf (pixbuf); ++ item = ++ gtk_image_menu_item_new_with_label ++ (*current_name); ++ gtk_widget_show (img); ++ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM ++ (item), img); ++ gtk_image_menu_item_set_always_show_image ++ (GTK_IMAGE_MENU_ITEM (item), TRUE); ++ g_free (image_file); ++ } ++ gtk_widget_show (item); ++ gtk_menu_shell_append (GTK_MENU_SHELL (groups_menu), item); ++ g_signal_connect (item, "activate", ++ G_CALLBACK (popup_menu_set_group_cb), ++ GINT_TO_POINTER (i)); ++ } ++ ++ return popup_menu; ++} ++ ++static void ++status_icon_popup_menu_cb (GtkStatusIcon * icon, guint button, guint time) ++{ ++ GtkMenu *popup_menu = create_status_menu (); ++ ++ gtk_menu_popup (popup_menu, NULL, NULL, ++ gtk_status_icon_position_menu, ++ (gpointer) icon, button, time); ++} ++ ++static void ++show_hide_icon () ++{ ++ if (g_strv_length (current_kbd_config.layouts_variants) > 1) { ++ if (icon == NULL) { ++ xkl_debug (150, "Creating keyboard status icon\n"); ++ icon = gkbd_status_new (); ++ g_signal_connect (icon, "popup-menu", ++ G_CALLBACK ++ (status_icon_popup_menu_cb), ++ NULL); ++ ++ } ++ } else { ++ if (icon != NULL) { ++ xkl_debug (150, "Destroying icon\n"); ++ g_object_unref (icon); ++ icon = NULL; ++ } ++ } ++} ++ ++static gboolean ++try_activating_xkb_config_if_new (GkbdKeyboardConfig * ++ current_sys_kbd_config) ++{ ++ /* Activate - only if different! */ ++ if (!gkbd_keyboard_config_equals ++ (¤t_kbd_config, current_sys_kbd_config)) { ++ if (gkbd_keyboard_config_activate (¤t_kbd_config)) { ++ if (pa_callback != NULL) { ++ (*pa_callback) (pa_callback_user_data); ++ return TRUE; ++ } ++ } else { ++ return FALSE; ++ } ++ } ++ return TRUE; ++} ++ ++static gboolean ++filter_xkb_config (void) ++{ ++ XklConfigItem *item; ++ gchar *lname; ++ gchar *vname; ++ gchar **lv; ++ gboolean any_change = FALSE; ++ ++ xkl_debug (100, "Filtering configuration against the registry\n"); ++ if (!ensure_xkl_registry ()) ++ return FALSE; ++ ++ lv = current_kbd_config.layouts_variants; ++ item = xkl_config_item_new (); ++ while (*lv) { ++ xkl_debug (100, "Checking [%s]\n", *lv); ++ if (gkbd_keyboard_config_split_items (*lv, &lname, &vname)) { ++ gboolean should_be_dropped = FALSE; ++ g_snprintf (item->name, sizeof (item->name), "%s", ++ lname); ++ if (!xkl_config_registry_find_layout ++ (xkl_registry, item)) { ++ xkl_debug (100, "Bad layout [%s]\n", ++ lname); ++ should_be_dropped = TRUE; ++ } else if (vname) { ++ g_snprintf (item->name, ++ sizeof (item->name), "%s", ++ vname); ++ if (!xkl_config_registry_find_variant ++ (xkl_registry, lname, item)) { ++ xkl_debug (100, ++ "Bad variant [%s(%s)]\n", ++ lname, vname); ++ should_be_dropped = TRUE; ++ } ++ } ++ if (should_be_dropped) { ++ gkbd_strv_behead (lv); ++ any_change = TRUE; ++ continue; ++ } ++ } ++ lv++; ++ } ++ g_object_unref (item); ++ return any_change; ++} ++ ++static void ++apply_xkb_settings (void) ++{ ++ GkbdKeyboardConfig current_sys_kbd_config; ++ ++ if (!inited_ok) ++ return; ++ ++ gkbd_keyboard_config_init (¤t_sys_kbd_config, xkl_engine); ++ ++ gkbd_keyboard_config_load (¤t_kbd_config, ++ &initial_sys_kbd_config); ++ ++ gkbd_keyboard_config_load_from_x_current (¤t_sys_kbd_config, ++ NULL); ++ ++ if (!try_activating_xkb_config_if_new (¤t_sys_kbd_config)) { ++ if (filter_xkb_config ()) { ++ if (!try_activating_xkb_config_if_new ++ (¤t_sys_kbd_config)) { ++ g_warning ++ ("Could not activate the filtered XKB configuration"); ++ activation_error (); ++ } ++ } else { ++ g_warning ++ ("Could not activate the XKB configuration"); ++ activation_error (); ++ } ++ } else ++ xkl_debug (100, ++ "Actual KBD configuration was not changed: redundant notification\n"); ++ ++ gkbd_keyboard_config_term (¤t_sys_kbd_config); ++ show_hide_icon (); ++} ++ ++static void ++csd_keyboard_xkb_analyze_sysconfig (void) ++{ ++ if (!inited_ok) ++ return; ++ ++ gkbd_keyboard_config_init (&initial_sys_kbd_config, xkl_engine); ++ gkbd_keyboard_config_load_from_x_initial (&initial_sys_kbd_config, ++ NULL); ++} ++ ++void ++csd_keyboard_xkb_set_post_activation_callback (PostActivationCallback fun, ++ void *user_data) ++{ ++ pa_callback = fun; ++ pa_callback_user_data = user_data; ++} ++ ++static GdkFilterReturn ++csd_keyboard_xkb_evt_filter (GdkXEvent * xev, GdkEvent * event) ++{ ++ XEvent *xevent = (XEvent *) xev; ++ xkl_engine_filter_events (xkl_engine, xevent); ++ return GDK_FILTER_CONTINUE; ++} ++ ++/* When new Keyboard is plugged in - reload the settings */ ++static void ++csd_keyboard_new_device (XklEngine * engine) ++{ ++ apply_desktop_settings (); ++ apply_xkb_settings (); ++} ++ ++void ++csd_keyboard_xkb_init (CsdKeyboardManager * kbd_manager) ++{ ++ Display *display = ++ GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); ++ cinnamon_settings_profile_start (NULL); ++ ++ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), ++ DATADIR G_DIR_SEPARATOR_S ++ "icons"); ++ ++ manager = kbd_manager; ++ cinnamon_settings_profile_start ("xkl_engine_get_instance"); ++ xkl_engine = xkl_engine_get_instance (display); ++ cinnamon_settings_profile_end ("xkl_engine_get_instance"); ++ if (xkl_engine) { ++ inited_ok = TRUE; ++ ++ gkbd_desktop_config_init (¤t_config, xkl_engine); ++ gkbd_keyboard_config_init (¤t_kbd_config, ++ xkl_engine); ++ xkl_engine_backup_names_prop (xkl_engine); ++ csd_keyboard_xkb_analyze_sysconfig (); ++ ++ settings_desktop = g_settings_new (GKBD_DESKTOP_SCHEMA); ++ settings_keyboard = g_settings_new (GKBD_KEYBOARD_SCHEMA); ++ g_signal_connect (settings_desktop, "changed", ++ (GCallback) apply_desktop_settings, ++ NULL); ++ g_signal_connect (settings_keyboard, "changed", ++ (GCallback) apply_xkb_settings, NULL); ++ ++ gdk_window_add_filter (NULL, (GdkFilterFunc) ++ csd_keyboard_xkb_evt_filter, NULL); ++ ++ if (xkl_engine_get_features (xkl_engine) & ++ XKLF_DEVICE_DISCOVERY) ++ g_signal_connect (xkl_engine, "X-new-device", ++ G_CALLBACK ++ (csd_keyboard_new_device), NULL); ++ ++ cinnamon_settings_profile_start ("xkl_engine_start_listen"); ++ xkl_engine_start_listen (xkl_engine, ++ XKLL_MANAGE_LAYOUTS | ++ XKLL_MANAGE_WINDOW_STATES); ++ cinnamon_settings_profile_end ("xkl_engine_start_listen"); ++ ++ cinnamon_settings_profile_start ("apply_desktop_settings"); ++ apply_desktop_settings (); ++ cinnamon_settings_profile_end ("apply_desktop_settings"); ++ cinnamon_settings_profile_start ("apply_xkb_settings"); ++ apply_xkb_settings (); ++ cinnamon_settings_profile_end ("apply_xkb_settings"); ++ } ++ preview_dialogs = g_hash_table_new (g_direct_hash, g_direct_equal); ++ ++ cinnamon_settings_profile_end (NULL); ++} ++ ++void ++csd_keyboard_xkb_shutdown (void) ++{ ++ if (!inited_ok) ++ return; ++ ++ pa_callback = NULL; ++ pa_callback_user_data = NULL; ++ manager = NULL; ++ ++ if (preview_dialogs != NULL) ++ g_hash_table_destroy (preview_dialogs); ++ ++ if (!inited_ok) ++ return; ++ ++ xkl_engine_stop_listen (xkl_engine, ++ XKLL_MANAGE_LAYOUTS | ++ XKLL_MANAGE_WINDOW_STATES); ++ ++ gdk_window_remove_filter (NULL, (GdkFilterFunc) ++ csd_keyboard_xkb_evt_filter, NULL); ++ ++ g_object_unref (settings_desktop); ++ settings_desktop = NULL; ++ g_object_unref (settings_keyboard); ++ settings_keyboard = NULL; ++ ++ if (xkl_registry) { ++ g_object_unref (xkl_registry); ++ } ++ ++ g_object_unref (xkl_engine); ++ ++ xkl_engine = NULL; ++ ++ inited_ok = FALSE; ++} +diff -uNrp a/plugins/keyboard/xxx/csd-keyboard-xkb.h b/plugins/keyboard/xxx/csd-keyboard-xkb.h +--- a/plugins/keyboard/xxx/csd-keyboard-xkb.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/xxx/csd-keyboard-xkb.h 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,39 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- ++ * cinnamon-settings-keyboard-xkb.h ++ * ++ * Copyright (C) 2001 Udaltsoft ++ * ++ * Written by Sergey V. Oudaltsov <svu@users.sourceforge.net> ++ * ++ * 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 Street - Suite 500, Boston, MA ++ * 02110-1335, USA. ++ */ ++ ++#ifndef __CSD_KEYBOARD_XKB_H ++#define __CSD_KEYBOARD_XKB_H ++ ++#include <libxklavier/xklavier.h> ++#include "csd-keyboard-manager.h" ++ ++void csd_keyboard_xkb_init (CsdKeyboardManager *manager); ++void csd_keyboard_xkb_shutdown (void); ++ ++typedef void (*PostActivationCallback) (void *userData); ++ ++void ++csd_keyboard_xkb_set_post_activation_callback (PostActivationCallback fun, ++ void *userData); ++ ++#endif +diff -uNrp a/plugins/keyboard/xxx/delayed-dialog.c b/plugins/keyboard/xxx/delayed-dialog.c +--- a/plugins/keyboard/xxx/delayed-dialog.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/xxx/delayed-dialog.c 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,128 @@ ++/* ++ * Copyright © 2006 Novell, Inc. ++ * ++ * 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 Street - Suite 500, Boston, MA ++ * 02110-1335, USA. ++ */ ++ ++#include <stdlib.h> ++#include <string.h> ++ ++#include <gtk/gtk.h> ++#include <gdk/gdkx.h> ++ ++#include "delayed-dialog.h" ++ ++static gboolean delayed_show_timeout (gpointer data); ++static GdkFilterReturn message_filter (GdkXEvent *xevent, ++ GdkEvent *event, ++ gpointer data); ++ ++static GSList *dialogs = NULL; ++ ++/** ++ * csd_delayed_show_dialog: ++ * @dialog: the dialog ++ * ++ * Shows the dialog as with gtk_widget_show(), unless a window manager ++ * hasn't been started yet, in which case it will wait up to 5 seconds ++ * for that to happen before showing the dialog. ++ **/ ++void ++csd_delayed_show_dialog (GtkWidget *dialog) ++{ ++ GdkDisplay *display = gtk_widget_get_display (dialog); ++ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); ++ GdkScreen *screen = gtk_widget_get_screen (dialog); ++ char selection_name[10]; ++ Atom selection_atom; ++ ++ /* We can't use gdk_selection_owner_get() for this, because ++ * it's an unknown out-of-process window. ++ */ ++ snprintf (selection_name, sizeof (selection_name), "WM_S%d", ++ gdk_screen_get_number (screen)); ++ selection_atom = XInternAtom (xdisplay, selection_name, True); ++ if (selection_atom && ++ XGetSelectionOwner (xdisplay, selection_atom) != None) { ++ gtk_widget_show (dialog); ++ return; ++ } ++ ++ dialogs = g_slist_prepend (dialogs, dialog); ++ ++ gdk_window_add_filter (NULL, message_filter, NULL); ++ ++ g_timeout_add (5000, delayed_show_timeout, NULL); ++} ++ ++static gboolean ++delayed_show_timeout (gpointer data) ++{ ++ GSList *l; ++ ++ for (l = dialogs; l; l = l->next) ++ gtk_widget_show (l->data); ++ g_slist_free (dialogs); ++ dialogs = NULL; ++ ++ /* FIXME: There's no gdk_display_remove_client_message_filter */ ++ ++ return FALSE; ++} ++ ++static GdkFilterReturn ++message_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data) ++{ ++ XClientMessageEvent *evt; ++ char *selection_name; ++ int screen; ++ GSList *l, *next; ++ ++ if (((XEvent *)xevent)->type != ClientMessage) ++ return GDK_FILTER_CONTINUE; ++ ++ evt = (XClientMessageEvent *)xevent; ++ ++ if (evt->message_type != XInternAtom (evt->display, "MANAGER", FALSE)) ++ return GDK_FILTER_CONTINUE; ++ ++ selection_name = XGetAtomName (evt->display, evt->data.l[1]); ++ ++ if (strncmp (selection_name, "WM_S", 4) != 0) { ++ XFree (selection_name); ++ return GDK_FILTER_CONTINUE; ++ } ++ ++ screen = atoi (selection_name + 4); ++ ++ for (l = dialogs; l; l = next) { ++ GtkWidget *dialog = l->data; ++ next = l->next; ++ ++ if (gdk_screen_get_number (gtk_widget_get_screen (dialog)) == screen) { ++ gtk_widget_show (dialog); ++ dialogs = g_slist_remove (dialogs, dialog); ++ } ++ } ++ ++ if (!dialogs) { ++ gdk_window_remove_filter (NULL, message_filter, NULL); ++ } ++ ++ XFree (selection_name); ++ ++ return GDK_FILTER_CONTINUE; ++} +diff -uNrp a/plugins/keyboard/xxx/delayed-dialog.h b/plugins/keyboard/xxx/delayed-dialog.h +--- a/plugins/keyboard/xxx/delayed-dialog.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/xxx/delayed-dialog.h 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,32 @@ ++/* ++ * Copyright © 2006 Novell, Inc. ++ * ++ * 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 Street - Suite 500, Boston, MA ++ * 02110-1335, USA. ++ */ ++ ++ ++#ifndef __DELAYED_DIALOG_H ++#define __DELAYED_DIALOG_H ++ ++#include <gtk/gtk.h> ++ ++G_BEGIN_DECLS ++ ++void csd_delayed_show_dialog (GtkWidget *dialog); ++ ++G_END_DECLS ++ ++#endif +diff -uNrp a/plugins/keyboard/xxx/gkbd-configuration.c b/plugins/keyboard/xxx/gkbd-configuration.c +--- a/plugins/keyboard/xxx/gkbd-configuration.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/xxx/gkbd-configuration.c 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,350 @@ ++/* ++ * Copyright (C) 2010 Canonical Ltd. ++ * ++ * Authors: Jan Arne Petersen <jpetersen@openismus.com> ++ * ++ * Based on gkbd-status.c by Sergey V. Udaltsov <svu@gnome.org> ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin Street - Suite 500, ++ * Boston, MA 02110-1335, USA. ++ */ ++ ++#include <memory.h> ++ ++#include <gdk/gdkkeysyms.h> ++#include <gdk/gdkx.h> ++#include <glib/gi18n.h> ++ ++#include <libgnomekbd/gkbd-desktop-config.h> ++#include <libgnomekbd/gkbd-indicator-config.h> ++ ++#include "gkbd-configuration.h" ++ ++struct _GkbdConfigurationPrivate { ++ XklEngine *engine; ++ XklConfigRegistry *registry; ++ ++ GkbdDesktopConfig cfg; ++ GkbdIndicatorConfig ind_cfg; ++ GkbdKeyboardConfig kbd_cfg; ++ ++ gchar **full_group_names; ++ gchar **short_group_names; ++ ++ gulong state_changed_handler; ++ gulong config_changed_handler; ++}; ++ ++enum { ++ SIGNAL_CHANGED, ++ SIGNAL_GROUP_CHANGED, ++ LAST_SIGNAL ++}; ++ ++static guint signals[LAST_SIGNAL] = { 0, }; ++ ++#define GKBD_CONFIGURATION_GET_PRIVATE(o) \ ++ (G_TYPE_INSTANCE_GET_PRIVATE ((o), GKBD_TYPE_CONFIGURATION, GkbdConfigurationPrivate)) ++ ++G_DEFINE_TYPE (GkbdConfiguration, gkbd_configuration, G_TYPE_OBJECT) ++ ++/* Should be called once for all widgets */ ++static void ++gkbd_configuration_cfg_changed (GSettings *settings, ++ const char *key, ++ GkbdConfiguration * configuration) ++{ ++ GkbdConfigurationPrivate *priv = configuration->priv; ++ ++ xkl_debug (100, ++ "General configuration changed in GSettings - reiniting...\n"); ++ gkbd_desktop_config_load (&priv->cfg); ++ gkbd_desktop_config_activate (&priv->cfg); ++ ++ g_signal_emit (configuration, ++ signals[SIGNAL_CHANGED], 0); ++} ++ ++/* Should be called once for all widgets */ ++static void ++gkbd_configuration_ind_cfg_changed (GSettings *settings, ++ const char *key, ++ GkbdConfiguration * configuration) ++{ ++ GkbdConfigurationPrivate *priv = configuration->priv; ++ xkl_debug (100, ++ "Applet configuration changed in GSettings - reiniting...\n"); ++ gkbd_indicator_config_load (&priv->ind_cfg); ++ ++ gkbd_indicator_config_free_image_filenames (&priv->ind_cfg); ++ gkbd_indicator_config_load_image_filenames (&priv->ind_cfg, ++ &priv->kbd_cfg); ++ ++ gkbd_indicator_config_activate (&priv->ind_cfg); ++ ++ g_signal_emit (configuration, ++ signals[SIGNAL_CHANGED], 0); ++} ++ ++static void ++gkbd_configuration_load_group_names (GkbdConfiguration * configuration, ++ XklConfigRec * xklrec) ++{ ++ GkbdConfigurationPrivate *priv = configuration->priv; ++ ++ if (!gkbd_desktop_config_load_group_descriptions (&priv->cfg, ++ priv->registry, ++ (const char **) xklrec->layouts, ++ (const char **) xklrec->variants, ++ &priv->short_group_names, ++ &priv->full_group_names)) { ++ /* We just populate no short names (remain NULL) - ++ * full names are going to be used anyway */ ++ gint i, total_groups = ++ xkl_engine_get_num_groups (priv->engine); ++ xkl_debug (150, "group descriptions loaded: %d!\n", ++ total_groups); ++ priv->full_group_names = ++ g_new0 (char *, total_groups + 1); ++ ++ if (xkl_engine_get_features (priv->engine) & ++ XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { ++ for (i = 0; priv->kbd_cfg.layouts_variants[i]; i++) { ++ priv->full_group_names[i] = ++ g_strdup ((char *) priv->kbd_cfg.layouts_variants[i]); ++ } ++ } else { ++ for (i = total_groups; --i >= 0;) { ++ priv->full_group_names[i] = ++ g_strdup_printf ("Group %d", i); ++ } ++ } ++ } ++} ++ ++/* Should be called once for all widgets */ ++static void ++gkbd_configuration_kbd_cfg_callback (XklEngine *engine, ++ GkbdConfiguration *configuration) ++{ ++ GkbdConfigurationPrivate *priv = configuration->priv; ++ XklConfigRec *xklrec = xkl_config_rec_new (); ++ xkl_debug (100, ++ "XKB configuration changed on X Server - reiniting...\n"); ++ ++ gkbd_keyboard_config_load_from_x_current (&priv->kbd_cfg, ++ xklrec); ++ ++ gkbd_indicator_config_free_image_filenames (&priv->ind_cfg); ++ gkbd_indicator_config_load_image_filenames (&priv->ind_cfg, ++ &priv->kbd_cfg); ++ ++ g_strfreev (priv->full_group_names); ++ priv->full_group_names = NULL; ++ ++ g_strfreev (priv->short_group_names); ++ priv->short_group_names = NULL; ++ ++ gkbd_configuration_load_group_names (configuration, ++ xklrec); ++ ++ g_signal_emit (configuration, ++ signals[SIGNAL_CHANGED], ++ 0); ++ ++ g_object_unref (G_OBJECT (xklrec)); ++} ++ ++/* Should be called once for all applets */ ++static void ++gkbd_configuration_state_callback (XklEngine * engine, ++ XklEngineStateChange changeType, ++ gint group, gboolean restore, ++ GkbdConfiguration * configuration) ++{ ++ xkl_debug (150, "group is now %d, restore: %d\n", group, restore); ++ ++ if (changeType == GROUP_CHANGED) { ++ g_signal_emit (configuration, ++ signals[SIGNAL_GROUP_CHANGED], 0, ++ group); ++ } ++} ++ ++static void ++gkbd_configuration_init (GkbdConfiguration *configuration) ++{ ++ GkbdConfigurationPrivate *priv; ++ XklConfigRec *xklrec = xkl_config_rec_new (); ++ ++ priv = GKBD_CONFIGURATION_GET_PRIVATE (configuration); ++ configuration->priv = priv; ++ ++ priv->engine = xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ())); ++ if (priv->engine == NULL) { ++ xkl_debug (0, "Libxklavier initialization error"); ++ return; ++ } ++ ++ priv->state_changed_handler = ++ g_signal_connect (priv->engine, "X-state-changed", ++ G_CALLBACK (gkbd_configuration_state_callback), ++ configuration); ++ priv->config_changed_handler = ++ g_signal_connect (priv->engine, "X-config-changed", ++ G_CALLBACK (gkbd_configuration_kbd_cfg_callback), ++ configuration); ++ ++ gkbd_desktop_config_init (&priv->cfg, priv->engine); ++ gkbd_keyboard_config_init (&priv->kbd_cfg, priv->engine); ++ gkbd_indicator_config_init (&priv->ind_cfg, priv->engine); ++ ++ gkbd_desktop_config_load (&priv->cfg); ++ gkbd_desktop_config_activate (&priv->cfg); ++ ++ priv->registry = xkl_config_registry_get_instance (priv->engine); ++ xkl_config_registry_load (priv->registry, ++ priv->cfg.load_extra_items); ++ ++ gkbd_keyboard_config_load_from_x_current (&priv->kbd_cfg, ++ xklrec); ++ ++ gkbd_indicator_config_load (&priv->ind_cfg); ++ ++ gkbd_indicator_config_load_image_filenames (&priv->ind_cfg, ++ &priv->kbd_cfg); ++ ++ gkbd_indicator_config_activate (&priv->ind_cfg); ++ ++ gkbd_configuration_load_group_names (configuration, ++ xklrec); ++ g_object_unref (G_OBJECT (xklrec)); ++ ++ gkbd_desktop_config_start_listen (&priv->cfg, ++ G_CALLBACK (gkbd_configuration_cfg_changed), ++ configuration); ++ gkbd_indicator_config_start_listen (&priv->ind_cfg, ++ G_CALLBACK (gkbd_configuration_ind_cfg_changed), ++ configuration); ++ xkl_engine_start_listen (priv->engine, ++ XKLL_TRACK_KEYBOARD_STATE); ++ ++ xkl_debug (100, "Initiating the widget startup process for %p\n", ++ configuration); ++} ++ ++static void ++gkbd_configuration_finalize (GObject * obj) ++{ ++ GkbdConfiguration *configuration = GKBD_CONFIGURATION (obj); ++ GkbdConfigurationPrivate *priv = configuration->priv; ++ ++ xkl_debug (100, ++ "Starting the gnome-kbd-configuration widget shutdown process for %p\n", ++ configuration); ++ ++ xkl_engine_stop_listen (priv->engine, ++ XKLL_TRACK_KEYBOARD_STATE); ++ ++ gkbd_desktop_config_stop_listen (&priv->cfg); ++ gkbd_indicator_config_stop_listen (&priv->ind_cfg); ++ ++ gkbd_indicator_config_term (&priv->ind_cfg); ++ gkbd_keyboard_config_term (&priv->kbd_cfg); ++ gkbd_desktop_config_term (&priv->cfg); ++ ++ if (g_signal_handler_is_connected (priv->engine, ++ priv->state_changed_handler)) { ++ g_signal_handler_disconnect (priv->engine, ++ priv->state_changed_handler); ++ priv->state_changed_handler = 0; ++ } ++ if (g_signal_handler_is_connected (priv->engine, ++ priv->config_changed_handler)) { ++ g_signal_handler_disconnect (priv->engine, ++ priv->config_changed_handler); ++ priv->config_changed_handler = 0; ++ } ++ ++ g_object_unref (priv->registry); ++ priv->registry = NULL; ++ g_object_unref (priv->engine); ++ priv->engine = NULL; ++ ++ G_OBJECT_CLASS (gkbd_configuration_parent_class)->finalize (obj); ++} ++ ++static void ++gkbd_configuration_class_init (GkbdConfigurationClass * klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ /* Initing vtable */ ++ object_class->finalize = gkbd_configuration_finalize; ++ ++ /* Signals */ ++ signals[SIGNAL_CHANGED] = g_signal_new ("changed", ++ GKBD_TYPE_CONFIGURATION, ++ G_SIGNAL_RUN_LAST, ++ 0, ++ NULL, NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, ++ 0); ++ signals[SIGNAL_GROUP_CHANGED] = g_signal_new ("group-changed", ++ GKBD_TYPE_CONFIGURATION, ++ G_SIGNAL_RUN_LAST, ++ 0, ++ NULL, NULL, ++ g_cclosure_marshal_VOID__INT, ++ G_TYPE_NONE, ++ 1, ++ G_TYPE_INT); ++ ++ g_type_class_add_private (klass, sizeof (GkbdConfigurationPrivate)); ++} ++ ++GkbdConfiguration * ++gkbd_configuration_get (void) ++{ ++ static gpointer instance = NULL; ++ ++ if (!instance) { ++ instance = g_object_new (GKBD_TYPE_CONFIGURATION, NULL); ++ g_object_add_weak_pointer (instance, &instance); ++ } else { ++ g_object_ref (instance); ++ } ++ ++ return instance; ++} ++ ++XklEngine * ++gkbd_configuration_get_xkl_engine (GkbdConfiguration *configuration) ++{ ++ return configuration->priv->engine; ++} ++ ++const char * const * ++gkbd_configuration_get_group_names (GkbdConfiguration *configuration) ++{ ++ return configuration->priv->full_group_names; ++} ++ ++const char * const * ++gkbd_configuration_get_short_group_names (GkbdConfiguration *configuration) ++{ ++ return configuration->priv->short_group_names; ++} +diff -uNrp a/plugins/keyboard/xxx/gkbd-configuration.h b/plugins/keyboard/xxx/gkbd-configuration.h +--- a/plugins/keyboard/xxx/gkbd-configuration.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/plugins/keyboard/xxx/gkbd-configuration.h 2013-08-25 16:36:02.000000000 +0100 +@@ -0,0 +1,65 @@ ++/* ++ * Copyright (C) 2010 Canonical Ltd. ++ * ++ * Authors: Jan Arne Petersen <jpetersen@openismus.com> ++ * ++ * Based on gkbd-status.h by Sergey V. Udaltsov <svu@gnome.org> ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin Street - Suite 500, ++ * Boston, MA 02110-1335, USA. ++ */ ++ ++#ifndef __GKBD_CONFIGURATION_H__ ++#define __GKBD_CONFIGURATION_H__ ++ ++#include <glib-object.h> ++ ++#include <libxklavier/xklavier.h> ++ ++G_BEGIN_DECLS ++ ++typedef struct _GkbdConfiguration GkbdConfiguration; ++typedef struct _GkbdConfigurationPrivate GkbdConfigurationPrivate; ++typedef struct _GkbdConfigurationClass GkbdConfigurationClass; ++ ++#define GKBD_TYPE_CONFIGURATION (gkbd_configuration_get_type ()) ++#define GKBD_CONFIGURATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GKBD_TYPE_CONFIGURATION, GkbdConfiguration)) ++#define GKBD_INDCATOR_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), GKBD_TYPE_CONFIGURATION, GkbdConfigurationClass)) ++#define GKBD_IS_CONFIGURATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GKBD_TYPE_CONFIGURATION)) ++#define GKBD_IS_CONFIGURATION_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), GKBD_TYPE_CONFIGURATION)) ++#define GKBD_CONFIGURATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GKBD_TYPE_CONFIGURATION, GkbdConfigurationClass)) ++ ++struct _GkbdConfiguration { ++ GObject parent; ++ ++ GkbdConfigurationPrivate *priv; ++}; ++ ++struct _GkbdConfigurationClass { ++ GObjectClass parent_class; ++}; ++ ++extern GType gkbd_configuration_get_type (void); ++ ++extern GkbdConfiguration *gkbd_configuration_get (void); ++ ++extern XklEngine *gkbd_configuration_get_xkl_engine (GkbdConfiguration *configuration); ++ ++extern const char * const *gkbd_configuration_get_group_names (GkbdConfiguration *configuration); ++extern const char * const *gkbd_configuration_get_short_group_names (GkbdConfiguration *configuration); ++ ++G_END_DECLS ++ ++#endif +diff -uNrp a/plugins/media-keys/csd-media-keys-manager.c b/plugins/media-keys/csd-media-keys-manager.c +--- a/plugins/media-keys/csd-media-keys-manager.c 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/media-keys/csd-media-keys-manager.c 2013-08-25 16:36:02.000000000 +0100 +@@ -120,6 +120,10 @@ static const gchar kb_introspection_xml[ + #define VOLUME_STEP 6 /* percents for one volume button press */ + #define MAX_VOLUME 65536.0 + ++#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.cinnamon.desktop.input-sources" ++#define KEY_CURRENT_INPUT_SOURCE "current" ++#define KEY_INPUT_SOURCES "sources" ++ + #define CSD_MEDIA_KEYS_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CSD_TYPE_MEDIA_KEYS_MANAGER, CsdMediaKeysManagerPrivate)) + + typedef struct { +@@ -1750,6 +1754,40 @@ do_keyboard_brightness_action (CsdMediaK + manager); + } + ++static void ++do_switch_input_source_action (CsdMediaKeysManager *manager, ++ MediaKeyType type) ++{ ++ GSettings *settings; ++ GVariant *sources; ++ gint i, n; ++ ++ settings = g_settings_new (GNOME_DESKTOP_INPUT_SOURCES_DIR); ++ sources = g_settings_get_value (settings, KEY_INPUT_SOURCES); ++ ++ n = g_variant_n_children (sources); ++ if (n < 2) ++ goto out; ++ ++ i = g_settings_get_uint (settings, KEY_CURRENT_INPUT_SOURCE); ++ ++ if (type == SWITCH_INPUT_SOURCE_KEY) ++ i += 1; ++ else ++ i -= 1; ++ ++ if (i < 0) ++ i = n - 1; ++ else if (i >= n) ++ i = 0; ++ ++ g_settings_set_uint (settings, KEY_CURRENT_INPUT_SOURCE, i); ++ ++ out: ++ g_variant_unref (sources); ++ g_object_unref (settings); ++} ++ + static gboolean + do_action (CsdMediaKeysManager *manager, + guint deviceid, +@@ -1908,6 +1946,10 @@ do_action (CsdMediaKeysManager *manager, + case BATTERY_KEY: + do_execute_desktop (manager, "gnome-power-statistics.desktop", timestamp); + break; ++ case SWITCH_INPUT_SOURCE_KEY: ++ case SWITCH_INPUT_SOURCE_BACKWARD_KEY: ++ do_switch_input_source_action (manager, type); ++ break; + /* Note, no default so compiler catches missing keys */ + case CUSTOM_KEY: + g_assert_not_reached (); +diff -uNrp a/plugins/media-keys/shortcuts-list.h b/plugins/media-keys/shortcuts-list.h +--- a/plugins/media-keys/shortcuts-list.h 2013-08-24 18:04:31.000000000 +0100 ++++ b/plugins/media-keys/shortcuts-list.h 2013-08-25 16:36:02.000000000 +0100 +@@ -81,6 +81,8 @@ typedef enum { + KEYBOARD_BRIGHTNESS_DOWN_KEY, + KEYBOARD_BRIGHTNESS_TOGGLE_KEY, + BATTERY_KEY, ++ SWITCH_INPUT_SOURCE_KEY, ++ SWITCH_INPUT_SOURCE_BACKWARD_KEY, + CUSTOM_KEY + } MediaKeyType; + +@@ -148,6 +150,9 @@ static struct { + { KEYBOARD_BRIGHTNESS_UP_KEY, NULL, "XF86KbdBrightnessUp" }, + { KEYBOARD_BRIGHTNESS_DOWN_KEY, NULL, "XF86KbdBrightnessDown" }, + { KEYBOARD_BRIGHTNESS_TOGGLE_KEY, NULL, "XF86KbdLightOnOff" }, ++ { SWITCH_INPUT_SOURCE_KEY, "switch-input-source", NULL }, ++ { SWITCH_INPUT_SOURCE_BACKWARD_KEY, "switch-input-source-backward", NULL }, ++ + { BATTERY_KEY, NULL, "XF86Battery" }, + }; + diff --git a/community/cinnamon/PKGBUILD b/community/cinnamon/PKGBUILD index a873998db..d42135311 100644 --- a/community/cinnamon/PKGBUILD +++ b/community/cinnamon/PKGBUILD @@ -1,21 +1,21 @@ -# $Id: PKGBUILD 98186 2013-10-07 12:08:20Z jgc $ +# $Id: PKGBUILD 98400 2013-10-09 16:38:23Z faidoc $ # Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com> # Contributor: M0Rf30 # Contributor: unifiedlinux # Contributor: CReimer pkgname=cinnamon -pkgver=1.9.2 +pkgver=2.0.2 pkgrel=1 pkgdesc="Linux desktop which provides advanced innovative features and a traditional user experience" arch=('i686' 'x86_64') url="http://cinnamon.linuxmint.com/" license=('GPL2') -depends=('accountsservice' 'caribou' 'clutter-gtk' 'cjs' 'gnome-bluetooth' - 'gnome-icon-theme' 'gnome-menus' 'cinnamon-settings-daemon' 'cinnamon-session' - 'gnome-themes-standard' 'gstreamer0.10' 'libgnome-keyring' 'librsvg' - 'networkmanager' 'muffin' 'pygtk' 'python2-dbus' 'python2-pillow' 'python2-pexpect' - 'python2-pyinotify' 'python2-lxml' 'webkitgtk' 'gnome-panel' 'python2' 'cinnamon-translations') +depends=('accountsservice' 'caribou' 'cinnamon-settings-daemon' 'cinnamon-session' + 'cinnamon-translations' 'cjs' 'clutter-gtk' 'gconf' 'gnome-icon-theme' + 'gnome-menus' 'gnome-themes-standard' 'gstreamer0.10' 'libgnome-keyring' + 'librsvg' 'networkmanager' 'muffin' 'pygtk' 'python2-dbus' 'python2-pillow' + 'python2-pam' 'python2-pexpect' 'python2-pyinotify' 'python2-lxml' 'webkitgtk') makedepends=('gnome-common' 'intltool') optdepends=('cinnamon-control-center: extended configurations for Cinnamon' 'cinnamon-screensaver: lock screen' @@ -25,13 +25,17 @@ optdepends=('cinnamon-control-center: extended configurations for Cinnamon' options=('!libtool' '!emptydirs') install=${pkgname}.install source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/Cinnamon/archive/$pkgver.tar.gz" - "remove_GC.patch" "fix-control-center-check.patch" - "background.patch") -sha256sums=('0abaa8da02c4d626084aa482adc551af154796c4c35faaebebdac896ce72aa6d' - '3d362efd15f8cfeca1713f5bcf88d4be787b39d7c7f24b73cd13f867af33a680' + "background.patch" + "keyboard_applet.patch" + "input_keybindings.patch" + "org.archlinux.pkexec.cinnamon-settings-users.policy") +sha256sums=('3b7043a603c19d96bf1e5ccaafde24ca507c93ee51e81e8c5c8754457a18a5ac' 'ee5694bdc997ffa35a817f691b15bae13747137d35ec2aecd0da298d7edbe426' - '373d80cdb23250fbde846ed493ba422672cc42b03a111c2ce044467ee782df7f') + '373d80cdb23250fbde846ed493ba422672cc42b03a111c2ce044467ee782df7f' + '6acb07393105ddced8a4c3c869a596350d1a7d81a808ca5307d2ad770653a9d3' + 'e28c40eb844105154fa6106f5b4de3151a22805b3a7b2f84be9ea6c15cec3de6' + '371beac9e55d36f7629d2fc5cb40d6a3e6c0f4aac014f6fefdcd6743b5194b23') prepare() { cd ${srcdir}/Cinnamon* @@ -40,20 +44,26 @@ prepare() { sed -i 's:/usr/bin/python :/usr/bin/python2 :' files/usr/bin/cinnamon-menu-editor find -type f | xargs sed -i 's@^#!.*python$@#!/usr/bin/python2@' - # Fix crasher when disconnecting from wifi - patch -Np1 -i ../remove_GC.patch - # Check for the cc-panel path, not for the unneeded binary patch -Np1 -i ../fix-control-center-check.patch # Fix missing backgrounds patch -Np1 -i ../background.patch + # Fix keyboard applet + patch -Np1 -i ../keyboard_applet.patch + + # Add input keybindings + patch -Np1 -i ../input_keybindings.patch + # Prefix 'System Settings' with 'Cinnamon' to avoid confusion with gnome-control-center - sed -i 's/^Name\(.*\)=\(.*\)/Name\1=Cinnamon \2/' files/usr/share/applications/cinnamon-settings.desktop + sed -i 's/^Name\(.*\)=\(.*\)/Name\1=Cinnamon \2/' files/usr/share/applications/cinnamon-settings{,-users}.desktop # fix for the python2 PAM module sed -i 's:import PAM:import pam:' files/usr/lib/cinnamon-settings/modules/cs_user.py + + # Use pkexec instead of gksu + sed -i 's/gksu/pkexec/' files/usr/bin/cinnamon-settings-users } build() { @@ -76,4 +86,8 @@ package() { # Remove leftover files after patching find "$pkgdir" -type f -name *.orig | xargs rm + + # Install policy file + install -Dm644 "${srcdir}/org.archlinux.pkexec.cinnamon-settings-users.policy" \ + "${pkgdir}/usr/share/polkit-1/actions/org.archlinux.pkexec.cinnamon-settings-users.policy" } diff --git a/community/cinnamon/input_keybindings.patch b/community/cinnamon/input_keybindings.patch new file mode 100644 index 000000000..2e7a4cd66 --- /dev/null +++ b/community/cinnamon/input_keybindings.patch @@ -0,0 +1,11 @@ +--- a/files/usr/lib/cinnamon-settings/modules/cs_keyboard.py ++++ b/files/usr/lib/cinnamon-settings/modules/cs_keyboard.py +@@ -119,6 +119,8 @@ KEYBINDINGS = [ + [_("Log out"), MEDIA_KEYS_SCHEMA, "logout", False, "system"], + [_("Lock screen"), MEDIA_KEYS_SCHEMA, "screensaver", False, "system"], + [_("Toggle recording desktop (must restart Cinnamon)"), MUFFIN_KEYBINDINGS_SCHEMA, "toggle-recording", True, "system"], ++ [_("Switch to next source"), MEDIA_KEYS_SCHEMA, "switch-input-source", False, "system"], ++ [_("Switch to previous source"), MEDIA_KEYS_SCHEMA, "switch-input-source-backward", False, "system"], + + # Launchers + [_("Launch help browser"), MEDIA_KEYS_SCHEMA, "help", False, "launchers"], diff --git a/community/cinnamon/keyboard_applet.patch b/community/cinnamon/keyboard_applet.patch new file mode 100644 index 000000000..29ea489ce --- /dev/null +++ b/community/cinnamon/keyboard_applet.patch @@ -0,0 +1,133 @@ +--- a/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js ++++ b/files/usr/share/cinnamon/applets/keyboard@cinnamon.org/applet.js +@@ -1,9 +1,10 @@ + const Applet = imports.ui.applet; +-const Gkbd = imports.gi.Gkbd; + const Lang = imports.lang; +-const Cinnamon = imports.gi.Cinnamon; ++const Gio = imports.gi.Gio; ++const GLib = imports.gi.GLib; + const St = imports.gi.St; + const Gtk = imports.gi.Gtk; ++const CinnamonDesktop = imports.gi.CinnamonDesktop; + const Main = imports.ui.main; + const PopupMenu = imports.ui.popupMenu; + const Util = imports.misc.util; +@@ -16,11 +17,12 @@ function LayoutMenuItem() { + LayoutMenuItem.prototype = { + __proto__: PopupMenu.PopupBaseMenuItem.prototype, + +- _init: function(config, id, indicator, long_name) { ++ _init: function(ipsettings, id, index, indicator, long_name) { + PopupMenu.PopupBaseMenuItem.prototype._init.call(this); + +- this._config = config; ++ this._ipsettings = ipsettings; + this._id = id; ++ this._index = index; + this.label = new St.Label({ text: long_name }); + this.indicator = indicator; + this.addActor(this.label); +@@ -29,7 +31,7 @@ LayoutMenuItem.prototype = { + + activate: function(event) { + PopupMenu.PopupBaseMenuItem.prototype.activate.call(this); +- this._config.lock_group(this._id); ++ this._ipsettings.set_value('current', GLib.Variant.new_uint32(this._index)); + } + }; + +@@ -62,18 +64,18 @@ MyApplet.prototype = { + this._syncConfig, + null); + +- this._config = Gkbd.Configuration.get(); +- this._config.connect('changed', Lang.bind(this, this._syncConfig)); +- this._config.connect('group-changed', Lang.bind(this, this._syncGroup)); ++ this._xkbInfo = new CinnamonDesktop.XkbInfo(); ++ this._ipsettings = new Gio.Settings({ schema: 'org.cinnamon.desktop.input-sources' }); ++ this._ipsettings.connect('changed::sources', Lang.bind(this, this._syncConfig)); ++ this._ipsettings.connect('changed::current', Lang.bind(this, this._syncGroup)); + +- this._config.start_listen(); + + this._syncConfig(); + + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); + this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() { + Main.overview.hide(); +- Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]); ++ Util.spawn(['gkbd-keyboard-display', '-l', this._selectedLayout._id]); + })); + this.menu.addAction(_("Show Character Table"), Lang.bind(this, function() { + Main.overview.hide(); +@@ -113,8 +115,8 @@ MyApplet.prototype = { + }, + + _syncConfig: function() { +- let groups = this._config.get_group_names(); +- if (groups.length > 1) { ++ let sources = this._ipsettings.get_value('sources'); ++ if (sources.n_children() > 1) { + this.actor.show(); + } else { + this.menu.close(); +@@ -127,25 +129,30 @@ MyApplet.prototype = { + for (let i = 0; i < this._labelActors.length; i++) + this._labelActors[i].destroy(); + +- let short_names = this._adjustGroupNames(this._config.get_short_group_names()); + + this._selectedLayout = null; + this._layoutItems = [ ]; + this._labelActors = [ ]; +- for (let i = 0; i < groups.length; i++) { +- let icon_name = this._config.get_group_name(i); ++ for (let i = 0; i < sources.n_children(); i++) { ++ let [type, id] = sources.get_child_value(i).deep_unpack(); ++ let displayName = id; ++ let shortName = id; ++ let xkbLayout = id; ++ if (type == 'xkb') { ++ [_exists, displayName, shortName, xkbLayout, _xkbVariant] = this._xkbInfo.get_layout_info(id); ++ } // TODO: errorhandling, handle 'ibus' ++ let icon_name = xkbLayout; // FIXME: Really? + let actor; + if (this._showFlags) + actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.FULLCOLOR, style_class: 'popup-menu-icon' }); + else +- actor = new St.Label({ text: short_names[i] }); +- let item = new LayoutMenuItem(this._config, i, actor, groups[i]); +- item._short_group_name = short_names[i]; ++ actor = new St.Label({ text: shortName }); ++ let item = new LayoutMenuItem(this._ipsettings, id, i, actor, displayName); + item._icon_name = icon_name; + this._layoutItems.push(item); + this.menu.addMenuItem(item, i); + +- let shortLabel = new St.Label({ text: short_names[i] }); ++ let shortLabel = new St.Label({ text: shortName }); + this._labelActors.push(shortLabel); + } + +@@ -153,17 +160,17 @@ MyApplet.prototype = { + }, + + _syncGroup: function() { +- let selected = this._config.get_current_group(); ++ let current = this._ipsettings.get_uint('current'); + + if (this._selectedLayout) { + this._selectedLayout.setShowDot(false); + this._selectedLayout = null; + } + +- let item = this._layoutItems[selected]; ++ let item = this._layoutItems[current]; + item.setShowDot(true); + +- let selectedLabel = this._labelActors[selected]; ++ let selectedLabel = this._labelActors[current]; + + if (this._showFlags) { + this.set_applet_icon_name(item._icon_name); diff --git a/community/cinnamon/org.archlinux.pkexec.cinnamon-settings-users.policy b/community/cinnamon/org.archlinux.pkexec.cinnamon-settings-users.policy new file mode 100644 index 000000000..4d30ca9f3 --- /dev/null +++ b/community/cinnamon/org.archlinux.pkexec.cinnamon-settings-users.policy @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE policyconfig PUBLIC + "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" + "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> +<policyconfig> + + <action id="org.archlinux.pkexec.cinnamon-settings-users"> + <message>Authentication is required to run the Cinnamon Users and Groups</message> + <icon_name>system-users</icon_name> + <defaults> + <allow_any>auth_admin</allow_any> + <allow_inactive>auth_admin</allow_inactive> + <allow_active>auth_admin</allow_active> + </defaults> + <annotate key="org.freedesktop.policykit.exec.path">/usr/lib/cinnamon-settings-users/cinnamon-settings-users.py</annotate> + <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> + </action> + +</policyconfig> + diff --git a/community/cinnamon/remove_GC.patch b/community/cinnamon/remove_GC.patch deleted file mode 100644 index 7bd8e45a6..000000000 --- a/community/cinnamon/remove_GC.patch +++ /dev/null @@ -1,124 +0,0 @@ ---- a/src/cinnamon-global.c -+++ b/src/cinnamon-global.c -@@ -1399,35 +1399,6 @@ cinnamon_global_reexec_self (CinnamonGlo - g_ptr_array_free (arr, TRUE); - } - --/** -- * cinnamon_global_gc: -- * @global: A #CinnamonGlobal -- * -- * Start a garbage collection process. For more information, see -- * https://developer.mozilla.org/En/JS_GC -- */ --void --cinnamon_global_gc (CinnamonGlobal *global) --{ -- JSContext *context = gjs_context_get_native_context (global->js_context); -- -- JS_GC (context); --} -- --/** -- * cinnamon_global_maybe_gc: -- * @global: A #CinnamonGlobal -- * -- * Start a garbage collection process when it would free up enough memory -- * to be worth the amount of time it would take -- * https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_MaybeGC -- */ --void --cinnamon_global_maybe_gc (CinnamonGlobal *global) --{ -- gjs_context_maybe_gc (global->js_context); --} -- - static void - cinnamon_global_on_gc (GjsContext *context, - CinnamonGlobal *global) -@@ -1768,13 +1768,6 @@ run_leisure_functions (gpointer data) - if (global->work_count > 0) - return FALSE; - -- /* Previously we called gjs_maybe_gc(). However, it simply doesn't -- * trigger often enough. Garbage collection is very fast here, so -- * let's just aggressively GC. This will help avoid both heap -- * fragmentation, and the GC kicking in when we don't want it to. -- */ -- gjs_context_gc (global->js_context); -- - /* No leisure closures, so we are done */ - if (global->leisure_closures == NULL) - return FALSE; ---- a/src/cinnamon-global.h -+++ b/src/cinnamon-global.h -@@ -88,10 +88,6 @@ void cinnamon_global_set_pointer - int y); - - --/* JavaScript utilities */ --void cinnamon_global_gc (CinnamonGlobal *global); --void cinnamon_global_maybe_gc (CinnamonGlobal *global); -- - typedef struct { - guint glibc_uordblks; - - - ---- a/js/perf/core.js -+++ b/js/perf/core.js -@@ -1,5 +1,7 @@ - // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- - -+const System = imports.system; -+ - const Main = imports.ui.main; - const Scripting = imports.ui.scripting; - -@@ -99,7 +101,7 @@ function run() { - Main.overview.hide(); - yield Scripting.waitLeisure(); - -- global.gc(); -+ System.gc(); - yield Scripting.sleep(1000); - Scripting.collectStatistics(); - Scripting.scriptEvent('afterShowHide'); ---- a/js/ui/lookingGlass.js -+++ b/js/ui/lookingGlass.js -@@ -11,6 +11,7 @@ const St = imports.gi.St; - const Cinnamon = imports.gi.Cinnamon; - const Signals = imports.signals; - const Lang = imports.lang; -+const System = imports.system; - - const History = imports.misc.history; - const Extension = imports.ui.extension; -@@ -680,7 +681,7 @@ Memory.prototype = { - - this._gcbutton = new St.Button({ label: 'Full GC', - style_class: 'lg-obj-inspector-button' }); -- this._gcbutton.connect('clicked', Lang.bind(this, function () { global.gc(); this._renderText(); })); -+ this._gcbutton.connect('clicked', Lang.bind(this, function () { System.gc(); this._renderText(); })); - this.actor.add(this._gcbutton, { x_align: St.Align.START, - x_fill: false }); - ---- a/js/ui/lookingGlassDBus.js -+++ b/js/ui/lookingGlassDBus.js -@@ -1,5 +1,7 @@ - // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- - -+const System = imports.system; -+ - const Gio = imports.gi.Gio; - const Main = imports.ui.main; - const Extension = imports.ui.extension; -@@ -99,7 +101,7 @@ CinnamonLookingGlass.prototype = { - }, - - FullGc: function() { -- global.gc(); -+ System.gc(); - }, - - Inspect: function(path) { diff --git a/community/dmd/PKGBUILD b/community/dmd/PKGBUILD index 95bed66d6..72037c483 100644 --- a/community/dmd/PKGBUILD +++ b/community/dmd/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 97970 2013-10-02 11:26:53Z dicebot $ +# $Id: PKGBUILD 98383 2013-10-09 11:50:00Z dicebot $ # Maintainer: Mihails Strasunse <public@dicebot.lv> # Contributor: Sven-Hendrik Haase <sh@lutzhaase.com> # Contributor: Chris Brannon <cmbrannon79@gmail.com> @@ -10,7 +10,7 @@ pkgname=('dmd' 'libphobos-devel' 'libphobos' 'dtools') groups=('dlang' 'dlang-dmd') pkgbase=dmd pkgver=2.063.2 -pkgrel=3 +pkgrel=4 arch=('i686' 'x86_64') url="http://www.dlang.org" makedepends=('git' 'gcc' 'make') @@ -62,7 +62,7 @@ package_dmd() { install -Dm755 $srcdir/dmd/src/dmd $pkgdir/usr/bin/dmd mkdir -p $pkgdir/etc - echo -e "[Environment]\nDFLAGS=-I/usr/include/dlang/dmd -I/usr/include/dlang/dmd/druntime/import -L-L/usr/lib -L-L/usr/lib32 -L--no-warn-search-mismatch -L--export-dynamic" > $pkgdir/etc/dmd.conf + echo -e "[Environment]\nDFLAGS=-I/usr/include/dlang/dmd -L-L/usr/lib -L-L/usr/lib32 -L--no-warn-search-mismatch -L--export-dynamic" > $pkgdir/etc/dmd.conf install -Dm644 $srcdir/dmd/docs/man/man1/dmd.1 $pkgdir/usr/share/man/man1/dmd.1 install -Dm644 $srcdir/dmd/docs/man/man1/dmd.conf.5 $pkgdir/usr/share/man/man5/dmd.conf.5 @@ -89,9 +89,7 @@ package_libphobos-devel() { mkdir -p $pkgdir/usr/include/dlang/dmd cp -r $srcdir/phobos/{*.d,etc,std} $pkgdir/usr/include/dlang/dmd - - mkdir -p $pkgdir/usr/include/dlang/dmd/druntime - cp -r $srcdir/druntime/import $pkgdir/usr/include/dlang/dmd/druntime + cp -r $srcdir/druntime/import/* $pkgdir/usr/include/dlang/dmd/ find $pkgdir/usr -type f | xargs chmod 0644 diff --git a/community/fbpanel/PKGBUILD b/community/fbpanel/PKGBUILD index 5edf5f2a1..53119bb8e 100644 --- a/community/fbpanel/PKGBUILD +++ b/community/fbpanel/PKGBUILD @@ -1,23 +1,31 @@ -# $Id: PKGBUILD 65166 2012-02-20 06:59:42Z spupykin $ +# $Id: PKGBUILD 98391 2013-10-09 14:15:54Z spupykin $ # Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> # Maintainer: Jeff Mickey <jeff@archlinux.org> # Contributor: Torin Daniel <torindan@gmail.com> +# Contributor: Diep Pham Van <imeo@favadi.com> pkgname=fbpanel pkgver=6.1 -pkgrel=3 +pkgrel=4 pkgdesc="NetWM compliant desktop panel" arch=('i686' 'x86_64') url="http://fbpanel.sourceforge.net/" depends=('gtk2') license=('GPL') -source=(http://downloads.sourceforge.net/fbpanel/fbpanel-${pkgver}.tbz2) -md5sums=('80ca0c64195b30587cfcb8c2cd9887a0') +source=("http://downloads.sourceforge.net/fbpanel/fbpanel-${pkgver}.tbz2" + "battery_fix.patch") +md5sums=('80ca0c64195b30587cfcb8c2cd9887a0' + 'dc1db8eee1be899725f350eb36793ea4') build() { cd "$srcdir/$pkgname-$pkgver" + patch -p1 <$srcdir/battery_fix.patch ./configure --prefix=/usr echo "LDFLAGSX += -lX11 -lm" >>config.mk make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" make DESTDIR="$pkgdir/" install } diff --git a/community/fbpanel/battery_fix.patch b/community/fbpanel/battery_fix.patch new file mode 100644 index 000000000..3a86e3ca7 --- /dev/null +++ b/community/fbpanel/battery_fix.patch @@ -0,0 +1,119 @@ +*** fbpanel-6.1/plugins/battery/os_linux.c~ 2010-04-08 12:35:26.000000000 +0200 +--- fbpanel-6.1/plugins/battery/os_linux.c 2013-07-09 13:13:50.958994816 +0200 +*************** +*** 1,5 **** +--- 1,6 ---- + + #include <string.h> ++ #include <stdlib.h> + #include <ctype.h> + + #define LEN 100 +*************** +*** 120,129 **** + } + + static gboolean + battery_update_os_sys(battery_priv *c) + { + ENTER; +! RET(FALSE); + } + + static gboolean +--- 121,215 ---- + } + + static gboolean ++ read_sys(battery_priv *c, GString *path) ++ { ++ int len, dcap, rcap; ++ gchar *buf; ++ gboolean ret, exist, charging; ++ ++ ENTER; ++ len = path->len; ++ ++ g_string_append(path, "/present"); ++ ret = g_file_get_contents(path->str, &buf, 0, NULL); ++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail"); ++ g_string_truncate(path, len); ++ if (!ret) ++ RET(FALSE); ++ exist = atoi(buf); ++ g_free(buf); ++ if (!exist) ++ RET(FALSE); ++ ++ g_string_append(path, "/charge_full_design"); ++ ret = g_file_get_contents(path->str, &buf, 0, NULL); ++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail"); ++ g_string_truncate(path, len); ++ if (!ret) ++ RET(FALSE); ++ dcap = atoi(buf); ++ g_free(buf); ++ if (dcap <= 0) ++ RET(FALSE); ++ ++ g_string_append(path, "/charge_now"); ++ ret = g_file_get_contents(path->str, &buf, 0, NULL); ++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail"); ++ g_string_truncate(path, len); ++ if (!ret) ++ RET(FALSE); ++ rcap = atoi(buf); ++ g_free(buf); ++ if (rcap <= 0) ++ RET(FALSE); ++ ++ g_string_append(path, "/current_now"); ++ ret = g_file_get_contents(path->str, &buf, 0, NULL); ++ DBG("reading %s %s\n", path->str, ret ? "ok" : "fail"); ++ g_string_truncate(path, len); ++ if (!ret) ++ RET(FALSE); ++ charging = (atoi(buf) <= 0); ++ g_free(buf); ++ ++ c->exist = exist; ++ c->charging = charging; ++ c->level = (int) ((gfloat) rcap * 100 / (gfloat) dcap); ++ RET(TRUE); ++ } ++ ++ static gboolean + battery_update_os_sys(battery_priv *c) + { ++ GString *path; ++ int len; ++ GDir *dir; ++ gboolean ret = FALSE; ++ const gchar *file; ++ + ENTER; +! c->exist = FALSE; +! path = g_string_sized_new(200); +! g_string_append(path, "/sys/class/power_supply"); +! len = path->len; +! if (!(dir = g_dir_open(path->str, 0, NULL))) { +! DBG("can't open dir %s\n", path->str); +! goto out; +! } +! while (!ret && (file = g_dir_read_name(dir))) { +! g_string_append(path, "/"); +! g_string_append(path, file); +! DBG("testing %s\n", path->str); +! ret = g_file_test(path->str, G_FILE_TEST_IS_DIR); +! if (ret) +! ret = read_sys(c, path); +! g_string_truncate(path, len); +! } +! g_dir_close(dir); +! +! out: +! g_string_free(path, TRUE); +! RET(ret); + } + + static gboolean diff --git a/community/gnome-menus2/PKGBUILD b/community/gnome-menus2/PKGBUILD deleted file mode 100644 index 0744e080d..000000000 --- a/community/gnome-menus2/PKGBUILD +++ /dev/null @@ -1,33 +0,0 @@ -# $Id: PKGBUILD 80041 2012-11-15 18:34:49Z bgyorgy $ -# Maintainer: Balló György <ballogyor+arch at gmail dot com> -# Contributor: Jan de Groot <jan@archlinux.org> - -pkgname=gnome-menus2 -_pkgname=gnome-menus -pkgver=3.0.1 -pkgrel=2 -pkgdesc="Library for the Desktop Menu Specification (legacy version)" -arch=('i686' 'x86_64') -depends=('glib2' 'python2') -makedepends=('intltool' 'gobject-introspection') -options=('!libtool') -license=('LGPL') -url="http://www.gnome.org/" -source=(http://ftp.gnome.org/pub/gnome/sources/$_pkgname/${pkgver%.*}/$_pkgname-$pkgver.tar.bz2) -sha256sums=('579c119c26f37781f66708e867ea45b3c37589b3b69e5b32d33e9bdb944165f0') - -build() { - cd "$srcdir/$_pkgname-$pkgver" - - ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --disable-static \ - PYTHON=/usr/bin/python2 - make -} - -package(){ - cd "$srcdir/$_pkgname-$pkgver" - - make -C libmenu DESTDIR="$pkgdir" install - make -C python DESTDIR="$pkgdir" install -} diff --git a/community/gnome-panel/PKGBUILD b/community/gnome-panel/PKGBUILD deleted file mode 100644 index b6779e91b..000000000 --- a/community/gnome-panel/PKGBUILD +++ /dev/null @@ -1,64 +0,0 @@ -# $Id: PKGBUILD 98191 2013-10-07 12:08:25Z jgc $ -# Maintainer: Balló György <ballogyor+arch at gmail dot com> -# Contributor: Jan de Groot <jgc@archlinux.org> - -pkgbase=gnome-panel -pkgname=('gnome-panel' 'gnome-flashback-session') -pkgver=3.8.0 -pkgrel=2 -arch=('i686' 'x86_64') -license=('GPL') -pkgdesc="Legacy GNOME panel" -url="https://live.gnome.org/GnomePanel" -depends=('dconf' 'evolution-data-server' 'gconf' 'gnome-desktop' 'gnome-menus' 'librsvg' - 'libwnck3' 'telepathy-glib') -makedepends=('gobject-introspection' 'intltool' 'itstool' 'networkmanager') -install=$pkgbase.install -options=('!libtool') -source=(http://ftp.gnome.org/pub/gnome/sources/$pkgbase/${pkgver:0:3}/$pkgbase-$pkgver.tar.xz - libgweather-3.10.patch - session.patch) -sha256sums=('d1cda458a38cb4f7d2a50c61b1a72f4bf4c39cab65ae0e6cfdc4e0c122252e7a' - 'd9e21449fc6c5f235673fe47e5b817ac7597490518a557908b14ca875263d90e' - 'cd4c21cf394ea5a702c660bb0d31cae31260bec1cee4e7ca8ee6c8aec2707ebb') - -prepare() { - cd "$pkgbase-$pkgver" - - # Fix build with libgweather 3.10 - patch -Np1 -i "$srcdir/libgweather-3.10.patch" - - # Add more required components to the session file - patch -Np1 -i "$srcdir/session.patch" -} - -build() { - cd "$pkgbase-$pkgver" - - ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib/$pkgbase \ - --disable-static --disable-schemas-compile \ - PYTHON=/usr/bin/python2 - make -} - -package_gnome-panel() { - cd "$pkgbase-$pkgver" - make DESTDIR="$pkgdir" install - - # Split out the session files - rm -r "$pkgdir"/usr/{lib/gnome-panel/gnome-*,share/{gnome-session,xsessions}} -} - -package_gnome-flashback-session() { - pkgdesc="Shell for Gnome 3 which was initially called Gnome Fallback" - url="https://live.gnome.org/GnomeFlashback" - depends=('gnome-screensaver' 'gnome-panel' 'gnome-session' 'gnome-settings-daemon' - 'gnome-settings-daemon-compat' 'gnome-themes-standard' 'metacity' - 'notification-daemon' 'polkit-gnome') - install= - - cd "$pkgbase-$pkgver" - make -C gnome-panel DESTDIR="$pkgdir" install-libexecSCRIPTS - make -C data DESTDIR="$pkgdir" install-sessionDATA - make -C data DESTDIR="$pkgdir" install-xsessionDATA -} diff --git a/community/gnome-panel/gnome-panel.install b/community/gnome-panel/gnome-panel.install deleted file mode 100644 index f7e8c46ac..000000000 --- a/community/gnome-panel/gnome-panel.install +++ /dev/null @@ -1,12 +0,0 @@ -post_install() { - glib-compile-schemas /usr/share/glib-2.0/schemas - gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor -} - -post_upgrade() { - post_install -} - -post_remove() { - post_install -} diff --git a/community/gnome-panel/libgweather-3.10.patch b/community/gnome-panel/libgweather-3.10.patch deleted file mode 100644 index 0a6e0e4e4..000000000 --- a/community/gnome-panel/libgweather-3.10.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -Naur gnome-panel-3.6.2.orig/applets/clock/clock-location.c gnome-panel-3.6.2/applets/clock/clock-location.c ---- gnome-panel-3.6.2.orig/applets/clock/clock-location.c 2013-09-27 02:39:03.315952789 +0000 -+++ gnome-panel-3.6.2/applets/clock/clock-location.c 2013-09-27 02:40:24.552036953 +0000 -@@ -542,9 +542,8 @@ - } - - priv->weather_info = -- gweather_info_new_for_world (priv->world, -- priv->loc, -- GWEATHER_FORECAST_LIST); -+ gweather_info_new (priv->loc, -+ GWEATHER_FORECAST_LIST); - g_signal_connect (priv->weather_info, "updated", - G_CALLBACK (weather_info_updated), loc); - diff --git a/community/gnome-panel/session.patch b/community/gnome-panel/session.patch deleted file mode 100644 index d288b41bb..000000000 --- a/community/gnome-panel/session.patch +++ /dev/null @@ -1,8 +0,0 @@ -diff -Naur gnome-panel-3.8.0.orig/data/gnome-flashback.session.desktop.in gnome-panel-3.8.0/data/gnome-flashback.session.desktop.in ---- gnome-panel-3.8.0.orig/data/gnome-flashback.session.desktop.in 2013-09-27 03:12:58.291413318 +0000 -+++ gnome-panel-3.8.0/data/gnome-flashback.session.desktop.in 2013-09-27 03:15:34.183583841 +0000 -@@ -1,3 +1,3 @@ - [GNOME Session] - _Name=GNOME Flashback --RequiredComponents=gnome-panel;gnome-settings-daemon;gnome-screensaver;metacity; -+RequiredComponents=gnome-panel;gnome-settings-daemon;gnome-screensaver;metacity;notification-daemon;polkit-gnome-authentication-agent-1;gnome-fallback-background-helper;gnome-fallback-media-keys-helper;gnome-fallback-mount-helper; diff --git a/community/libdesktop-agnostic/PKGBUILD b/community/libdesktop-agnostic/PKGBUILD deleted file mode 100644 index e6848d808..000000000 --- a/community/libdesktop-agnostic/PKGBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# $Id: PKGBUILD 79732 2012-11-11 19:02:50Z bgyorgy $ -# Maintainer: Balló György <ballogyor+arch at gmail dot com> -# Contributor: Jan "heftig" Steffens <jan.steffens@gmail.com> -# Contributor: Daniel J Griffiths <ghost1227@archlinux.us> - -pkgname=libdesktop-agnostic -pkgver=0.3.92 -pkgrel=5 -pkgdesc="Provides an extensible config API, a unified virtual fs API, and a desktop item editor for GLib-based projects" -arch=('i686' 'x86_64') -url="https://launchpad.net/libdesktop-agnostic" -license=('GPL' 'LGPL') -depends=('pygtk') -makedepends=('intltool' 'vala' 'gconf' 'gobject-introspection') -optdepends=('gconf: gconf configuration backend') -options=('!libtool') -backup=(etc/xdg/libdesktop-agnostic/desktop-agnostic.ini) -source=(https://launchpad.net/$pkgname/0.4/$pkgver/+download/$pkgname-$pkgver.tar.gz) -md5sums=('42374d226a21d57637f97173f6b105a1') - -build() { - cd "$srcdir/$pkgname-$pkgver" - export PYTHON=/usr/bin/python2 - - python2 ./waf configure --prefix=/usr --sysconfdir=/etc \ - --config-backends=gconf,keyfile \ - --vfs-backends=gio \ - --desktop-entry-backends=gio,glib - python2 ./waf -} - -package() { - cd "$srcdir/$pkgname-$pkgver" - - python2 ./waf install --destdir="$pkgdir" -} diff --git a/community/muffin/PKGBUILD b/community/muffin/PKGBUILD index 75cbc998b..69783f124 100644 --- a/community/muffin/PKGBUILD +++ b/community/muffin/PKGBUILD @@ -1,22 +1,22 @@ -# $Id: PKGBUILD 98231 2013-10-07 17:24:18Z faidoc $ +# $Id: PKGBUILD 98396 2013-10-09 15:37:53Z faidoc $ # Maintainer: Alexandre Filgueira <alexfilgueira@cinnarch.com> # Contributor: Adam Hani Schakaki <adam@schakaki.net> # Contributor: Ner0 pkgname=muffin -pkgver=2.0.0 +pkgver=2.0.1 pkgrel=1 pkgdesc="Cinnamon window manager based on Mutter" arch=('i686' 'x86_64') url="https://github.com/linuxmint/muffin" license=('GPL') -depends=('clutter' 'gobject-introspection' 'gsettings-desktop-schemas' \ - 'libcanberra' 'startup-notification' 'zenity' 'dconf' 'cinnamon-desktop') +depends=('clutter' 'gobject-introspection' 'cinnamon-desktop' 'libcanberra' + 'startup-notification' 'zenity' 'dconf') makedepends=('intltool' 'gnome-doc-utils' 'gnome-common') options=('!libtool' '!emptydirs') install=$pkgname.install source=("$pkgname-$pkgver.tar.gz::https://github.com/linuxmint/muffin/archive/$pkgver.tar.gz") -sha256sums=('e16efc49d7629141d0d784ca855b9276c83deee0669b7053d457e9f7676dc028') +sha256sums=('0643e10e4932ee575b864531e662df5bf209a87b64bd8e0324adbaee6d8af6dd') build() { cd ${pkgname}-${pkgver} diff --git a/community/nautilus-actions/PKGBUILD b/community/nautilus-actions/PKGBUILD index c8e5e37b0..3d4928f50 100644 --- a/community/nautilus-actions/PKGBUILD +++ b/community/nautilus-actions/PKGBUILD @@ -1,22 +1,22 @@ -# $Id: PKGBUILD 72886 2012-06-24 13:16:21Z bgyorgy $ +# $Id: PKGBUILD 98372 2013-10-09 07:28:55Z bgyorgy $ # Maintainer: Balló György <ballogyor+arch at gmail dot com> # Contributor: Ionut Biru <ibiru@archlinux.org> # Contributor: Roman Kyrylych <roman@archlinux.org> # Contributor: Tor Krill <tor@krill.nu> pkgname=nautilus-actions -pkgver=3.2.2 -pkgrel=2 +pkgver=3.2.3 +pkgrel=1 pkgdesc="Configures programs to be launched when files are selected in Nautilus" arch=('i686' 'x86_64') url="http://www.nautilus-actions.org/" license=('GPL') -depends=('nautilus' 'libunique3' 'libgtop' 'gconf' 'libsm') +depends=('nautilus' 'libunique3' 'libgtop' 'gconf') makedepends=('intltool' 'gnome-doc-utils') install=nautilus-actions.install options=('!libtool') -source=(http://ftp.gnome.org/pub/GNOME/sources/nautilus-actions/${pkgver%.*}/$pkgname-$pkgver.tar.xz) -sha256sums=('214af9fd2a7f561366bf88446f9b79182e696a303da8e15c7a8a1ffaeaca11c4') +source=(http://www.nautilus-actions.org/downloads/$pkgname-$pkgver.tar.gz) +sha1sums=('af3b8017a13feeda221a52cfef4e61bea659e436') build() { cd "$srcdir/$pkgname-$pkgver" diff --git a/community/openbox/PKGBUILD b/community/openbox/PKGBUILD index 62c63481f..803ad178c 100644 --- a/community/openbox/PKGBUILD +++ b/community/openbox/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 96638 2013-09-02 18:32:53Z bgyorgy $ +# $Id: PKGBUILD 98381 2013-10-09 08:18:19Z bgyorgy $ # Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl> # Contributor: Brad Fanella <bradfanella@archlinux.us> # Contributor: Andrea Scarpino <andrea@archlinux.org> @@ -6,15 +6,14 @@ pkgname=openbox pkgver=3.5.2 -pkgrel=4 +pkgrel=5 pkgdesc='Highly configurable and lightweight X11 window manager' arch=('i686' 'x86_64') url='http://openbox.org' license=('GPL') depends=('startup-notification' 'libxml2' 'libxinerama' 'libxrandr' 'libxcursor' 'pango' 'imlib2' 'librsvg') -optdepends=('gnome-flashback-session: for the GNOME/Openbox xsession' - 'kdebase-workspace: for the KDE/Openbox xsession' +optdepends=('kdebase-workspace: for the KDE/Openbox xsession' 'python2-xdg: for the openbox-xdg-autostart script') groups=('lxde') options=('!libtool') @@ -22,12 +21,10 @@ backup=('etc/xdg/openbox/menu.xml' 'etc/xdg/openbox/rc.xml' 'etc/xdg/openbox/autostart' 'etc/xdg/openbox/environment') source=(http://www.icculus.org/openbox/releases/$pkgname-$pkgver.tar.gz openbox-3.5.0-title-matching.patch - openbox-3.5.0-which-2.20.patch - openbox-3.5.0-gnome-session.patch) + openbox-3.5.0-which-2.20.patch) md5sums=('93df606606053b7e8578a5c116afb8ec' '0a11d7149da210a31ef88f8a9c717711' - '7ca3b5244bb092d46f5bcf1e2bdf4a18' - '47fb1a16af05b6aba3b07051e6027f93') + '7ca3b5244bb092d46f5bcf1e2bdf4a18') prepare() { cd $pkgname-$pkgver @@ -35,9 +32,6 @@ prepare() { patch -Np1 -i "$srcdir"/openbox-3.5.0-title-matching.patch # OB#5277 patch -Np1 -i "$srcdir"/openbox-3.5.0-which-2.20.patch # FS#11455 - # Fix GNOME/Openbox xsession with GNOME 3.8 - patch -Np1 -i "$srcdir"/openbox-3.5.0-gnome-session.patch - sed -i 's|/usr/bin/env python|/usr/bin/env python2|' \ data/autostart/openbox-xdg-autostart } @@ -56,11 +50,12 @@ package() { cd $pkgname-$pkgver make DESTDIR="$pkgdir" install - rm "$pkgdir"/usr/bin/gdm-control \ - "$pkgdir"/usr/share/gnome-session/sessions/openbox-gnome-fallback.session + # GNOME Panel is no longer available in the official repositories + rm -r "$pkgdir"/usr/bin/{gdm-control,gnome-panel-control,openbox-gnome-session} \ + "$pkgdir"/usr/share/gnome{,-session} \ + "$pkgdir"/usr/share/man/man1/openbox-gnome-session.1 \ + "$pkgdir"/usr/share/xsessions/openbox-gnome.desktop sed -i 's:startkde:/usr/bin/\0:' \ "$pkgdir"/usr/share/xsessions/openbox-kde.desktop - sed -i 's:=gnome-session:=/usr/bin/gnome-session:' \ - "$pkgdir"/usr/share/xsessions/openbox-gnome.desktop } diff --git a/community/openbox/openbox-3.5.0-gnome-session.patch b/community/openbox/openbox-3.5.0-gnome-session.patch deleted file mode 100644 index e0121d9a8..000000000 --- a/community/openbox/openbox-3.5.0-gnome-session.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -Naur openbox-3.5.2.orig/data/gnome-session/openbox-gnome.session openbox-3.5.2/data/gnome-session/openbox-gnome.session ---- openbox-3.5.2.orig/data/gnome-session/openbox-gnome.session 2013-09-02 16:06:03.076984284 +0000 -+++ openbox-3.5.2/data/gnome-session/openbox-gnome.session 2013-09-02 16:07:32.696385427 +0000 -@@ -1,9 +1,3 @@ - [GNOME Session] - Name=GNOME/Openbox --RequiredComponents=gnome-settings-daemon; --# Try load with the gnome-panel and use the fallback if we can't load a panel --RequiredProviders=windowmanager;panel --DefaultProvider-windowmanager=openbox --DefaultProvider-panel=gnome-panel --FallbackSession=openbox-gnome-fallback --DesktopName=GNOME -+RequiredComponents=gnome-panel;gnome-settings-daemon;gnome-screensaver;openbox;notification-daemon;polkit-gnome-authentication-agent-1;gnome-fallback-background-helper;gnome-fallback-media-keys-helper;gnome-fallback-mount-helper; diff --git a/community/playpen/PKGBUILD b/community/playpen/PKGBUILD index b01dc48b6..450d7b9d8 100644 --- a/community/playpen/PKGBUILD +++ b/community/playpen/PKGBUILD @@ -1,20 +1,19 @@ # Maintainer: Daniel Micay <danielmicay@gmail.com> pkgname=playpen -pkgver=1 -pkgrel=2 +pkgver=2 +pkgrel=1 epoch=1 pkgdesc='A secure application sandbox using namespaces, cgroups and seccomp' arch=(i686 x86_64) url='https://github.com/thestinger/playpen/' license=(MIT) -depends=(libseccomp gcc-libs) -makedepends=(git python clang) -source=(git://github.com/thestinger/playpen#tag=1) +depends=(libseccomp) +makedepends=(git clang) +source=(git://github.com/thestinger/playpen#tag=$pkgver) md5sums=(SKIP) build() { cd $pkgname - git submodule update --init make } diff --git a/community/python-mpi4py/PKGBUILD b/community/python-mpi4py/PKGBUILD deleted file mode 100644 index e4d34d603..000000000 --- a/community/python-mpi4py/PKGBUILD +++ /dev/null @@ -1,48 +0,0 @@ -# $Id: PKGBUILD 96118 2013-08-20 06:32:52Z lcarlier $ -# Maintainer : Stéphane Gaudreault <stephane@archlinux.org> -# Contributor: Sebastien Binet <binet@cern.ch> - -pkgbase=python-mpi4py -pkgname=('python-mpi4py' 'python2-mpi4py') -pkgver=1.3.1 -pkgrel=2 -arch=('i686' 'x86_64') -url="http://mpi4py.scipy.org" -license=('BSD') -makedepends=('python' 'python2' 'python-setuptools' 'python2-setuptools' 'openmpi') -source=(http://mpi4py.googlecode.com/files/mpi4py-${pkgver}.tar.gz) - -build() { - cd "${srcdir}" - cp -a mpi4py-${pkgver}{,-python2} - - # Build python 3 module - cd mpi4py-${pkgver} - python3 setup.py build - - # Build python 2 module - cd ../mpi4py-${pkgver}-python2 - python2 setup.py build -} - -package_python-mpi4py() { - pkgdesc="Python bindings of the Message Passing Interface (MPI)" - depends=('python>=3.3' 'openmpi') - - cd "${srcdir}/mpi4py-${pkgver}" - python3 setup.py install --root "${pkgdir}" --optimize=1 --skip-build - - install -Dm644 LICENSE.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE.txt" -} - -package_python2-mpi4py() { - pkgdesc="Python2 bindings of the Message Passing Interface (MPI)" - depends=('python2>=2.7' 'openmpi') - - cd "${srcdir}/mpi4py-${pkgver}-python2" - python2 setup.py install --root "${pkgdir}" --optimize=1 --skip-build - - install -Dm644 LICENSE.txt "$pkgdir/usr/share/licenses/$pkgname/LICENSE.txt" -} - -sha512sums=('15e81f2a1e6f6af7a54f0e8ec43ddf36cc565b7fe9e3dd35603c9d128199c5acd1584757ffca999c8826c0bbccf371175d40a7a24c85d3369efd77da5b3b603f') diff --git a/community/solfege/PKGBUILD b/community/solfege/PKGBUILD index d917d4ca7..966e485b4 100644 --- a/community/solfege/PKGBUILD +++ b/community/solfege/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 98354 2013-10-08 21:01:12Z schiv $ +# $Id: PKGBUILD 98416 2013-10-09 19:27:11Z schiv $ # Maintainer: Ray Rashif <schiv@archlinux.org> # Contributor: Corrado Primier <bardo@aur.archlinux.org> # Contributor: sickhate <sickhate@tux-linux.net> @@ -6,12 +6,12 @@ # TODO: bring in pyalsa, csound, mma pkgname=solfege pkgver=3.22.2 -pkgrel=1 +pkgrel=2 pkgdesc="Music education and ear training software" arch=('i686' 'x86_64') url="http://www.solfege.org/" license=('GPL3') -depends=('pygtk' 'libgtkhtml' 'librsvg') +depends=('pygtk' 'librsvg') makedepends=('ghostscript' 'gnome-doc-utils' 'libxslt' 'swig' 'texinfo' 'txt2man') optdepends=('timidity++: or any MIDI player & MIDI-WAV converter' diff --git a/community/virtkey/PKGBUILD b/community/virtkey/PKGBUILD deleted file mode 100644 index c1a40fb6c..000000000 --- a/community/virtkey/PKGBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Balló György <ballogyor+arch at gmail dot com> -# Contributor: codl <codl@aquageek.net> -# Contributor: Megamixman <Megamixman@gmail.com> - -pkgbase=virtkey -pkgname=('python2-virtkey' 'python-virtkey') -pkgver=0.63.0 -pkgrel=1 -arch=('i686' 'x86_64') -url="https://launchpad.net/virtkey" -license=('LGPL') -makedepends=('python2' 'python' 'libxtst' 'libxkbfile' 'gtk2') -source=(http://launchpad.net/$pkgbase/${pkgver%.*}/$pkgver/+download/$pkgbase-$pkgver.tar.gz) -md5sums=('c1569fbb143692aafba00758041fad98') - -build() { - cd "$srcdir" - - cp -a {,python2-}$pkgbase-$pkgver - - # Build python 2 module - cd "$srcdir/python2-$pkgbase-$pkgver" - python2 setup.py build - - # Build python 3 module - cd "$srcdir/$pkgbase-$pkgver" - python setup.py build -} - -package_python2-virtkey() { - pkgdesc="Python 2 extension for emulating keypresses and getting layout information from the X server" - depends=('python2' 'libxtst' 'libxkbfile' 'gtk2') - - cd "$srcdir/python2-$pkgbase-$pkgver" - - python2 setup.py install --root=$pkgdir/ --optimize=1 -} - -package_python-virtkey() { - pkgdesc="Python extension for emulating keypresses and getting layout information from the X server" - depends=('python' 'libxtst' 'libxkbfile' 'gtk2') - - cd "$srcdir/$pkgbase-$pkgver" - - python3 setup.py install --root=$pkgdir/ --optimize=1 -} diff --git a/extra/ffmpeg/PKGBUILD b/extra/ffmpeg/PKGBUILD index b4ed466d5..f62f62fdb 100644 --- a/extra/ffmpeg/PKGBUILD +++ b/extra/ffmpeg/PKGBUILD @@ -1,25 +1,25 @@ -# $Id: PKGBUILD 192419 2013-08-11 13:05:15Z bpiotrowski $ +# $Id: PKGBUILD 196252 2013-10-09 20:32:23Z bpiotrowski $ # Maintainer : Ionut Biru <ibiru@archlinux.org> # Contributor: Tom Newsom <Jeepster@gmx.co.uk> # Contributor: Paul Mattal <paul@archlinux.org> pkgname=ffmpeg -pkgver=2.0.1 -pkgrel=1 +pkgver=2.0.2 +pkgrel=2 epoch=1 pkgdesc="Complete and free Internet live audio and video broadcasting solution for Linux/Unix" arch=('i686' 'x86_64') url="http://ffmpeg.org/" license=('GPL') depends=( - 'alsa-lib' 'bzip2' 'fontconfig' 'gsm' 'lame' 'libass' + 'alsa-lib' 'bzip2' 'fontconfig' 'gnutls' 'gsm' 'lame' 'libass' 'libbluray' 'libmodplug' 'libpulse' 'libtheora' 'libva' 'libvorbis' 'libvpx' 'opencore-amr' 'openjpeg' 'opus' 'rtmpdump' 'schroedinger' 'sdl' 'speex' 'v4l-utils' 'x264' 'xvidcore' 'zlib' ) makedepends=('libvdpau' 'yasm') source=(http://ffmpeg.org/releases/$pkgname-$pkgver.tar.bz2) -sha256sums=('611eae7e3485d5fd9ff03e0ac7575ea89bc8105e40e99a40de02324957482f95') +sha256sums=('986f63dc0785f473b1832d0eead502e39c9706fbe7f9677bbea0dad6fe0fab4a') build() { cd $pkgname-$pkgver @@ -31,6 +31,7 @@ build() { --enable-avresample \ --enable-dxva2 \ --enable-fontconfig \ + --enable-gnutls \ --enable-gpl \ --enable-libass \ --enable-libbluray \ diff --git a/extra/gnome-dictionary/PKGBUILD b/extra/gnome-dictionary/PKGBUILD index dba419724..797c9cb9f 100644 --- a/extra/gnome-dictionary/PKGBUILD +++ b/extra/gnome-dictionary/PKGBUILD @@ -1,8 +1,8 @@ -# $Id: PKGBUILD 196059 2013-10-07 11:51:24Z jgc $ +# $Id: PKGBUILD 196236 2013-10-09 09:41:32Z heftig $ # Maintainer: Ionut Biru <ibiru@archlinux.org> pkgname=gnome-dictionary -pkgver=3.9.0 +pkgver=3.10.0 pkgrel=1 pkgdesc="Look up words in dictionary sources" arch=(i686 x86_64) @@ -14,7 +14,7 @@ install=$pkgname.install options=(!libtool) groups=('gnome') source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz) -sha256sums=('4881096d5952ca39e19e4ecfb37f16634d5f5c1e41ee1e74fa8550f59f5bd455') +sha256sums=('258b60fe50f7d0580a7dc3bb83f7fe2f6f0597d4013d97ac083c3f062c350ed7') build() { cd $pkgname-$pkgver diff --git a/extra/samba/PKGBUILD b/extra/samba/PKGBUILD index aecf438a9..f779c4aa2 100644 --- a/extra/samba/PKGBUILD +++ b/extra/samba/PKGBUILD @@ -10,11 +10,11 @@ pkgbase=samba pkgname=('libwbclient' 'smbclient' 'samba') -pkgver=4.0.9 +pkgver=4.0.10 # We use the 'A' to fake out pacman's version comparators. Samba chooses # to append 'a','b',etc to their subsequent releases, which pamcan # misconstrues as alpha, beta, etc. Bad samba! -_realver=4.0.9 +_realver=4.0.10 pkgrel=1 arch=(i686 x86_64) url="http://www.samba.org" @@ -245,7 +245,7 @@ sys.path.insert(0, '/usr/lib/python${_pyver}/site-packages')" \ # copy ldap example install -D -m644 ${srcdir}/samba-${_realver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema } -md5sums=('f5f2ad0e2aabf024e2e3e2f297a0631a' +md5sums=('220740f75035b2221e3b9a848e19d1ea' '5697da77590ec092cc8a883bae06093c' 'ee8507839745cf17d2fb5401be7da6a8' '96f82c38f3f540b53f3e5144900acf17' diff --git a/extra/uim/PKGBUILD b/extra/uim/PKGBUILD index 1d51ed253..c2801c831 100644 --- a/extra/uim/PKGBUILD +++ b/extra/uim/PKGBUILD @@ -1,20 +1,19 @@ -# $Id: PKGBUILD 189234 2013-07-01 01:03:08Z bisson $ +# $Id: PKGBUILD 196248 2013-10-09 16:10:58Z bisson $ # Maintainer: Gaetan Bisson <bisson@archlinux.org> # Contributor: damir <damir@archlinux.org> pkgname=uim pkgver=1.8.6 -pkgrel=1 +pkgrel=2 pkgdesc='Multilingual input method library' url='http://code.google.com/p/uim/' license=('custom:BSD') arch=('i686' 'x86_64') depends=('libxft' 'libedit' 'anthy' 'm17n-lib') -makedepends=('intltool' 'gettext' 'qt4' 'gtk2' 'gtk3' 'gnome-panel') +makedepends=('intltool' 'gettext' 'qt4' 'gtk2' 'gtk3') optdepends=('qt4: immodule and helper applications' 'gtk2: immodule and helper applications' - 'gtk3: immodules and helper applications' - 'gnome-panel: gnome applet indicator') + 'gtk3: immodules and helper applications') options=('!libtool') source=("https://uim.googlecode.com/files/${pkgname}-${pkgver}.tar.gz") sha1sums=('409c30b31b9e58e3c18cb7862933487b0585cd1d') diff --git a/extra/xorg-server/0001-Avoid-use-after-free-in-dix-dixfonts.c-doImageText-C.patch b/extra/xorg-server/0001-Avoid-use-after-free-in-dix-dixfonts.c-doImageText-C.patch new file mode 100644 index 000000000..b550bcedd --- /dev/null +++ b/extra/xorg-server/0001-Avoid-use-after-free-in-dix-dixfonts.c-doImageText-C.patch @@ -0,0 +1,76 @@ +From 7bddc2ba16a2a15773c2ea8947059afa27727764 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Mon, 16 Sep 2013 21:47:16 -0700 +Subject: [PATCH] Avoid use-after-free in dix/dixfonts.c: doImageText() + [CVE-2013-4396] + +Save a pointer to the passed in closure structure before copying it +and overwriting the *c pointer to point to our copy instead of the +original. If we hit an error, once we free(c), reset c to point to +the original structure before jumping to the cleanup code that +references *c. + +Since one of the errors being checked for is whether the server was +able to malloc(c->nChars * itemSize), the client can potentially pass +a number of characters chosen to cause the malloc to fail and the +error path to be taken, resulting in the read from freed memory. + +Since the memory is accessed almost immediately afterwards, and the +X server is mostly single threaded, the odds of the free memory having +invalid contents are low with most malloc implementations when not using +memory debugging features, but some allocators will definitely overwrite +the memory there, leading to a likely crash. + +Reported-by: Pedro Ribeiro <pedrib@gmail.com> +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +Reviewed-by: Julien Cristau <jcristau@debian.org> +--- + dix/dixfonts.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/dix/dixfonts.c b/dix/dixfonts.c +index feb765d..2e34d37 100644 +--- a/dix/dixfonts.c ++++ b/dix/dixfonts.c +@@ -1425,6 +1425,7 @@ doImageText(ClientPtr client, ITclosurePtr c) + GC *pGC; + unsigned char *data; + ITclosurePtr new_closure; ++ ITclosurePtr old_closure; + + /* We're putting the client to sleep. We need to + save some state. Similar problem to that handled +@@ -1436,12 +1437,14 @@ doImageText(ClientPtr client, ITclosurePtr c) + err = BadAlloc; + goto bail; + } ++ old_closure = c; + *new_closure = *c; + c = new_closure; + + data = malloc(c->nChars * itemSize); + if (!data) { + free(c); ++ c = old_closure; + err = BadAlloc; + goto bail; + } +@@ -1452,6 +1455,7 @@ doImageText(ClientPtr client, ITclosurePtr c) + if (!pGC) { + free(c->data); + free(c); ++ c = old_closure; + err = BadAlloc; + goto bail; + } +@@ -1464,6 +1468,7 @@ doImageText(ClientPtr client, ITclosurePtr c) + FreeScratchGC(pGC); + free(c->data); + free(c); ++ c = old_closure; + err = BadAlloc; + goto bail; + } +-- +1.7.9.2 + diff --git a/extra/xorg-server/PKGBUILD b/extra/xorg-server/PKGBUILD index e6e01ef2a..064578096 100644 --- a/extra/xorg-server/PKGBUILD +++ b/extra/xorg-server/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 194374 2013-09-15 07:40:13Z andyrtr $ +# $Id: PKGBUILD 196227 2013-10-08 22:59:23Z lcarlier $ # Maintainer: AndyRTR <andyrtr@archlinux.org> # Maintainer: Jan de Groot <jgc@archlinux.org> pkgbase=xorg-server pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-common' 'xorg-server-devel') pkgver=1.14.3 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') license=('custom') url="http://xorg.freedesktop.org" @@ -23,7 +23,8 @@ source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2 xvfb-run xvfb-run.1 10-quirks.conf - fb-rename-wfbDestroyGlyphCache.patch) + fb-rename-wfbDestroyGlyphCache.patch + 0001-Avoid-use-after-free-in-dix-dixfonts.c-doImageText-C.patch) sha256sums=('02125ae13a443dcbb55f964d5c37f1da2f58ad54c2102356037bec23c1b84f5e' '66e25f76a7496c429e0aff4b0670f168719bb0ceaeb88c6f2272f2bf3ed21162' 'd027776fac1f7675b0a9ee817502290b1c45f9c09b0f0a6bb058c35f92361e84' @@ -54,7 +55,12 @@ prepare() { # http://cgit.freedesktop.org/xorg/xserver/commit/fb/wfbrename.h?id=5047810a4c20fab444b8c6eb146c55dcdb0d4219 patch -Np1 -i ../fb-rename-wfbDestroyGlyphCache.patch + + # CVE-2013-4396: Use after free in Xserver handling of ImageText requests + # (to be included in xorg-server 1.15.0 and 1.14.4) + patch -Np1 -i ../0001-Avoid-use-after-free-in-dix-dixfonts.c-doImageText-C.patch } + build() { cd "${pkgbase}-${pkgver}" autoreconf -fi @@ -218,3 +224,14 @@ package_xorg-server-devel() { install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-devel" ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-devel/COPYING" } +sha256sums=('02125ae13a443dcbb55f964d5c37f1da2f58ad54c2102356037bec23c1b84f5e' + '66e25f76a7496c429e0aff4b0670f168719bb0ceaeb88c6f2272f2bf3ed21162' + 'd027776fac1f7675b0a9ee817502290b1c45f9c09b0f0a6bb058c35f92361e84' + 'e033f9bcc21980f7f0428e6ed6c362a3d55ad293b05fd6e6c6c1933b86f9e63a' + '26ee6ff255a60d7c1e136c612925eb63c86e85a4a3a55d531852ad9275526588' + 'bb63658d250c21bbfaf94c5417f2920ce5963ee1f7db6cac2b163a54f2e9b619' + 'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9' + '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776' + '94612f5c0d34a3b7152915c2e285c7b462e9d8e38d3539bd551a339498eac166' + 'd0832cc16b5e6c1dee2959055a4b327f5c87e2a67b5f427d654663057207b2c1' + '2b90ce92a900b6d4edda9ef33acdd3d2c2708fec2344175c2d8dfd4265f56d32') diff --git a/nonprism/evolution-data-server-nonprism/PKGBUILD b/nonprism/evolution-data-server-nonprism/PKGBUILD index 5d4cc25ea..df988e12b 100644 --- a/nonprism/evolution-data-server-nonprism/PKGBUILD +++ b/nonprism/evolution-data-server-nonprism/PKGBUILD @@ -5,7 +5,7 @@ pkgver=3.10.0 pkgrel=1 pkgdesc="Centralized access to appointments and contacts, without libgdata support" arch=(i686 x86_64) -depends=(gnome-online-accounts nss krb5 libgweather libical db) +depends=(gnome-online-accounts nss krb5 libgweather libical db gcr) makedepends=(intltool gperf gobject-introspection vala python2) options=('!libtool') install=$_pkgname.install diff --git a/nonprism/gnome-online-accounts-nonprism/PKGBUILD b/nonprism/gnome-online-accounts-nonprism/PKGBUILD index d7f0c88fc..39bb599d2 100644 --- a/nonprism/gnome-online-accounts-nonprism/PKGBUILD +++ b/nonprism/gnome-online-accounts-nonprism/PKGBUILD @@ -22,15 +22,18 @@ sha256sums=('bba85366632cf5ce777b6889eab505d98d7593c37f7859a312dc57dde05a0feb') build() { cd $_pkgname-$pkgver - ./configure --prefix=/usr --libexecdir=/usr/lib/$_pkgname + ./configure --prefix=/usr --libexecdir=/usr/lib/$_pkgname \ + --disable-exchange \ --disable-google \ - --enable-owncloud \ --disable-facebook \ - --disable-windows-live \ - --disable-exchange \ --disable-flickr \ --enable-imap-smtp \ - --disable-kerberos + --disable-kerberos \ + --enable-owncloud \ + --enable-telepathy \ + --disable-twitter \ + --disable-windows-live \ + --disable-yahoo make } diff --git a/nonprism/pidgin-nonprism/PKGBUILD b/nonprism/pidgin-nonprism/PKGBUILD index ccf2a9af6..50bf3d05d 100644 --- a/nonprism/pidgin-nonprism/PKGBUILD +++ b/nonprism/pidgin-nonprism/PKGBUILD @@ -20,19 +20,12 @@ source=(http://downloads.sourceforge.net/$_pkgname/$_pkgname-$pkgver.tar.bz2 pidgin-2.10.7-link-libirc-to-libsasl2.patch nonprism.patch) sha256sums=('eba32994eca20d1cf24a4261b059b2de71a1ec2dd0926e904074b0db49f7f192' '063723d5dc5726c43137b4b383c9d07c2c008391f6a626faaf6cedd31a2f1e8f' - '54c185493f7139768e316b989a5d23aa9d46662bf69026a92efbf69ad7d00973') + 'f7acfb852cdecfed16e8b116546b643cad1c44d28b56f28ff5485f92af68e9e2') prepare() { cd "$srcdir/$_pkgname-$pkgver" - msg 'remove nonfree services' - patch -Np1 -i $srcdir/nonprism.patch - #rm -vrf libpurple/protocols/{gg,jabber/google,msn,mxit,myspace,novell,oscar,yahoo} - #rm -v pidgin/pixmaps/protocols/16/{aim,facebook,gadu-gadu,google-talk,icq,msn,mxit,myspace,novell,yahoo}.png - #rm -v pidgin/pixmaps/protocols/16/scalable/{aim,gadu-gadu,icq,msn,novell,yahoo}.svg - #rm -v pidgin/pixmaps/protocols/22/{aim,facebook,gadu-gadu,google-talk,icq,msn,mxit,myspace,novell,yahoo}.png - #rm -v pidgin/pixmaps/protocols/22/scalable/{aim,gadu-gadu,icq,msn,novell,yahoo}.svg - #rm -v pidgin/pixmaps/protocols/48/{aim,facebook,gadu-gadu,icq,msn,mxit,myspace,novell,yahoo}.png - #rm -v pidgin/pixmaps/protocols/scalable/{aim,gadu-gadu,google-talk,icq,msn,mxit,novell,yahoo}.svg + msg 'remove Google Talk and Facebook protocols' + patch -Np1 -i "$srcdir/nonprism.patch" msg 'remove wrong OS term' sed -i 's|on Linux|on GNU/Linux|' libpurple/valgrind.h sed -i 's|On Linux|On GNU/Linux|' libpurple/connection.h @@ -59,12 +52,13 @@ build() { --disable-doxygen \ --enable-nm \ --with-python=/usr/bin/python2 \ - --with-system-ssl-certs=/etc/ssl/certs + --with-system-ssl-certs=/etc/ssl/certs \ + --with-dynamic-prpls=bonjour,irc,jabber,silc,simple,zephyr make } package_pidgin-nonprism(){ - pkgdesc="Multi-protocol instant messaging client" + pkgdesc="Multi-protocol instant messaging client, without support for unsafe and dangerous for privacy protocols" depends=('libpurple' 'startup-notification' 'gtkspell' 'libxss' 'libsm' 'hicolor-icon-theme') optdepends=('aspell: for spelling correction') @@ -87,10 +81,22 @@ package_pidgin-nonprism(){ install -Dm644 pidgin.desktop "$pkgdir"/usr/share/applications/pidgin.desktop rm "$pkgdir/usr/share/man/man1/finch.1" + + msg "Removing PRISM images" + rm -v "$pkgdir"/usr/share/pixmaps/pidgin/emblems/{16/aol-client.png,scalable/aol-client.svg} + rm -v "$pkgdir"/usr/share/pixmaps/pidgin/emotes/default/msn{,-away,-busy,_online}.png + rm -v "$pkgdir"/usr/share/pixmaps/pidgin/protocols/{16,22}/google-talk.png + rm -v "$pkgdir"/usr/share/pixmaps/pidgin/protocols/{16,22,48}/{aim,facebook,gadu-gadu,icq,meanwhile,msn,mxit,myspace,novell,yahoo}.png + rm -v "$pkgdir"/usr/share/pixmaps/pidgin/protocols/scalable/{aim,gadu-gadu,google-talk,icq,meanwhile,msn,mxit,novell,yahoo}.svg + + msg "patch pidgin desktop" + sed -i "\|Comment\[|d + s|Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more|Supports Jabber/XMPP and more| + " "$pkgdir"/usr/share/applications/pidgin.desktop } package_libpurple-nonprism(){ - pkgdesc="IM library extracted from Pidgin" + pkgdesc="IM library extracted from Pidgin, without support for unsafe and dangerous for privacy protocols" depends=('farstream-0.1' 'libsasl' 'libidn' 'dbus-glib' 'nss') optdepends=('avahi: Bonjour protocol support' 'ca-certificates: SSL CA certificates' @@ -108,7 +114,7 @@ package_libpurple-nonprism(){ } package_finch-nonprism(){ - pkgdesc="A ncurses-based messaging client" + pkgdesc="A ncurses-based messaging client, without support for unsafe and dangerous for privacy protocols" depends=("libpurple=$pkgver-$pkgrel" 'libx11' 'python2') provides=("${pkgname%-nonprism}=$pkgver") conflicts=${pkgname%-nonprism} diff --git a/nonprism/pidgin-nonprism/nonprism-b.patch b/nonprism/pidgin-nonprism/nonprism-b.patch deleted file mode 100644 index 8e64b73d5..000000000 --- a/nonprism/pidgin-nonprism/nonprism-b.patch +++ /dev/null @@ -1,5623 +0,0 @@ -diff -Nur pidgin-2.10.7/config.h.in pidgin-2.10.7-nonprism/config.h.in ---- pidgin-2.10.7/config.h.in 2013-02-11 07:17:16.000000000 -0200 -+++ pidgin-2.10.7-nonprism/config.h.in 2013-08-16 22:16:16.833531712 -0300 -@@ -151,9 +151,6 @@ - /* Define to 1 if you have the `db' library (-ldb). */ - #undef HAVE_LIBDB - --/* Define to 1 if you have libgadu. */ --#undef HAVE_LIBGADU -- - /* Define to 1 if you have the `nsl' library (-lnsl). */ - #undef HAVE_LIBNSL - -diff -Nur pidgin-2.10.7/configure pidgin-2.10.7-nonprism/configure ---- pidgin-2.10.7/configure 2013-02-11 07:17:26.000000000 -0200 -+++ pidgin-2.10.7-nonprism/configure 2013-08-27 16:47:16.890662082 -0300 -@@ -716,45 +716,23 @@ - STATIC_LINK_LIBS - STATIC_ZEPHYR_FALSE - STATIC_ZEPHYR_TRUE --STATIC_YAHOO_FALSE --STATIC_YAHOO_TRUE - STATIC_SIMPLE_FALSE - STATIC_SIMPLE_TRUE - STATIC_SILC_FALSE - STATIC_SILC_TRUE --STATIC_SAMETIME_FALSE --STATIC_SAMETIME_TRUE --STATIC_OSCAR_FALSE --STATIC_OSCAR_TRUE --STATIC_NOVELL_FALSE --STATIC_NOVELL_TRUE --STATIC_MXIT_FALSE --STATIC_MXIT_TRUE --STATIC_MYSPACE_FALSE --STATIC_MYSPACE_TRUE --STATIC_MSN_FALSE --STATIC_MSN_TRUE - STATIC_JABBER_FALSE - STATIC_JABBER_TRUE - STATIC_IRC_FALSE - STATIC_IRC_TRUE --STATIC_GG_FALSE --STATIC_GG_TRUE - STATIC_BONJOUR_FALSE - STATIC_BONJOUR_TRUE - STATIC_PRPLS - DISTRIB_FALSE - DISTRIB_TRUE --USE_INTERNAL_LIBGADU_FALSE --USE_INTERNAL_LIBGADU_TRUE --GADU_LIBS --GADU_CFLAGS - SILC_LIBS - SILC_CFLAGS - AVAHI_LIBS - AVAHI_CFLAGS --MEANWHILE_LIBS --MEANWHILE_CFLAGS - IDN_LIBS - IDN_CFLAGS - USE_VV_FALSE -@@ -1021,14 +999,11 @@ - enable_farstream - enable_vv - enable_idn --enable_meanwhile - enable_avahi - with_avahi_client_includes - with_avahi_client_libs - with_silc_includes - with_silc_libs --with_gadu_includes --with_gadu_libs - enable_distrib - with_static_prpls - with_dynamic_prpls -@@ -1100,14 +1075,10 @@ - FARSTREAM_LIBS - IDN_CFLAGS - IDN_LIBS --MEANWHILE_CFLAGS --MEANWHILE_LIBS - AVAHI_CFLAGS - AVAHI_LIBS - SILC_CFLAGS - SILC_LIBS --GADU_CFLAGS --GADU_LIBS - DBUS_CFLAGS - DBUS_LIBS - NETWORKMANAGER_CFLAGS -@@ -1773,8 +1744,6 @@ - --disable-farstream compile without farstream support - --disable-vv compile without voice and video support - --disable-idn compile without IDN support -- --disable-meanwhile compile without meanwhile (required for Sametime -- support) - --disable-avahi compile without avahi (required for Bonjour support) - - --disable-plugins compile without plugin support -@@ -1826,9 +1795,6 @@ - --with-silc-includes=DIR - compile the SILC plugin against includes in DIR - --with-silc-libs=DIR compile the SILC plugin against the SILC libs in DIR -- --with-gadu-includes=DIR -- compile the Gadu-Gadu plugin against includes in DIR -- --with-gadu-libs=DIR compile the Gadu-Gadu plugin against the libs in DIR - --with-static-prpls Link to certain protocols statically - --with-dynamic-prpls specify which protocols to build dynamically - --with-krb4=PREFIX compile Zephyr plugin with Kerberos 4 support -@@ -1905,17 +1871,11 @@ - linker flags for FARSTREAM, overriding pkg-config - IDN_CFLAGS C compiler flags for IDN, overriding pkg-config - IDN_LIBS linker flags for IDN, overriding pkg-config -- MEANWHILE_CFLAGS -- C compiler flags for MEANWHILE, overriding pkg-config -- MEANWHILE_LIBS -- linker flags for MEANWHILE, overriding pkg-config - AVAHI_CFLAGS - C compiler flags for AVAHI, overriding pkg-config - AVAHI_LIBS linker flags for AVAHI, overriding pkg-config - SILC_CFLAGS C compiler flags for SILC, overriding pkg-config - SILC_LIBS linker flags for SILC, overriding pkg-config -- GADU_CFLAGS C compiler flags for GADU, overriding pkg-config -- GADU_LIBS linker flags for GADU, overriding pkg-config - DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config - DBUS_LIBS linker flags for DBUS, overriding pkg-config - NETWORKMANAGER_CFLAGS -@@ -18487,105 +18447,6 @@ - fi - fi - --# Check whether --enable-meanwhile was given. --if test "${enable_meanwhile+set}" = set; then : -- enableval=$enable_meanwhile; enable_meanwhile="$enableval" --else -- enable_meanwhile="yes" --fi -- --if test "x$enable_meanwhile" = "xyes"; then -- --pkg_failed=no --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MEANWHILE" >&5 --$as_echo_n "checking for MEANWHILE... " >&6; } -- --if test -n "$MEANWHILE_CFLAGS"; then -- pkg_cv_MEANWHILE_CFLAGS="$MEANWHILE_CFLAGS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"meanwhile >= 1.0.0 meanwhile < 2.0.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "meanwhile >= 1.0.0 meanwhile < 2.0.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_MEANWHILE_CFLAGS=`$PKG_CONFIG --cflags "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi --if test -n "$MEANWHILE_LIBS"; then -- pkg_cv_MEANWHILE_LIBS="$MEANWHILE_LIBS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"meanwhile >= 1.0.0 meanwhile < 2.0.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "meanwhile >= 1.0.0 meanwhile < 2.0.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_MEANWHILE_LIBS=`$PKG_CONFIG --libs "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi -- -- -- --if test $pkg_failed = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- --if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then -- _pkg_short_errors_supported=yes --else -- _pkg_short_errors_supported=no --fi -- if test $_pkg_short_errors_supported = yes; then -- MEANWHILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>&1` -- else -- MEANWHILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>&1` -- fi -- # Put the nasty error message in config.log where it belongs -- echo "$MEANWHILE_PKG_ERRORS" >&5 -- -- -- have_meanwhile="no" -- if test "x$force_deps" = "xyes" ; then -- as_fn_error $? " --Meanwhile development headers not found. --Use --disable-meanwhile if you do not need meanwhile (Sametime) support. --" "$LINENO" 5 -- fi --elif test $pkg_failed = untried; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- -- have_meanwhile="no" -- if test "x$force_deps" = "xyes" ; then -- as_fn_error $? " --Meanwhile development headers not found. --Use --disable-meanwhile if you do not need meanwhile (Sametime) support. --" "$LINENO" 5 -- fi --else -- MEANWHILE_CFLAGS=$pkg_cv_MEANWHILE_CFLAGS -- MEANWHILE_LIBS=$pkg_cv_MEANWHILE_LIBS -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- -- have_meanwhile="yes" -- --fi --fi -- -- -- - # Check whether --enable-avahi was given. - if test "${enable_avahi+set}" = set; then : - enableval=$enable_avahi; enable_avahi="$enableval" -@@ -19207,267 +19068,6 @@ - fi - - --# Check whether --with-gadu-includes was given. --if test "${with_gadu_includes+set}" = set; then : -- withval=$with_gadu_includes; ac_gadu_includes="$withval" --else -- ac_gadu_includes="no" --fi -- -- --# Check whether --with-gadu-libs was given. --if test "${with_gadu_libs+set}" = set; then : -- withval=$with_gadu_libs; ac_gadu_libs="$withval" --else -- ac_gadu_libs="no" --fi -- --GADU_CFLAGS="" --GADU_LIBS="" --if test -n "$with_gadu_includes" || test -n "$with_gadu_libs"; then -- gadu_manual_check="yes" --else -- gadu_manual_check="no" --fi --if test "x$gadu_manual_check" = "xno"; then -- --pkg_failed=no --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GADU" >&5 --$as_echo_n "checking for GADU... " >&6; } -- --if test -n "$GADU_CFLAGS"; then -- pkg_cv_GADU_CFLAGS="$GADU_CFLAGS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgadu >= 1.11.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "libgadu >= 1.11.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_GADU_CFLAGS=`$PKG_CONFIG --cflags "libgadu >= 1.11.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi --if test -n "$GADU_LIBS"; then -- pkg_cv_GADU_LIBS="$GADU_LIBS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgadu >= 1.11.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "libgadu >= 1.11.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_GADU_LIBS=`$PKG_CONFIG --libs "libgadu >= 1.11.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi -- -- -- --if test $pkg_failed = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- --if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then -- _pkg_short_errors_supported=yes --else -- _pkg_short_errors_supported=no --fi -- if test $_pkg_short_errors_supported = yes; then -- GADU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libgadu >= 1.11.0" 2>&1` -- else -- GADU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libgadu >= 1.11.0" 2>&1` -- fi -- # Put the nasty error message in config.log where it belongs -- echo "$GADU_PKG_ERRORS" >&5 -- -- -- gadu_includes="no" -- --elif test $pkg_failed = untried; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- -- gadu_includes="no" -- --else -- GADU_CFLAGS=$pkg_cv_GADU_CFLAGS -- GADU_LIBS=$pkg_cv_GADU_LIBS -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- -- gadu_includes="yes" -- gadu_libs="yes" -- --fi --else -- if test "$ac_gadu_includes" != "no"; then -- GADU_CFLAGS="-I$ac_gadu_includes" -- fi -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- ac_fn_c_check_header_mongrel "$LINENO" "libgadu.h" "ac_cv_header_libgadu_h" "$ac_includes_default" --if test "x$ac_cv_header_libgadu_h" = xyes; then : -- gadu_includes=yes --fi -- -- -- CPPFLAGS="$CPPFLAGS_save" -- -- if test "$ac_gadu_libs" != "no"; then -- GADU_LIBS="-L$ac_gadu_libs" -- fi -- GADU_LIBS="$GADU_LIBS -lgadu" -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gg_libgadu_version in -lgadu" >&5 --$as_echo_n "checking for gg_libgadu_version in -lgadu... " >&6; } --if ${ac_cv_lib_gadu_gg_libgadu_version+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lgadu $GADU_LIBS $LIBS" --cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --/* Override any GCC internal prototype to avoid an error. -- Use char because int might match the return type of a GCC -- builtin and then its argument prototype would still apply. */ --#ifdef __cplusplus --extern "C" --#endif --char gg_libgadu_version (); --int --main () --{ --return gg_libgadu_version (); -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ac_cv_lib_gadu_gg_libgadu_version=yes --else -- ac_cv_lib_gadu_gg_libgadu_version=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gadu_gg_libgadu_version" >&5 --$as_echo "$ac_cv_lib_gadu_gg_libgadu_version" >&6; } --if test "x$ac_cv_lib_gadu_gg_libgadu_version" = xyes; then : -- gadu_libs=yes --fi -- --fi --GADU_CFLAGS=`echo $GADU_CFLAGS |$sedpath 's/-Wall//'` -- --if test "x$gadu_libs" = "xyes"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libgadu GPL compatibility" >&5 --$as_echo_n "checking for libgadu GPL compatibility... " >&6; } -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --#include <libgadu.h> --int --main () --{ -- --#if defined(__GG_LIBGADU_HAVE_OPENSSL) || defined(GG_CONFIG_HAVE_OPENSSL) --#error "libgadu is not compatible with the GPL when compiled with OpenSSL support." --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --#include <libgadu.h> --int --main () --{ -- --#if GG_DEFAULT_PROTOCOL_VERSION < 0x2e --#error "Your libgadu version is too old. libpurple requires 1.11.0 or higher." --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- --$as_echo "#define HAVE_LIBGADU 1" >>confdefs.h -- -- --else -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- echo -- echo -- echo "Your supplied copy of libgadu is too old." -- echo "Install version 1.11.0 or newer." -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -- --else -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- echo -- echo -- echo "libgadu is not compatible with the GPL when compiled with OpenSSL support." -- echo "To compile against system libgadu, please recompile libgadu using:" -- echo "./autogen.sh --disable-libgadu-openssl --disable-static --enable-shared" -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -- CPPFLAGS="$CPPFLAGS_save" --fi -- -- if test "x$gadu_libs" != "xyes"; then -- USE_INTERNAL_LIBGADU_TRUE= -- USE_INTERNAL_LIBGADU_FALSE='#' --else -- USE_INTERNAL_LIBGADU_TRUE='#' -- USE_INTERNAL_LIBGADU_FALSE= --fi -- -- --if test "x$gadu_libs" = "x"; then -- gadu_libs=no --fi -- - - - -@@ -19500,10 +19100,7 @@ - fi - - if test "x$STATIC_PRPLS" = "xall" ; then -- STATIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes" ; then -- STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'` -+ STATIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/bonjour//'` -@@ -19519,46 +19116,22 @@ - extern_init= - load_proto= - for i in $STATIC_PRPLS ; do -- if test \( "x$i" = "xoscar" -o "x$i" = "xaim" -o "x$i" = "xicq" \) -a "x$static_oscar" != "xyes"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/oscar/liboscar.la" -- extern_init="$extern_init extern gboolean purple_init_aim_plugin();" -- extern_init="$extern_init extern gboolean purple_init_icq_plugin();" -- load_proto="$load_proto purple_init_aim_plugin();" -- load_proto="$load_proto purple_init_icq_plugin();" -- elif test "x$i" = "xyahoo"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/yahoo/libymsg.la" -- extern_init="$extern_init extern gboolean purple_init_yahoo_plugin();" -- extern_init="$extern_init extern gboolean purple_init_yahoojp_plugin();" -- load_proto="$load_proto purple_init_yahoo_plugin();" -- load_proto="$load_proto purple_init_yahoojp_plugin();" -+ if test "x$i" = "xsilc"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -+ elif test "x$i" = "xsilc10"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" - else -- if test "x$i" = "xsilc"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -- elif test "x$i" = "xsilc10"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" -- else -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" -- fi -- extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -- load_proto="$load_proto purple_init_${i}_plugin();" -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" - fi -+ extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -+ load_proto="$load_proto purple_init_${i}_plugin();" - case $i in - bonjour) static_bonjour=yes ;; -- gg) static_gg=yes ;; - irc) static_irc=yes ;; - jabber) static_jabber=yes ;; -- msn) static_msn=yes ;; -- myspace) static_myspace=yes ;; -- mxit) static_mxit=yes ;; -- novell) static_novell=yes ;; -- oscar) static_oscar=yes ;; -- aim) static_oscar=yes ;; -- icq) static_oscar=yes ;; -- sametime) static_sametime=yes ;; - silc) static_silc=yes ;; - silc10) static_silc=yes ;; - simple) static_simple=yes ;; -- yahoo) static_yahoo=yes ;; - zephyr) static_zephyr=yes ;; - *) echo "Invalid static protocol $i!!" ; exit 1 ;; - esac -@@ -19571,14 +19144,6 @@ - STATIC_BONJOUR_FALSE= - fi - -- if test "x$static_gg" = "xyes"; then -- STATIC_GG_TRUE= -- STATIC_GG_FALSE='#' --else -- STATIC_GG_TRUE='#' -- STATIC_GG_FALSE= --fi -- - if test "x$static_irc" = "xyes"; then - STATIC_IRC_TRUE= - STATIC_IRC_FALSE='#' -@@ -19595,54 +19160,6 @@ - STATIC_JABBER_FALSE= - fi - -- if test "x$static_msn" = "xyes"; then -- STATIC_MSN_TRUE= -- STATIC_MSN_FALSE='#' --else -- STATIC_MSN_TRUE='#' -- STATIC_MSN_FALSE= --fi -- -- if test "x$static_myspace" = "xyes"; then -- STATIC_MYSPACE_TRUE= -- STATIC_MYSPACE_FALSE='#' --else -- STATIC_MYSPACE_TRUE='#' -- STATIC_MYSPACE_FALSE= --fi -- -- if test "x$static_mxit" = "xyes"; then -- STATIC_MXIT_TRUE= -- STATIC_MXIT_FALSE='#' --else -- STATIC_MXIT_TRUE='#' -- STATIC_MXIT_FALSE= --fi -- -- if test "x$static_novell" = "xyes"; then -- STATIC_NOVELL_TRUE= -- STATIC_NOVELL_FALSE='#' --else -- STATIC_NOVELL_TRUE='#' -- STATIC_NOVELL_FALSE= --fi -- -- if test "x$static_oscar" = "xyes"; then -- STATIC_OSCAR_TRUE= -- STATIC_OSCAR_FALSE='#' --else -- STATIC_OSCAR_TRUE='#' -- STATIC_OSCAR_FALSE= --fi -- -- if test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes"; then -- STATIC_SAMETIME_TRUE= -- STATIC_SAMETIME_FALSE='#' --else -- STATIC_SAMETIME_TRUE='#' -- STATIC_SAMETIME_FALSE= --fi -- - if test "x$static_silc" = "xyes" -a "x$have_silc" = "xyes"; then - STATIC_SILC_TRUE= - STATIC_SILC_FALSE='#' -@@ -19659,14 +19176,6 @@ - STATIC_SIMPLE_FALSE= - fi - -- if test "x$static_yahoo" = "xyes"; then -- STATIC_YAHOO_TRUE= -- STATIC_YAHOO_FALSE='#' --else -- STATIC_YAHOO_TRUE='#' -- STATIC_YAHOO_FALSE= --fi -- - if test "x$static_zephyr" = "xyes"; then - STATIC_ZEPHYR_TRUE= - STATIC_ZEPHYR_FALSE='#' -@@ -19689,10 +19198,7 @@ - fi - - if test "x$DYNAMIC_PRPLS" = "xall" ; then -- DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes"; then -- DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'` -+ DYNAMIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/bonjour//'` -@@ -19707,22 +19213,12 @@ - for i in $DYNAMIC_PRPLS ; do - case $i in - bonjour) dynamic_bonjour=yes ;; -- gg) dynamic_gg=yes ;; - irc) dynamic_irc=yes ;; - jabber) dynamic_jabber=yes ;; -- msn) dynamic_msn=yes ;; -- myspace) dynamic_myspace=yes ;; -- mxit) dynamic_mxit=yes ;; -- novell) dynamic_novell=yes ;; - null) dynamic_null=yes ;; -- oscar) dynamic_oscar=yes ;; -- aim) dynamic_oscar=yes ;; -- icq) dynamic_oscar=yes ;; -- sametime) dynamic_sametime=yes ;; - silc) dynamic_silc=yes ;; - silc10) dynamic_silc=yes ;; - simple) dynamic_simple=yes ;; -- yahoo) dynamic_yahoo=yes ;; - zephyr) dynamic_zephyr=yes ;; - *) echo "Invalid dynamic protocol $i!!" ; exit 1 ;; - esac -@@ -21001,7 +20497,7 @@ - fi - - --msg_ssl="None. MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!" -+msg_ssl="None." - looked_for_gnutls="no" - if test "x$enable_gnutls" != "xno"; then - enable_gnutls="no" -@@ -21871,19 +21367,17 @@ - as_fn_error $? " - Neither GnuTLS or NSS SSL development headers found. - Use --disable-nss --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable! -+ - " "$LINENO" 5 - elif test "x$looked_for_gnutls" = "xyes" -a "x$force_deps" = "xyes" ; then - as_fn_error $? " - GnuTLS SSL development headers not found. - Use --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - " "$LINENO" 5 - elif test "x$looked_for_nss" = "xyes" -a "x$force_deps" = "xyes" ; then - as_fn_error $? " - NSS SSL development headers not found. - Use --disable-nss if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - " "$LINENO" 5 - fi - -@@ -23176,7 +22670,7 @@ - fi - - --ac_config_files="$ac_config_files Makefile Doxyfile doc/Makefile doc/pidgin.1 doc/finch.1 m4macros/Makefile pidgin.apspec pidgin/Makefile pidgin/pidgin.pc pidgin/pidgin-uninstalled.pc pidgin/pidgin-2.pc pidgin/pidgin-2-uninstalled.pc pidgin/pixmaps/Makefile pidgin/pixmaps/emotes/default/24/Makefile pidgin/pixmaps/emotes/none/Makefile pidgin/pixmaps/emotes/small/16/Makefile pidgin/plugins/Makefile pidgin/plugins/cap/Makefile pidgin/plugins/disco/Makefile pidgin/plugins/gestures/Makefile pidgin/plugins/gevolution/Makefile pidgin/plugins/musicmessaging/Makefile pidgin/plugins/perl/Makefile pidgin/plugins/perl/common/Makefile.PL pidgin/plugins/ticker/Makefile libpurple/ciphers/Makefile libpurple/example/Makefile libpurple/gconf/Makefile libpurple/purple.pc libpurple/purple-uninstalled.pc libpurple/purple-2.pc libpurple/purple-2-uninstalled.pc libpurple/plugins/Makefile libpurple/plugins/mono/Makefile libpurple/plugins/mono/api/Makefile libpurple/plugins/mono/loader/Makefile libpurple/plugins/perl/Makefile libpurple/plugins/perl/common/Makefile.PL libpurple/plugins/ssl/Makefile libpurple/plugins/tcl/Makefile libpurple/Makefile libpurple/protocols/Makefile libpurple/protocols/bonjour/Makefile libpurple/protocols/gg/Makefile libpurple/protocols/irc/Makefile libpurple/protocols/jabber/Makefile libpurple/protocols/msn/Makefile libpurple/protocols/myspace/Makefile libpurple/protocols/mxit/Makefile libpurple/protocols/novell/Makefile libpurple/protocols/null/Makefile libpurple/protocols/oscar/Makefile libpurple/protocols/sametime/Makefile libpurple/protocols/silc/Makefile libpurple/protocols/silc10/Makefile libpurple/protocols/simple/Makefile libpurple/protocols/yahoo/Makefile libpurple/protocols/zephyr/Makefile libpurple/tests/Makefile libpurple/purple.h libpurple/version.h share/sounds/Makefile share/ca-certs/Makefile finch/finch.pc finch/Makefile finch/libgnt/Makefile finch/libgnt/gnt.pc finch/libgnt/wms/Makefile finch/plugins/Makefile po/Makefile.in pidgin.spec" -+ac_config_files="$ac_config_files Makefile Doxyfile doc/Makefile doc/pidgin.1 doc/finch.1 m4macros/Makefile pidgin.apspec pidgin/Makefile pidgin/pidgin.pc pidgin/pidgin-uninstalled.pc pidgin/pidgin-2.pc pidgin/pidgin-2-uninstalled.pc pidgin/pixmaps/Makefile pidgin/pixmaps/emotes/default/24/Makefile pidgin/pixmaps/emotes/none/Makefile pidgin/pixmaps/emotes/small/16/Makefile pidgin/plugins/Makefile pidgin/plugins/cap/Makefile pidgin/plugins/disco/Makefile pidgin/plugins/gestures/Makefile pidgin/plugins/gevolution/Makefile pidgin/plugins/musicmessaging/Makefile pidgin/plugins/perl/Makefile pidgin/plugins/perl/common/Makefile.PL pidgin/plugins/ticker/Makefile libpurple/ciphers/Makefile libpurple/example/Makefile libpurple/gconf/Makefile libpurple/purple.pc libpurple/purple-uninstalled.pc libpurple/purple-2.pc libpurple/purple-2-uninstalled.pc libpurple/plugins/Makefile libpurple/plugins/mono/Makefile libpurple/plugins/mono/api/Makefile libpurple/plugins/mono/loader/Makefile libpurple/plugins/perl/Makefile libpurple/plugins/perl/common/Makefile.PL libpurple/plugins/ssl/Makefile libpurple/plugins/tcl/Makefile libpurple/Makefile libpurple/protocols/Makefile libpurple/protocols/bonjour/Makefile libpurple/protocols/irc/Makefile libpurple/protocols/jabber/Makefile libpurple/protocols/null/Makefile libpurple/protocols/silc/Makefile libpurple/protocols/silc10/Makefile libpurple/protocols/simple/Makefile libpurple/protocols/zephyr/Makefile libpurple/tests/Makefile libpurple/purple.h libpurple/version.h share/sounds/Makefile share/ca-certs/Makefile finch/finch.pc finch/Makefile finch/libgnt/Makefile finch/libgnt/gnt.pc finch/libgnt/wms/Makefile finch/plugins/Makefile po/Makefile.in pidgin.spec" - - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure -@@ -23344,10 +22838,6 @@ - as_fn_error $? "conditional \"USE_VV\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${USE_INTERNAL_LIBGADU_TRUE}" && test -z "${USE_INTERNAL_LIBGADU_FALSE}"; then -- as_fn_error $? "conditional \"USE_INTERNAL_LIBGADU\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${DISTRIB_TRUE}" && test -z "${DISTRIB_FALSE}"; then - as_fn_error $? "conditional \"DISTRIB\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -23356,10 +22846,6 @@ - as_fn_error $? "conditional \"STATIC_BONJOUR\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${STATIC_GG_TRUE}" && test -z "${STATIC_GG_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_GG\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${STATIC_IRC_TRUE}" && test -z "${STATIC_IRC_FALSE}"; then - as_fn_error $? "conditional \"STATIC_IRC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -23368,30 +22854,6 @@ - as_fn_error $? "conditional \"STATIC_JABBER\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${STATIC_MSN_TRUE}" && test -z "${STATIC_MSN_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_MSN\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_MYSPACE_TRUE}" && test -z "${STATIC_MYSPACE_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_MYSPACE\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_MXIT_TRUE}" && test -z "${STATIC_MXIT_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_MXIT\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_NOVELL_TRUE}" && test -z "${STATIC_NOVELL_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_NOVELL\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_OSCAR_TRUE}" && test -z "${STATIC_OSCAR_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_OSCAR\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_SAMETIME_TRUE}" && test -z "${STATIC_SAMETIME_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_SAMETIME\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${STATIC_SILC_TRUE}" && test -z "${STATIC_SILC_FALSE}"; then - as_fn_error $? "conditional \"STATIC_SILC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -23400,10 +22862,6 @@ - as_fn_error $? "conditional \"STATIC_SIMPLE\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${STATIC_YAHOO_TRUE}" && test -z "${STATIC_YAHOO_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_YAHOO\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${STATIC_ZEPHYR_TRUE}" && test -z "${STATIC_ZEPHYR_FALSE}"; then - as_fn_error $? "conditional \"STATIC_ZEPHYR\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -24425,20 +23883,12 @@ - "libpurple/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/Makefile" ;; - "libpurple/protocols/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/Makefile" ;; - "libpurple/protocols/bonjour/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/bonjour/Makefile" ;; -- "libpurple/protocols/gg/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/gg/Makefile" ;; - "libpurple/protocols/irc/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/irc/Makefile" ;; - "libpurple/protocols/jabber/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/jabber/Makefile" ;; -- "libpurple/protocols/msn/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/msn/Makefile" ;; -- "libpurple/protocols/myspace/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/myspace/Makefile" ;; -- "libpurple/protocols/mxit/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/mxit/Makefile" ;; -- "libpurple/protocols/novell/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/novell/Makefile" ;; - "libpurple/protocols/null/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/null/Makefile" ;; -- "libpurple/protocols/oscar/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/oscar/Makefile" ;; -- "libpurple/protocols/sametime/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/sametime/Makefile" ;; - "libpurple/protocols/silc/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/silc/Makefile" ;; - "libpurple/protocols/silc10/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/silc10/Makefile" ;; - "libpurple/protocols/simple/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/simple/Makefile" ;; -- "libpurple/protocols/yahoo/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/yahoo/Makefile" ;; - "libpurple/protocols/zephyr/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/zephyr/Makefile" ;; - "libpurple/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/tests/Makefile" ;; - "libpurple/purple.h") CONFIG_FILES="$CONFIG_FILES libpurple/purple.h" ;; -@@ -25863,7 +25313,6 @@ - echo Build with Cyrus SASL support. : $enable_cyrus_sasl - echo Use kerberos 4 with zephyr.... : $kerberos - echo Use external libzephyr........ : $zephyr --echo Use external libgadu.......... : $gadu_libs - echo Install pixmaps............... : $enable_pixmaps - echo Old tray icon compatibility... : $enable_traycompat - echo Install translations.......... : $enable_i18n -diff -Nur pidgin-2.10.7/configure.ac pidgin-2.10.7-nonprism/configure.ac ---- pidgin-2.10.7/configure.ac 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/configure.ac 2013-08-16 23:44:41.800496326 -0300 -@@ -854,28 +854,6 @@ - fi - - dnl ####################################################################### --dnl # Check for Meanwhile headers (for Sametime) --dnl ####################################################################### --AC_ARG_ENABLE(meanwhile, -- [AC_HELP_STRING([--disable-meanwhile], -- [compile without meanwhile (required for Sametime support)])], -- enable_meanwhile="$enableval", enable_meanwhile="yes") --if test "x$enable_meanwhile" = "xyes"; then -- PKG_CHECK_MODULES(MEANWHILE, [meanwhile >= 1.0.0 meanwhile < 2.0.0], [ -- have_meanwhile="yes" -- ], [ -- have_meanwhile="no" -- if test "x$force_deps" = "xyes" ; then -- AC_MSG_ERROR([ --Meanwhile development headers not found. --Use --disable-meanwhile if you do not need meanwhile (Sametime) support. --]) -- fi]) --fi --AC_SUBST(MEANWHILE_CFLAGS) --AC_SUBST(MEANWHILE_LIBS) -- --dnl ####################################################################### - dnl # Check for Native Avahi headers (for Bonjour) - dnl ####################################################################### - AC_ARG_ENABLE(avahi, -@@ -1020,100 +998,6 @@ - CPPFLAGS="$CPPFLAGS_save" - fi - --dnl ####################################################################### --dnl # Check for Gadu-Gadu client includes and libraries --dnl ####################################################################### --AC_ARG_WITH(gadu-includes, [AC_HELP_STRING([--with-gadu-includes=DIR], [compile the Gadu-Gadu plugin against includes in DIR])], [ac_gadu_includes="$withval"], [ac_gadu_includes="no"]) --AC_ARG_WITH(gadu-libs, [AC_HELP_STRING([--with-gadu-libs=DIR], [compile the Gadu-Gadu plugin against the libs in DIR])], [ac_gadu_libs="$withval"], [ac_gadu_libs="no"]) --GADU_CFLAGS="" --GADU_LIBS="" --if test -n "$with_gadu_includes" || test -n "$with_gadu_libs"; then -- gadu_manual_check="yes" --else -- gadu_manual_check="no" --fi --if test "x$gadu_manual_check" = "xno"; then -- PKG_CHECK_MODULES(GADU, [libgadu >= 1.11.0], [ -- gadu_includes="yes" -- gadu_libs="yes" -- ], [ -- gadu_includes="no" -- ]) --else -- if test "$ac_gadu_includes" != "no"; then -- GADU_CFLAGS="-I$ac_gadu_includes" -- fi -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- AC_CHECK_HEADER(libgadu.h, [gadu_includes=yes]) -- CPPFLAGS="$CPPFLAGS_save" -- -- if test "$ac_gadu_libs" != "no"; then -- GADU_LIBS="-L$ac_gadu_libs" -- fi -- GADU_LIBS="$GADU_LIBS -lgadu" -- AC_CHECK_LIB(gadu, gg_libgadu_version, [gadu_libs=yes], , $GADU_LIBS) --fi --GADU_CFLAGS=`echo $GADU_CFLAGS |$sedpath 's/-Wall//'` -- --if test "x$gadu_libs" = "xyes"; then -- AC_MSG_CHECKING(for libgadu GPL compatibility) -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libgadu.h>]], [[ --#if defined(__GG_LIBGADU_HAVE_OPENSSL) || defined(GG_CONFIG_HAVE_OPENSSL) --#error "libgadu is not compatible with the GPL when compiled with OpenSSL support." --#endif -- ]])], [ -- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libgadu.h>]], [[ --#if GG_DEFAULT_PROTOCOL_VERSION < 0x2e --#error "Your libgadu version is too old. libpurple requires 1.11.0 or higher." --#endif -- ]])], [ -- AC_MSG_RESULT(yes) -- AC_DEFINE([HAVE_LIBGADU], [1], -- [Define to 1 if you have libgadu.]) -- ], [ -- AC_MSG_RESULT(no) -- echo -- echo -- echo "Your supplied copy of libgadu is too old." -- echo "Install version 1.11.0 or newer." -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- ]) -- ], [ -- AC_MSG_RESULT(no) -- echo -- echo -- echo "libgadu is not compatible with the GPL when compiled with OpenSSL support." -- echo "To compile against system libgadu, please recompile libgadu using:" -- echo "./autogen.sh --disable-libgadu-openssl --disable-static --enable-shared" -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- ]) -- CPPFLAGS="$CPPFLAGS_save" --fi -- --AM_CONDITIONAL(USE_INTERNAL_LIBGADU, test "x$gadu_libs" != "xyes") -- --if test "x$gadu_libs" = "x"; then -- gadu_libs=no --fi -- --AC_SUBST(GADU_LIBS) --AC_SUBST(GADU_CFLAGS) -- - AC_ARG_ENABLE(distrib,,,enable_distrib=no) - AM_CONDITIONAL(DISTRIB, test "x$enable_distrib" = "xyes") - DYNAMIC_PRPLS=all -@@ -1123,10 +1007,7 @@ - fi - - if test "x$STATIC_PRPLS" = "xall" ; then -- STATIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes" ; then -- STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'` -+ STATIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/bonjour//'` -@@ -1143,64 +1024,31 @@ - load_proto= - for i in $STATIC_PRPLS ; do - dnl Ugly special case for "libsilcpurple.la": -- dnl ... and Ugly special case for multi-protocol oscar and yahoo -- if test \( "x$i" = "xoscar" -o "x$i" = "xaim" -o "x$i" = "xicq" \) -a "x$static_oscar" != "xyes"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/oscar/liboscar.la" -- extern_init="$extern_init extern gboolean purple_init_aim_plugin();" -- extern_init="$extern_init extern gboolean purple_init_icq_plugin();" -- load_proto="$load_proto purple_init_aim_plugin();" -- load_proto="$load_proto purple_init_icq_plugin();" -- elif test "x$i" = "xyahoo"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/yahoo/libymsg.la" -- extern_init="$extern_init extern gboolean purple_init_yahoo_plugin();" -- extern_init="$extern_init extern gboolean purple_init_yahoojp_plugin();" -- load_proto="$load_proto purple_init_yahoo_plugin();" -- load_proto="$load_proto purple_init_yahoojp_plugin();" -+ if test "x$i" = "xsilc"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -+ elif test "x$i" = "xsilc10"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" - else -- if test "x$i" = "xsilc"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -- elif test "x$i" = "xsilc10"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" -- else -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" -- fi -- extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -- load_proto="$load_proto purple_init_${i}_plugin();" -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" - fi -+ extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -+ load_proto="$load_proto purple_init_${i}_plugin();" - case $i in - bonjour) static_bonjour=yes ;; -- gg) static_gg=yes ;; - irc) static_irc=yes ;; - jabber) static_jabber=yes ;; -- msn) static_msn=yes ;; -- myspace) static_myspace=yes ;; -- mxit) static_mxit=yes ;; -- novell) static_novell=yes ;; -- oscar) static_oscar=yes ;; -- aim) static_oscar=yes ;; -- icq) static_oscar=yes ;; -- sametime) static_sametime=yes ;; - silc) static_silc=yes ;; - silc10) static_silc=yes ;; - simple) static_simple=yes ;; -- yahoo) static_yahoo=yes ;; - zephyr) static_zephyr=yes ;; - *) echo "Invalid static protocol $i!!" ; exit 1 ;; - esac - done - AM_CONDITIONAL(STATIC_BONJOUR, test "x$static_bonjour" = "xyes") --AM_CONDITIONAL(STATIC_GG, test "x$static_gg" = "xyes") - AM_CONDITIONAL(STATIC_IRC, test "x$static_irc" = "xyes") - AM_CONDITIONAL(STATIC_JABBER, test "x$static_jabber" = "xyes") --AM_CONDITIONAL(STATIC_MSN, test "x$static_msn" = "xyes") --AM_CONDITIONAL(STATIC_MYSPACE, test "x$static_myspace" = "xyes") --AM_CONDITIONAL(STATIC_MXIT, test "x$static_mxit" = "xyes") --AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes") --AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes") --AM_CONDITIONAL(STATIC_SAMETIME, test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes") - AM_CONDITIONAL(STATIC_SILC, test "x$static_silc" = "xyes" -a "x$have_silc" = "xyes") - AM_CONDITIONAL(STATIC_SIMPLE, test "x$static_simple" = "xyes") --AM_CONDITIONAL(STATIC_YAHOO, test "x$static_yahoo" = "xyes") - AM_CONDITIONAL(STATIC_ZEPHYR, test "x$static_zephyr" = "xyes") - AC_SUBST(STATIC_LINK_LIBS) - AC_DEFINE_UNQUOTED(STATIC_PROTO_INIT, $extern_init static void static_proto_init(void) { $load_proto }, -@@ -1208,10 +1056,7 @@ - - AC_ARG_WITH(dynamic_prpls, [AC_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`]) - if test "x$DYNAMIC_PRPLS" = "xall" ; then -- DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes"; then -- DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'` -+ DYNAMIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/bonjour//'` -@@ -1226,22 +1071,12 @@ - for i in $DYNAMIC_PRPLS ; do - case $i in - bonjour) dynamic_bonjour=yes ;; -- gg) dynamic_gg=yes ;; - irc) dynamic_irc=yes ;; - jabber) dynamic_jabber=yes ;; -- msn) dynamic_msn=yes ;; -- myspace) dynamic_myspace=yes ;; -- mxit) dynamic_mxit=yes ;; -- novell) dynamic_novell=yes ;; - null) dynamic_null=yes ;; -- oscar) dynamic_oscar=yes ;; -- aim) dynamic_oscar=yes ;; -- icq) dynamic_oscar=yes ;; -- sametime) dynamic_sametime=yes ;; - silc) dynamic_silc=yes ;; - silc10) dynamic_silc=yes ;; - simple) dynamic_simple=yes ;; -- yahoo) dynamic_yahoo=yes ;; - zephyr) dynamic_zephyr=yes ;; - *) echo "Invalid dynamic protocol $i!!" ; exit 1 ;; - esac -@@ -1713,7 +1548,7 @@ - [enable_nss="$enableval"], - [enable_nss="yes"]) - --msg_ssl="None. MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!" -+msg_ssl="None." - looked_for_gnutls="no" - dnl # - dnl # Check for GnuTLS if it's specified. -@@ -2124,19 +1959,16 @@ - AC_MSG_ERROR([ - Neither GnuTLS or NSS SSL development headers found. - Use --disable-nss --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable! - ]) - elif test "x$looked_for_gnutls" = "xyes" -a "x$force_deps" = "xyes" ; then - AC_MSG_ERROR([ - GnuTLS SSL development headers not found. - Use --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - ]) - elif test "x$looked_for_nss" = "xyes" -a "x$force_deps" = "xyes" ; then - AC_MSG_ERROR([ - NSS SSL development headers not found. - Use --disable-nss if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - ]) - fi - -@@ -2577,20 +2409,12 @@ - libpurple/Makefile - libpurple/protocols/Makefile - libpurple/protocols/bonjour/Makefile -- libpurple/protocols/gg/Makefile - libpurple/protocols/irc/Makefile - libpurple/protocols/jabber/Makefile -- libpurple/protocols/msn/Makefile -- libpurple/protocols/myspace/Makefile -- libpurple/protocols/mxit/Makefile -- libpurple/protocols/novell/Makefile - libpurple/protocols/null/Makefile -- libpurple/protocols/oscar/Makefile -- libpurple/protocols/sametime/Makefile - libpurple/protocols/silc/Makefile - libpurple/protocols/silc10/Makefile - libpurple/protocols/simple/Makefile -- libpurple/protocols/yahoo/Makefile - libpurple/protocols/zephyr/Makefile - libpurple/tests/Makefile - libpurple/purple.h -@@ -2635,7 +2459,6 @@ - echo Build with Cyrus SASL support. : $enable_cyrus_sasl - echo Use kerberos 4 with zephyr.... : $kerberos - echo Use external libzephyr........ : $zephyr --echo Use external libgadu.......... : $gadu_libs - echo Install pixmaps............... : $enable_pixmaps - echo Old tray icon compatibility... : $enable_traycompat - echo Install translations.......... : $enable_i18n -diff -Nur pidgin-2.10.7/doc/finch.1.in pidgin-2.10.7-nonprism/doc/finch.1.in ---- pidgin-2.10.7/doc/finch.1.in 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/doc/finch.1.in 2013-08-16 21:01:16.682280145 -0300 -@@ -30,11 +30,8 @@ - .SH DESCRIPTION - .PP - \fBfinch\fR is a console-based modular messaging client based on libpurple --which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, --Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has -+which is capable of connecting to XMPP, IRC, SILC and Zephyr all at once. It has - many common features found in other clients, as well as many unique features. --Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or --Yahoo. - - .SH OPTIONS - The following options are provided by \fBfinch\fR using the standard GNU -diff -Nur pidgin-2.10.7/doc/funniest_home_convos.txt pidgin-2.10.7-nonprism/doc/funniest_home_convos.txt ---- pidgin-2.10.7/doc/funniest_home_convos.txt 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/doc/funniest_home_convos.txt 2013-08-16 23:08:16.148841464 -0300 -@@ -301,8 +301,6 @@ - --- - - 18:33:26 <NoName> hello there --18:34:03 <NoName> I just wanted to share some bevavior that I think its kinda of -- unsafe when using GAIM with yahoo messenges accounts - 18:34:43 <NoName> Whenever you transfer files between users, no receiving - confirmation is requested, the file gets transfered - automatically -diff -Nur pidgin-2.10.7/doc/pidgin.1.in pidgin-2.10.7-nonprism/doc/pidgin.1.in ---- pidgin-2.10.7/doc/pidgin.1.in 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/doc/pidgin.1.in 2013-08-16 21:00:30.964181946 -0300 -@@ -29,11 +29,8 @@ - .SH DESCRIPTION - .PP - \fBpidgin\fR is a graphical modular messaging client based on libpurple --which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, --Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has -+which is capable of connecting to XMPP, IRC, SILC and Zephyr all at once. It has - many common features found in other clients, as well as many unique features. --Pidgin is not endorsed by or affiliated with America Online, ICQ, Microsoft, or --Yahoo. - .PP - Pidgin can be extended by plugins written in multiple programming languages and - controlled through DBus or \fBpurple-remote\fR. -diff -Nur pidgin-2.10.7/libpurple/account.c pidgin-2.10.7-nonprism/libpurple/account.c ---- pidgin-2.10.7/libpurple/account.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/account.c 2013-08-16 23:31:48.026518940 -0300 -@@ -482,55 +482,6 @@ - /********************************************************************* - * Reading from disk * - *********************************************************************/ --static void --migrate_yahoo_japan(PurpleAccount *account) --{ -- /* detect a Yahoo! JAPAN account that existed prior to 2.6.0 and convert it -- * to use the new prpl-yahoojp. Also remove the account-specific settings -- * we no longer need */ -- -- if(purple_strequal(purple_account_get_protocol_id(account), "prpl-yahoo")) { -- if(purple_account_get_bool(account, "yahoojp", FALSE)) { -- const char *serverjp = purple_account_get_string(account, "serverjp", NULL); -- const char *xferjp_host = purple_account_get_string(account, "xferjp_host", NULL); -- -- g_return_if_fail(serverjp != NULL); -- g_return_if_fail(xferjp_host != NULL); -- -- purple_account_set_string(account, "server", serverjp); -- purple_account_set_string(account, "xfer_host", xferjp_host); -- -- purple_account_set_protocol_id(account, "prpl-yahoojp"); -- } -- -- /* these should always be nuked */ -- purple_account_remove_setting(account, "yahoojp"); -- purple_account_remove_setting(account, "serverjp"); -- purple_account_remove_setting(account, "xferjp_host"); -- -- } --} -- --static void --migrate_icq_server(PurpleAccount *account) --{ -- /* Migrate the login server setting for ICQ accounts. See -- * 'mtn log --last 1 --no-graph --from b6d7712e90b68610df3bd2d8cbaf46d94c8b3794' -- * for details on the change. */ -- -- if(purple_strequal(purple_account_get_protocol_id(account), "prpl-icq")) { -- const char *tmp = purple_account_get_string(account, "server", NULL); -- -- /* Non-secure server */ -- if(purple_strequal(tmp, "login.messaging.aol.com") || -- purple_strequal(tmp, "login.oscar.aol.com")) -- purple_account_set_string(account, "server", "login.icq.com"); -- -- /* Secure server */ -- if(purple_strequal(tmp, "slogin.oscar.aol.com")) -- purple_account_set_string(account, "server", "slogin.icq.com"); -- } --} - - static void - migrate_xmpp_encryption(PurpleAccount *account) -@@ -615,12 +566,6 @@ - g_free(data); - } - -- /* we do this here because we need access to account settings to determine -- * if we can/should migrate an old Yahoo! JAPAN account */ -- migrate_yahoo_japan(account); -- /* we do this here because we need access to account settings to determine -- * if we can/should migrate an ICQ account's server setting */ -- migrate_icq_server(account); - /* we do this here because we need to do it before the user views the - * Edit Account dialog. */ - migrate_xmpp_encryption(account); -@@ -874,7 +819,6 @@ - return NULL; - } - -- ret = purple_account_new(name, _purple_oscar_convert(name, protocol_id)); /* XXX: */ - g_free(name); - g_free(protocol_id); - -diff -Nur pidgin-2.10.7/libpurple/blist.c pidgin-2.10.7-nonprism/libpurple/blist.c ---- pidgin-2.10.7/libpurple/blist.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/blist.c 2013-08-16 22:53:19.640535242 -0300 -@@ -466,9 +466,7 @@ - - acct_name = xmlnode_get_attrib(bnode, "account"); - protocol = xmlnode_get_attrib(bnode, "protocol"); -- protocol = _purple_oscar_convert(acct_name, protocol); /* XXX: Remove */ - proto = xmlnode_get_attrib(bnode, "proto"); -- proto = _purple_oscar_convert(acct_name, proto); /* XXX: Remove */ - - if (!acct_name || (!proto && !protocol)) - return; -diff -Nur pidgin-2.10.7/libpurple/buddyicon.c pidgin-2.10.7-nonprism/libpurple/buddyicon.c ---- pidgin-2.10.7/libpurple/buddyicon.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/buddyicon.c 2013-08-16 23:28:49.244233493 -0300 -@@ -1099,18 +1099,6 @@ - { - PurpleAccount *account = purple_buddy_get_account((PurpleBuddy *)node); - const char *prpl_id = purple_account_get_protocol_id(account); -- -- if (g_str_equal(prpl_id, "prpl-yahoo") || g_str_equal(prpl_id, "prpl-yahoojp")) -- { -- int checksum = purple_blist_node_get_int(node, "icon_checksum"); -- if (checksum != 0) -- { -- char *checksum_str = g_strdup_printf("%i", checksum); -- purple_blist_node_remove_setting(node, "icon_checksum"); -- purple_blist_node_set_string(node, "icon_checksum", checksum_str); -- g_free(checksum_str); -- } -- } - } - } - } -diff -Nur pidgin-2.10.7/libpurple/ft.h pidgin-2.10.7-nonprism/libpurple/ft.h ---- pidgin-2.10.7/libpurple/ft.h 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/ft.h 2013-08-16 22:51:20.590085226 -0300 -@@ -470,8 +470,6 @@ - * can be used to jump backward in the file if the protocol detects - * that some bit of data needs to be resent or has been sent twice. - * -- * It's used for pausing and resuming an oscar file transfer. -- * - * @param xfer The file transfer. - * @param bytes_sent The new current position in the file. If we're - * sending a file then this is the byte that we will -diff -Nur pidgin-2.10.7/libpurple/gaim-compat.h pidgin-2.10.7-nonprism/libpurple/gaim-compat.h ---- pidgin-2.10.7/libpurple/gaim-compat.h 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/gaim-compat.h 2013-08-16 23:33:16.372629159 -0300 -@@ -2302,16 +2302,8 @@ - #define gaim_init_ssl_plugin purple_init_ssl_plugin - #define gaim_init_ssl_openssl_plugin purple_init_ssl_openssl_plugin - #define gaim_init_ssl_gnutls_plugin purple_init_ssl_gnutls_plugin --#define gaim_init_gg_plugin purple_init_gg_plugin - #define gaim_init_jabber_plugin purple_init_jabber_plugin --#define gaim_init_sametime_plugin purple_init_sametime_plugin --#define gaim_init_msn_plugin purple_init_msn_plugin --#define gaim_init_novell_plugin purple_init_novell_plugin --#define gaim_init_qq_plugin purple_init_qq_plugin - #define gaim_init_simple_plugin purple_init_simple_plugin --#define gaim_init_yahoo_plugin purple_init_yahoo_plugin - #define gaim_init_zephyr_plugin purple_init_zephyr_plugin --#define gaim_init_aim_plugin purple_init_aim_plugin --#define gaim_init_icq_plugin purple_init_icq_plugin - - #endif /* _GAIM_COMPAT_H_ */ -diff -Nur pidgin-2.10.7/libpurple/internal.h pidgin-2.10.7-nonprism/libpurple/internal.h ---- pidgin-2.10.7/libpurple/internal.h 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/internal.h 2013-08-17 00:24:37.244172407 -0300 -@@ -43,7 +43,7 @@ - * - * The Singular/Plural/Number ngettext dummy definition below was - * taken from an email to the texinfo mailing list by Manuel Guerrero. -- * Thank you Manuel, and thank you Alex's good friend Google. -+ * Thank you Manuel. - */ - #ifdef ENABLE_NLS - # include <locale.h> -diff -Nur pidgin-2.10.7/libpurple/media/backend-fs2.c pidgin-2.10.7-nonprism/libpurple/media/backend-fs2.c ---- pidgin-2.10.7/libpurple/media/backend-fs2.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/media/backend-fs2.c 2013-08-17 00:23:19.488440821 -0300 -@@ -1661,18 +1661,6 @@ - g_object_set(G_OBJECT(session->session), - "no-rtcp-timeout", 0, NULL); - -- /* -- * Hack to make x264 work with Gmail video. -- */ -- if (is_nice && !strcmp(sess_id, "google-video")) { -- FsElementAddedNotifier *notifier = -- fs_element_added_notifier_new(); -- g_signal_connect(G_OBJECT(notifier), "element-added", -- G_CALLBACK(gst_element_added_cb), NULL); -- fs_element_added_notifier_add(notifier, -- GST_BIN(priv->conference)); -- } -- - session->id = g_strdup(sess_id); - session->backend = self; - session->type = type; -diff -Nur pidgin-2.10.7/libpurple/plugins/psychic.c pidgin-2.10.7-nonprism/libpurple/plugins/psychic.c ---- pidgin-2.10.7/libpurple/plugins/psychic.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/plugins/psychic.c 2013-08-27 21:18:22.251908751 -0300 -@@ -20,8 +20,7 @@ - #define PLUGIN_NAME N_("Psychic Mode") - #define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation") - #define PLUGIN_DESC N_("Causes conversation windows to appear as other" \ -- " users begin to message you. This works for" \ -- " AIM, ICQ, XMPP, Sametime, and Yahoo!") -+ " users begin to message you. This works for XMPP") - #define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>" - - -diff -Nur pidgin-2.10.7/libpurple/pounce.c pidgin-2.10.7-nonprism/libpurple/pounce.c ---- pidgin-2.10.7/libpurple/pounce.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/pounce.c 2013-08-16 23:02:20.671021669 -0300 -@@ -409,7 +409,6 @@ - g_free(data->account_name); - data->account_name = g_strdup(buffer); - tmp = data->protocol_id; -- data->protocol_id = g_strdup(_purple_oscar_convert(buffer, tmp)); - g_free(tmp); - } - else if (purple_strequal(element_name, "pouncee")) { -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/auth_cyrus.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/auth_cyrus.c ---- pidgin-2.10.7/libpurple/protocols/jabber/auth_cyrus.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/auth_cyrus.c 2013-08-17 00:14:13.334946817 -0300 -@@ -320,7 +320,7 @@ - xmlnode_set_namespace(auth, NS_XMPP_SASL); - xmlnode_set_attrib(auth, "mechanism", js->current_mech); - -- xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); -+ xmlnode_set_attrib(auth, "xmlns:ga", ""); - xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); - - if (clientout) { -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/auth_plain.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/auth_plain.c ---- pidgin-2.10.7/libpurple/protocols/jabber/auth_plain.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/auth_plain.c 2013-08-17 00:19:44.801822370 -0300 -@@ -40,7 +40,7 @@ - auth = xmlnode_new("auth"); - xmlnode_set_namespace(auth, NS_XMPP_SASL); - -- xmlnode_set_attrib(auth, "xmlns:ga", "http://www.google.com/talk/protocol/auth"); -+ xmlnode_set_attrib(auth, "xmlns:ga", ""); - xmlnode_set_attrib(auth, "ga:client-uses-full-bind-result", "true"); - - response = g_string_new(""); -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/buddy.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/buddy.c ---- pidgin-2.10.7/libpurple/protocols/jabber/buddy.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/buddy.c 2013-08-17 00:22:49.080836449 -0300 -@@ -38,7 +38,6 @@ - #include "xdata.h" - #include "pep.h" - #include "adhoccommands.h" --#include "google/google.h" - - typedef struct { - long idle_seconds; -@@ -945,17 +944,7 @@ - - /* Republish our vcard if the photo is different than the server's */ - if (js->initial_avatar_hash && !purple_strequal(vcard_hash, js->initial_avatar_hash)) { -- /* -- * Google Talk has developed the behavior that it will not accept -- * a vcard set in the first 10 seconds (or so) of the connection; -- * it returns an error (namespaces trimmed): -- * <error code="500" type="wait"><internal-server-error/></error>. -- */ -- if (js->googletalk) -- js->vcard_timer = purple_timeout_add_seconds(10, set_own_vcard_cb, -- js); -- else -- jabber_set_info(js->gc, purple_account_get_user_info(account)); -+ jabber_set_info(js->gc, purple_account_get_user_info(account)); - } else if (vcard_hash) { - /* A photo is in the vCard. Advertise its hash */ - js->avatar_hash = vcard_hash; -@@ -1861,13 +1850,6 @@ - NULL, NULL); - m = g_list_append(m, act); - } -- -- if (js->googletalk) { -- act = purple_menu_action_new(_("Initiate _Chat"), -- PURPLE_CALLBACK(google_buddy_node_chat), -- NULL, NULL); -- m = g_list_append(m, act); -- } - - /* - * This if-condition implements parts of XEP-0100: Gateway Interaction -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/disco.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/disco.c ---- pidgin-2.10.7/libpurple/protocols/jabber/disco.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/disco.c 2013-08-27 22:49:34.275219711 -0300 -@@ -30,9 +30,6 @@ - #include "adhoccommands.h" - #include "buddy.h" - #include "disco.h" --#include "google/google.h" --#include "google/gmail.h" --#include "google/jingleinfo.h" - #include "iq.h" - #include "jabber.h" - #include "jingle/jingle.h" -@@ -142,44 +139,6 @@ - xmlnode_set_attrib(feature, "var", feat->namespace); - } - } --#ifdef USE_VV -- } else if (g_str_equal(node, CAPS0115_NODE "#" "voice-v1")) { -- /* -- * HUGE HACK! We advertise this ext (see jabber_presence_create_js -- * where we add <c/> to the <presence/>) for the Google Talk -- * clients that don't actually check disco#info features. -- * -- * This specific feature is redundant but is what -- * node='http://mail.google.com/xmpp/client/caps', ver='1.1' -- * advertises as 'voice-v1'. -- */ -- xmlnode *feature = xmlnode_new_child(query, "feature"); -- xmlnode_set_attrib(feature, "var", NS_GOOGLE_VOICE); -- } else if (g_str_equal(node, CAPS0115_NODE "#" "video-v1")) { -- /* -- * HUGE HACK! We advertise this ext (see jabber_presence_create_js -- * where we add <c/> to the <presence/>) for the Google Talk -- * clients that don't actually check disco#info features. -- * -- * This specific feature is redundant but is what -- * node='http://mail.google.com/xmpp/client/caps', ver='1.1' -- * advertises as 'video-v1'. -- */ -- xmlnode *feature = xmlnode_new_child(query, "feature"); -- xmlnode_set_attrib(feature, "var", NS_GOOGLE_VIDEO); -- } else if (g_str_equal(node, CAPS0115_NODE "#" "camera-v1")) { -- /* -- * HUGE HACK! We advertise this ext (see jabber_presence_create_js -- * where we add <c/> to the <presence/>) for the Google Talk -- * clients that don't actually check disco#info features. -- * -- * This specific feature is redundant but is what -- * node='http://mail.google.com/xmpp/client/caps', ver='1.1' -- * advertises as 'camera-v1'. -- */ -- xmlnode *feature = xmlnode_new_child(query, "feature"); -- xmlnode_set_attrib(feature, "var", NS_GOOGLE_CAMERA); --#endif - } else { - xmlnode *error, *inf; - -@@ -419,7 +378,7 @@ - - } - --/* should probably share this code with google.c, or maybe from 2.7.0 -+/* maybe from 2.7.0 - introduce an abstracted hostname -> IP function in dns.c */ - static void - jabber_disco_stun_lookup_cb(GSList *hosts, gpointer data, -@@ -538,16 +497,7 @@ - - g_free(js->server_name); - js->server_name = g_strdup(name); -- if (!strcmp(name, "Google Talk")) { -- purple_debug_info("jabber", "Google Talk!\n"); -- js->googletalk = TRUE; -- -- /* autodiscover stun and relays */ -- if (purple_network_get_stun_ip() == NULL || -- purple_strequal(purple_network_get_stun_ip(), "")) { -- jabber_google_send_jingle_info(js); -- } -- } else if (purple_network_get_stun_ip() == NULL || -+ if (purple_network_get_stun_ip() == NULL || - purple_strequal(purple_network_get_stun_ip(), "")) { - js->srv_query_data = - purple_srv_resolve_account( -@@ -565,12 +515,7 @@ - if (!var) - continue; - -- if (!strcmp(NS_GOOGLE_MAIL_NOTIFY, var)) { -- js->server_caps |= JABBER_CAP_GMAIL_NOTIFY; -- jabber_gmail_init(js); -- } else if (!strcmp(NS_GOOGLE_ROSTER, var)) { -- js->server_caps |= JABBER_CAP_GOOGLE_ROSTER; -- } else if (!strcmp("http://jabber.org/protocol/commands", var)) { -+ if (!strcmp("http://jabber.org/protocol/commands", var)) { - js->server_caps |= JABBER_CAP_ADHOC; - } else if (!strcmp(NS_SIMPLE_BLOCKING, var)) { - js->server_caps |= JABBER_CAP_BLOCKING; -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/iq.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/iq.c ---- pidgin-2.10.7/libpurple/protocols/jabber/iq.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/iq.c 2013-08-17 00:19:05.943958296 -0300 -@@ -28,10 +28,6 @@ - - #include "buddy.h" - #include "disco.h" --#include "google/gmail.h" --#include "google/google.h" --#include "google/jingleinfo.h" --#include "google/google_session.h" - #include "iq.h" - #include "jingle/jingle.h" - #include "oob.h" -@@ -461,13 +457,7 @@ - signal_iq_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); - - jabber_iq_register_handler("jingle", JINGLE, jingle_parse); -- jabber_iq_register_handler("mailbox", NS_GOOGLE_MAIL_NOTIFY, -- jabber_gmail_poke); -- jabber_iq_register_handler("new-mail", NS_GOOGLE_MAIL_NOTIFY, -- jabber_gmail_poke); - jabber_iq_register_handler("ping", NS_PING, jabber_ping_parse); -- jabber_iq_register_handler("query", NS_GOOGLE_JINGLE_INFO, -- jabber_google_handle_jingle_info); - jabber_iq_register_handler("query", NS_BYTESTREAMS, - jabber_bytestreams_parse); - jabber_iq_register_handler("query", NS_DISCO_INFO, jabber_disco_info_parse); -@@ -481,8 +471,6 @@ - jabber_iq_register_handler("query", "jabber:iq:version", - jabber_iq_version_parse); - #ifdef USE_VV -- jabber_iq_register_handler("session", NS_GOOGLE_SESSION, -- jabber_google_session_parse); - #endif - jabber_iq_register_handler("block", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push); - jabber_iq_register_handler("unblock", NS_SIMPLE_BLOCKING, jabber_blocklist_parse_push); -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/jabber.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jabber.c ---- pidgin-2.10.7/libpurple/protocols/jabber/jabber.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jabber.c 2013-08-27 23:23:55.191865468 -0300 -@@ -51,9 +51,6 @@ - #include "chat.h" - #include "data.h" - #include "disco.h" --#include "google/google.h" --#include "google/google_roster.h" --#include "google/google_session.h" - #include "ibb.h" - #include "iq.h" - #include "jutil.h" -@@ -1003,9 +1000,6 @@ - js->stun_ip = NULL; - js->stun_port = 0; - js->stun_query = NULL; -- js->google_relay_token = NULL; -- js->google_relay_host = NULL; -- js->google_relay_requests = NULL; - - /* if we are idle, set idle-ness on the stream (this could happen if we get - disconnected and the reconnects while being idle. I don't think it makes -@@ -1679,8 +1673,6 @@ - } - g_free(js->server_name); - g_free(js->certificate_CN); -- g_free(js->gmail_last_time); -- g_free(js->gmail_last_tid); - g_free(js->old_msg); - g_free(js->old_avatarhash); - g_free(js->old_artist); -@@ -1709,21 +1701,6 @@ - js->stun_query = NULL; - } - -- /* remove Google relay-related stuff */ -- g_free(js->google_relay_token); -- g_free(js->google_relay_host); -- if (js->google_relay_requests) { -- while (js->google_relay_requests) { -- PurpleUtilFetchUrlData *url_data = -- (PurpleUtilFetchUrlData *) js->google_relay_requests->data; -- purple_util_fetch_url_cancel(url_data); -- g_free(url_data); -- js->google_relay_requests = -- g_list_delete_link(js->google_relay_requests, -- js->google_relay_requests); -- } -- } -- - g_free(js); - - gc->proto_data = NULL; -@@ -1916,12 +1893,6 @@ - if (js == NULL) - return; - -- if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) -- { -- jabber_google_roster_add_deny(js, who); -- return; -- } -- - if (!(js->server_caps & JABBER_CAP_BLOCKING)) - { - purple_notify_error(NULL, _("Server doesn't support blocking"), -@@ -1952,12 +1923,6 @@ - if (js == NULL) - return; - -- if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) -- { -- jabber_google_roster_rem_deny(js, who); -- return; -- } -- - if (!(js->server_caps & JABBER_CAP_BLOCKING)) - return; - -@@ -3310,13 +3275,7 @@ - jbr = jabber_buddy_find_resource(jb, resource); - g_free(resource); - -- if (type & PURPLE_MEDIA_AUDIO && -- !jabber_resource_has_capability(jbr, -- JINGLE_APP_RTP_SUPPORT_AUDIO) && -- jabber_resource_has_capability(jbr, NS_GOOGLE_VOICE)) -- return jabber_google_session_initiate(js, who, type); -- else -- return jingle_rtp_initiate_media(js, who, type); -+ return jingle_rtp_initiate_media(js, who, type); - } - - jb = jabber_buddy_find(js, who, FALSE); -@@ -3500,11 +3459,6 @@ - caps |= PURPLE_MEDIA_CAPS_MODIFY_SESSION | - PURPLE_MEDIA_CAPS_CHANGE_DIRECTION; - } -- if (jabber_resource_has_capability(jbr, NS_GOOGLE_VOICE)) { -- caps |= PURPLE_MEDIA_CAPS_AUDIO; -- if (jabber_resource_has_capability(jbr, NS_GOOGLE_VIDEO)) -- caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO; -- } - - total |= caps; - } -@@ -3869,10 +3823,6 @@ - jabber_add_feature(JINGLE, 0); - - #ifdef USE_VV -- jabber_add_feature(NS_GOOGLE_PROTOCOL_SESSION, jabber_audio_enabled); -- jabber_add_feature(NS_GOOGLE_VOICE, jabber_audio_enabled); -- jabber_add_feature(NS_GOOGLE_VIDEO, jabber_video_enabled); -- jabber_add_feature(NS_GOOGLE_CAMERA, jabber_video_enabled); - jabber_add_feature(JINGLE_APP_RTP, 0); - jabber_add_feature(JINGLE_APP_RTP_SUPPORT_AUDIO, jabber_audio_enabled); - jabber_add_feature(JINGLE_APP_RTP_SUPPORT_VIDEO, jabber_video_enabled); -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/jabber.h pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jabber.h ---- pidgin-2.10.7/libpurple/protocols/jabber/jabber.h 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jabber.h 2013-08-17 00:10:38.778345348 -0300 -@@ -36,12 +36,6 @@ - JABBER_CAP_IQ_SEARCH = 1 << 7, - JABBER_CAP_IQ_REGISTER = 1 << 8, - -- /* Google Talk extensions: -- * http://code.google.com/apis/talk/jep_extensions/extensions.html -- */ -- JABBER_CAP_GMAIL_NOTIFY = 1 << 9, -- JABBER_CAP_GOOGLE_ROSTER = 1 << 10, -- - JABBER_CAP_PING = 1 << 11, - JABBER_CAP_ADHOC = 1 << 12, - JABBER_CAP_BLOCKING = 1 << 13, -@@ -195,12 +189,8 @@ - gboolean reinit; - - JabberCapabilities server_caps; -- gboolean googletalk; - char *server_name; - -- char *gmail_last_time; -- char *gmail_last_tid; -- - char *serverFQDN; - - #ifdef HAVE_CYRUS_SASL -@@ -276,12 +266,6 @@ - gchar *stun_ip; - int stun_port; - PurpleDnsQueryData *stun_query; -- -- /* stuff for Google's relay handling */ -- gchar *google_relay_token; -- gchar *google_relay_host; -- GList *google_relay_requests; /* the HTTP requests to get */ -- /* relay info */ - }; - - typedef gboolean (JabberFeatureEnabled)(JabberStream *js, const gchar *namespace); -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/jingle/jingle.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jingle/jingle.c ---- pidgin-2.10.7/libpurple/protocols/jabber/jingle/jingle.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jingle/jingle.c 2013-08-17 00:17:51.991679891 -0300 -@@ -486,13 +486,11 @@ - - if (has_account_stun) { - purple_debug_info("jabber", -- "setting param stun-ip for stream using Google auto-config: %s\n", - js->stun_ip); - params[next_index].name = "stun-ip"; - g_value_init(¶ms[next_index].value, G_TYPE_STRING); - g_value_set_string(¶ms[next_index].value, js->stun_ip); - purple_debug_info("jabber", -- "setting param stun-port for stream using Google auto-config: %d\n", - js->stun_port); - next_index++; - params[next_index].name = "stun-port"; -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/jingle/jingle.h pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jingle/jingle.h ---- pidgin-2.10.7/libpurple/protocols/jabber/jingle/jingle.h 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/jingle/jingle.h 2013-08-27 23:02:43.456476444 -0300 -@@ -79,8 +79,7 @@ - void jingle_terminate_sessions(JabberStream *js); - - #ifdef USE_VV --/* create a GParam array given autoconfigured STUN (and later perhaps TURN). -- if google_talk is TRUE, set compatability mode to GOOGLE_TALK */ -+/* create a GParam array given autoconfigured STUN (and later perhaps TURN).*/ - GParameter *jingle_get_params(JabberStream *js, const gchar *relay_ip, - guint relay_udp, guint relay_tcp, guint relay_ssltcp, - const gchar *relay_username, const gchar *relay_password, guint *num_params); -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/libxmpp.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/libxmpp.c ---- pidgin-2.10.7/libpurple/protocols/jabber/libxmpp.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/libxmpp.c 2013-08-17 00:13:06.222881329 -0300 -@@ -41,7 +41,6 @@ - #include "si.h" - #include "message.h" - #include "presence.h" --#include "google/google.h" - #include "pep.h" - #include "usermood.h" - #include "usertune.h" -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/Makefile.am pidgin-2.10.7-nonprism/libpurple/protocols/jabber/Makefile.am ---- pidgin-2.10.7/libpurple/protocols/jabber/Makefile.am 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/Makefile.am 2013-08-17 00:18:17.592468560 -0300 -@@ -27,20 +27,6 @@ - data.h \ - disco.c \ - disco.h \ -- google/gmail.c \ -- google/gmail.h \ -- google/google.c \ -- google/google.h \ -- google/google_presence.c \ -- google/google_presence.h \ -- google/google_roster.c \ -- google/google_roster.h \ -- google/google_session.c \ -- google/google_session.h \ -- google/jingleinfo.c \ -- google/jingleinfo.h \ -- google/relay.c \ -- google/relay.h \ - ibb.c \ - ibb.h \ - iq.c \ -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/Makefile.in pidgin-2.10.7-nonprism/libpurple/protocols/jabber/Makefile.in ---- pidgin-2.10.7/libpurple/protocols/jabber/Makefile.in 2013-02-11 07:17:20.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/Makefile.in 2013-08-17 00:12:44.605549467 -0300 -@@ -104,12 +104,7 @@ - auth.h auth_digest_md5.c auth_digest_md5.h auth_plain.c \ - auth_scram.c auth_scram.h buddy.c buddy.h bosh.c bosh.h caps.c \ - caps.h chat.c chat.h data.c data.h disco.c disco.h \ -- google/gmail.c google/gmail.h google/google.c google/google.h \ -- google/google_presence.c google/google_presence.h \ -- google/google_roster.c google/google_roster.h \ -- google/google_session.c google/google_session.h \ -- google/jingleinfo.c google/jingleinfo.h google/relay.c \ -- google/relay.h ibb.c ibb.h iq.c iq.h jabber.c jabber.h \ -+ ibb.c ibb.h iq.c iq.h jabber.c jabber.h \ - jingle/jingle.c jingle/jingle.h jingle/content.c \ - jingle/content.h jingle/iceudp.c jingle/iceudp.h \ - jingle/rawudp.c jingle/rawudp.h jingle/rtp.c jingle/rtp.h \ -@@ -126,9 +121,7 @@ - libjabber_la-auth_scram.lo libjabber_la-buddy.lo \ - libjabber_la-bosh.lo libjabber_la-caps.lo libjabber_la-chat.lo \ - libjabber_la-data.lo libjabber_la-disco.lo \ -- libjabber_la-gmail.lo libjabber_la-google.lo \ -- libjabber_la-google_presence.lo libjabber_la-google_roster.lo \ -- libjabber_la-google_session.lo libjabber_la-jingleinfo.lo \ -+ libjabber_la-jingleinfo.lo \ - libjabber_la-relay.lo libjabber_la-ibb.lo libjabber_la-iq.lo \ - libjabber_la-jabber.lo libjabber_la-jingle.lo \ - libjabber_la-content.lo libjabber_la-iceudp.lo \ -@@ -244,8 +237,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -307,8 +298,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -457,13 +446,8 @@ - JABBERSOURCES = adhoccommands.c adhoccommands.h auth.c auth.h \ - auth_digest_md5.c auth_digest_md5.h auth_plain.c auth_scram.c \ - auth_scram.h buddy.c buddy.h bosh.c bosh.h caps.c caps.h \ -- chat.c chat.h data.c data.h disco.c disco.h google/gmail.c \ -- google/gmail.h google/google.c google/google.h \ -- google/google_presence.c google/google_presence.h \ -- google/google_roster.c google/google_roster.h \ -- google/google_session.c google/google_session.h \ -- google/jingleinfo.c google/jingleinfo.h google/relay.c \ -- google/relay.h ibb.c ibb.h iq.c iq.h jabber.c jabber.h \ -+ chat.c chat.h data.c data.h disco.c disco.h \ -+ ibb.c ibb.h iq.c iq.h jabber.c jabber.h \ - jingle/jingle.c jingle/jingle.h jingle/content.c \ - jingle/content.h jingle/iceudp.c jingle/iceudp.h \ - jingle/rawudp.c jingle/rawudp.h jingle/rtp.c jingle/rtp.h \ -@@ -600,11 +584,6 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-content.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-data.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-disco.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-gmail.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-google.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-google_presence.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-google_roster.Plo@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-google_session.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-ibb.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-iceudp.Plo@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjabber_la-iq.Plo@am__quote@ -@@ -731,55 +710,6 @@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-disco.lo `test -f 'disco.c' || echo '$(srcdir)/'`disco.c - --libjabber_la-gmail.lo: google/gmail.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-gmail.lo -MD -MP -MF $(DEPDIR)/libjabber_la-gmail.Tpo -c -o libjabber_la-gmail.lo `test -f 'google/gmail.c' || echo '$(srcdir)/'`google/gmail.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-gmail.Tpo $(DEPDIR)/libjabber_la-gmail.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/gmail.c' object='libjabber_la-gmail.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-gmail.lo `test -f 'google/gmail.c' || echo '$(srcdir)/'`google/gmail.c -- --libjabber_la-google.lo: google/google.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-google.lo -MD -MP -MF $(DEPDIR)/libjabber_la-google.Tpo -c -o libjabber_la-google.lo `test -f 'google/google.c' || echo '$(srcdir)/'`google/google.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-google.Tpo $(DEPDIR)/libjabber_la-google.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/google.c' object='libjabber_la-google.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-google.lo `test -f 'google/google.c' || echo '$(srcdir)/'`google/google.c -- --libjabber_la-google_presence.lo: google/google_presence.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-google_presence.lo -MD -MP -MF $(DEPDIR)/libjabber_la-google_presence.Tpo -c -o libjabber_la-google_presence.lo `test -f 'google/google_presence.c' || echo '$(srcdir)/'`google/google_presence.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-google_presence.Tpo $(DEPDIR)/libjabber_la-google_presence.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/google_presence.c' object='libjabber_la-google_presence.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-google_presence.lo `test -f 'google/google_presence.c' || echo '$(srcdir)/'`google/google_presence.c -- --libjabber_la-google_roster.lo: google/google_roster.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-google_roster.lo -MD -MP -MF $(DEPDIR)/libjabber_la-google_roster.Tpo -c -o libjabber_la-google_roster.lo `test -f 'google/google_roster.c' || echo '$(srcdir)/'`google/google_roster.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-google_roster.Tpo $(DEPDIR)/libjabber_la-google_roster.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/google_roster.c' object='libjabber_la-google_roster.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-google_roster.lo `test -f 'google/google_roster.c' || echo '$(srcdir)/'`google/google_roster.c -- --libjabber_la-google_session.lo: google/google_session.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-google_session.lo -MD -MP -MF $(DEPDIR)/libjabber_la-google_session.Tpo -c -o libjabber_la-google_session.lo `test -f 'google/google_session.c' || echo '$(srcdir)/'`google/google_session.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-google_session.Tpo $(DEPDIR)/libjabber_la-google_session.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/google_session.c' object='libjabber_la-google_session.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-google_session.lo `test -f 'google/google_session.c' || echo '$(srcdir)/'`google/google_session.c -- --libjabber_la-jingleinfo.lo: google/jingleinfo.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-jingleinfo.lo -MD -MP -MF $(DEPDIR)/libjabber_la-jingleinfo.Tpo -c -o libjabber_la-jingleinfo.lo `test -f 'google/jingleinfo.c' || echo '$(srcdir)/'`google/jingleinfo.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-jingleinfo.Tpo $(DEPDIR)/libjabber_la-jingleinfo.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/jingleinfo.c' object='libjabber_la-jingleinfo.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-jingleinfo.lo `test -f 'google/jingleinfo.c' || echo '$(srcdir)/'`google/jingleinfo.c -- --libjabber_la-relay.lo: google/relay.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-relay.lo -MD -MP -MF $(DEPDIR)/libjabber_la-relay.Tpo -c -o libjabber_la-relay.lo `test -f 'google/relay.c' || echo '$(srcdir)/'`google/relay.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-relay.Tpo $(DEPDIR)/libjabber_la-relay.Plo --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='google/relay.c' object='libjabber_la-relay.lo' libtool=yes @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -c -o libjabber_la-relay.lo `test -f 'google/relay.c' || echo '$(srcdir)/'`google/relay.c -- - libjabber_la-ibb.lo: ibb.c - @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjabber_la_CFLAGS) $(CFLAGS) -MT libjabber_la-ibb.lo -MD -MP -MF $(DEPDIR)/libjabber_la-ibb.Tpo -c -o libjabber_la-ibb.lo `test -f 'ibb.c' || echo '$(srcdir)/'`ibb.c - @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libjabber_la-ibb.Tpo $(DEPDIR)/libjabber_la-ibb.Plo -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/message.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/message.c ---- pidgin-2.10.7/libpurple/protocols/jabber/message.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/message.c 2013-08-17 00:20:08.115874207 -0300 -@@ -30,7 +30,6 @@ - #include "buddy.h" - #include "chat.h" - #include "data.h" --#include "google/google.h" - #include "message.h" - #include "xmlnode.h" - #include "pep.h" -@@ -151,11 +150,6 @@ - jbr->thread_id = g_strdup(jbr->thread_id); - } - -- if (jm->js->googletalk && jm->xhtml == NULL) { -- char *tmp = jm->body; -- jm->body = jabber_google_format_to_html(jm->body); -- g_free(tmp); -- } - serv_got_im(gc, jm->from, jm->xhtml ? jm->xhtml : jm->body, 0, jm->sent); - } - -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/namespaces.h pidgin-2.10.7-nonprism/libpurple/protocols/jabber/namespaces.h ---- pidgin-2.10.7/libpurple/protocols/jabber/namespaces.h 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/namespaces.h 2013-08-17 00:11:17.449534779 -0300 -@@ -95,18 +95,4 @@ - /* XEP-0264 File Transfer Thumbnails (Thumbs) */ - #define NS_THUMBS "urn:xmpp:thumbs:0" - --/* Google extensions */ --#define NS_GOOGLE_CAMERA "http://www.google.com/xmpp/protocol/camera/v1" --#define NS_GOOGLE_VIDEO "http://www.google.com/xmpp/protocol/video/v1" --#define NS_GOOGLE_VOICE "http://www.google.com/xmpp/protocol/voice/v1" --#define NS_GOOGLE_JINGLE_INFO "google:jingleinfo" -- --#define NS_GOOGLE_MAIL_NOTIFY "google:mail:notify" --#define NS_GOOGLE_ROSTER "google:roster" -- --#define NS_GOOGLE_PROTOCOL_SESSION "http://www.google.com/xmpp/protocol/session" --#define NS_GOOGLE_SESSION "http://www.google.com/session" --#define NS_GOOGLE_SESSION_PHONE "http://www.google.com/session/phone" --#define NS_GOOGLE_SESSION_VIDEO "http://www.google.com/session/video" -- - #endif /* PURPLE_JABBER_NAMESPACES_H_ */ -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/presence.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/presence.c ---- pidgin-2.10.7/libpurple/protocols/jabber/presence.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/presence.c 2013-08-17 00:16:58.436696950 -0300 -@@ -34,8 +34,6 @@ - - #include "buddy.h" - #include "chat.h" --#include "google/google.h" --#include "google/google_presence.h" - #include "presence.h" - #include "iq.h" - #include "jutil.h" -@@ -208,9 +206,6 @@ - /* changing the buzz state has to trigger a re-broadcasting of the presence for caps */ - - tune = purple_presence_get_status(p, "tune"); -- if (js->googletalk && !stripped && purple_status_is_active(tune)) { -- stripped = jabber_google_presence_outgoing(tune); -- } - - #define CHANGED(a,b) ((!a && b) || (a && a[0] == '\0' && b && b[0] != '\0') || \ - (a && !b) || (a && a[0] != '\0' && b && b[0] == '\0') || (a && b && strcmp(a,b))) -@@ -361,11 +356,6 @@ - #ifdef USE_VV - /* - * MASSIVE HUGE DISGUSTING HACK -- * This is a huge hack. As far as I can tell, Google Talk's gmail client -- * doesn't bother to check the actual features we advertise; they -- * just assume that if we specify a 'voice-v1' ext (ignoring that -- * these are to be assigned no semantic value), we support receiving voice -- * calls. - * - * Ditto for 'video-v1'. - */ -@@ -883,7 +873,6 @@ - - jbr = jabber_buddy_find_resource(presence->jb, NULL); - if (jbr) { -- jabber_google_presence_incoming(js, buddy_name, jbr); - purple_prpl_got_user_status(account, buddy_name, - jabber_buddy_state_get_status_id(jbr->state), - "priority", jbr->priority, -diff -Nur pidgin-2.10.7/libpurple/protocols/jabber/roster.c pidgin-2.10.7-nonprism/libpurple/protocols/jabber/roster.c ---- pidgin-2.10.7/libpurple/protocols/jabber/roster.c 2013-02-11 07:16:52.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/jabber/roster.c 2013-08-17 00:09:16.245807467 -0300 -@@ -27,8 +27,6 @@ - - #include "buddy.h" - #include "chat.h" --#include "google/google.h" --#include "google/google_roster.h" - #include "presence.h" - #include "roster.h" - #include "iq.h" -@@ -83,11 +81,6 @@ - iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:roster"); - query = xmlnode_get_child(iq->node, "query"); - -- if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) { -- xmlnode_set_attrib(query, "xmlns:gr", NS_GOOGLE_ROSTER); -- xmlnode_set_attrib(query, "gr:ext", "2"); -- } -- - jabber_iq_set_callback(iq, roster_request_cb, NULL); - jabber_iq_send(iq); - } -@@ -244,10 +237,6 @@ - } else { - GSList *groups = NULL; - -- if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) -- if (!jabber_google_roster_incoming(js, item)) -- continue; -- - for(group = xmlnode_get_child(item, "group"); group; group = xmlnode_get_next_twin(group)) { - char *group_name = xmlnode_get_data(group); - -@@ -349,11 +338,6 @@ - - g_slist_free(groups); - -- if (js->server_caps & JABBER_CAP_GOOGLE_ROSTER) { -- jabber_google_roster_outgoing(js, query, item); -- xmlnode_set_attrib(query, "xmlns:gr", NS_GOOGLE_ROSTER); -- xmlnode_set_attrib(query, "gr:ext", "2"); -- } - jabber_iq_send(iq); - } - -diff -Nur pidgin-2.10.7/libpurple/protocols/Makefile.am pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.am ---- pidgin-2.10.7/libpurple/protocols/Makefile.am 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.am 2013-08-16 22:37:55.011207011 -0300 -@@ -1,5 +1,5 @@ - EXTRA_DIST = Makefile.mingw - --DIST_SUBDIRS = bonjour gg irc jabber msn myspace mxit novell null oscar sametime silc silc10 simple yahoo zephyr -+DIST_SUBDIRS = bonjour irc jabber null silc silc10 simple zephyr - - SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS) -diff -Nur pidgin-2.10.7/libpurple/protocols/Makefile.in pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.in ---- pidgin-2.10.7/libpurple/protocols/Makefile.in 2013-02-11 07:17:19.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.in 2013-08-16 23:50:36.651423353 -0300 -@@ -160,8 +160,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -223,8 +221,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -365,7 +361,7 @@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ - EXTRA_DIST = Makefile.mingw --DIST_SUBDIRS = bonjour gg irc jabber msn myspace mxit novell null oscar sametime silc silc10 simple yahoo zephyr -+DIST_SUBDIRS = bonjour irc jabber null silc silc10 simple zephyr - SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS) - all: all-recursive - -diff -Nur pidgin-2.10.7/libpurple/prpl.h pidgin-2.10.7-nonprism/libpurple/prpl.h ---- pidgin-2.10.7/libpurple/prpl.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/prpl.h 2013-08-16 22:29:46.145754932 -0300 -@@ -161,15 +161,11 @@ - - /** - * Notify on new mail. -- * -- * MSN and Yahoo notify you when you have new mail. - */ - OPT_PROTO_MAIL_CHECK = 0x00000020, - - /** - * Images in IMs. -- * -- * Oscar lets you send images in direct IMs. - */ - OPT_PROTO_IM_IMAGE = 0x00000040, - -@@ -184,16 +180,13 @@ - /** - * Allows font size to be specified in sane point size - * -- * Probably just XMPP and Y!M -+ * Probably just XMPP - */ - OPT_PROTO_USE_POINTSIZE = 0x00000100, - - /** - * Set the Register button active even when the username has not - * been specified. -- * -- * Gadu-Gadu doesn't need a username to register new account (because -- * usernames are assigned by the server). - */ - OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200, - -@@ -467,9 +460,7 @@ - void (*convo_closed)(PurpleConnection *, const char *who); - - /** -- * Convert the username @a who to its canonical form. (For example, -- * AIM treats "fOo BaR" and "foobar" as the same user; this function -- * should return the same normalized string for both of those.) -+ * Convert the username @a who to its canonical form. - */ - const char *(*normalize)(const PurpleAccount *, const char *who); - -@@ -923,7 +914,7 @@ - * @param who Whose attention to request. - * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. 0 if prpl only defines one -- * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). -+ * , but some protocols define more. - * - * Note that you can't send arbitrary PurpleAttentionType's, because there is - * only a fixed set of attention commands. -diff -Nur pidgin-2.10.7/libpurple/purple-url-handler pidgin-2.10.7-nonprism/libpurple/purple-url-handler ---- pidgin-2.10.7/libpurple/purple-url-handler 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/purple-url-handler 2013-08-16 21:16:42.951304560 -0300 -@@ -117,70 +117,6 @@ - def addbuddy(account, screenname, group="", alias=""): - cpurple.PurpleBlistRequestAddBuddy(account, screenname, group, alias) - -- --def aim(uri): -- protocol = "prpl-aim" -- match = re.match(r"^aim:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid aim URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- accountname = params.get("account", "") -- screenname = params.get("screenname", "") -- -- account = findaccount(protocol, accountname) -- -- if command.lower() == "goim": -- goim(account, screenname, params.get("message")) -- elif command.lower() == "gochat": -- gochat(account, params) -- elif command.lower() == "addbuddy": -- addbuddy(account, screenname, params.get("group", "")) -- --def gg(uri): -- protocol = "prpl-gg" -- match = re.match(r"^gg:(.*)", uri) -- if not match: -- print "Invalid gg URI: %s" % uri -- return -- -- screenname = urllib.unquote_plus(match.group(1)) -- account = findaccount(protocol) -- goim(account, screenname) -- --def icq(uri): -- protocol = "prpl-icq" -- match = re.match(r"^icq:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid icq URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- accountname = params.get("account", "") -- screenname = params.get("screenname", "") -- -- account = findaccount(protocol, accountname) -- -- if command.lower() == "goim": -- goim(account, screenname, params.get("message")) -- elif command.lower() == "gochat": -- gochat(account, params) -- elif command.lower() == "addbuddy": -- addbuddy(account, screenname, params.get("group", "")) -- - def irc(uri): - protocol = "prpl-irc" - match = re.match(r"^irc:(//([^/]*))?/?([^?]*)(\?(.*))?", uri) -@@ -221,34 +157,6 @@ - channel = "#" + channel - gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg")) - --def msnim(uri): -- protocol = "prpl-msn" -- match = re.match(r"^msnim:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid msnim URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- screenname = params.get("contact", "") -- -- account = findaccount(protocol) -- -- if command.lower() == "chat": -- goim(account, screenname) -- elif command.lower() == "add": -- addbuddy(account, screenname) -- --def myim(uri): -- protocol = "prpl-myspace" -- print "TODO: send uri: ", uri -- assert False, "Not implemented" -- - def sip(uri): - protocol = "prpl-simple" - match = re.match(r"^sip:(.*)", uri) -@@ -300,57 +208,6 @@ - else: - goim(account, screenname) - --def gtalk(uri): -- protocol = "prpl-jabber" -- match = re.match(r"^gtalk:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid gtalk URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- accountname = params.get("from_jid", "") -- jid = params.get("jid", "") -- -- account = findaccount(protocol, accountname) -- -- if command.lower() == "chat": -- goim(account, jid) -- elif command.lower() == "call": -- # XXX V&V prompt to establish call -- goim(account, jid) -- --def ymsgr(uri): -- protocol = "prpl-yahoo" -- match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri) -- if not match: -- print "Invalid ymsgr URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- screenname = urllib.unquote_plus(match.group(3)) -- paramstring = match.group(5) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- -- account = findaccount(protocol) -- -- if command.lower() == "sendim": -- goim(account, screenname, params.get("m")) -- elif command.lower() == "chat": -- gochat(account, {"room": screenname}) -- elif command.lower() == "addfriend": -- addbuddy(account, screenname) -- -- - def main(argv=sys.argv): - if len(argv) != 2 or argv[1] == "--help" or argv[1] == "-h": - print "Usage: %s URI" % argv[0] -diff -Nur pidgin-2.10.7/libpurple/savedstatuses.c pidgin-2.10.7-nonprism/libpurple/savedstatuses.c ---- pidgin-2.10.7/libpurple/savedstatuses.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/savedstatuses.c 2013-08-16 22:52:44.582754543 -0300 -@@ -387,7 +387,6 @@ - const char *protocol; - acct_name = xmlnode_get_data(node); - protocol = xmlnode_get_attrib(node, "protocol"); -- protocol = _purple_oscar_convert(acct_name, protocol); /* XXX: Remove */ - if ((acct_name != NULL) && (protocol != NULL)) - ret->account = purple_accounts_find(acct_name, protocol); - g_free(acct_name); -diff -Nur pidgin-2.10.7/libpurple/server.h pidgin-2.10.7-nonprism/libpurple/server.h ---- pidgin-2.10.7/libpurple/server.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/server.h 2013-08-16 23:30:04.149920853 -0300 -@@ -69,7 +69,7 @@ - * @param who Whose attention to request. - * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. 0 if prpl only defines one -- * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). -+ * , but some protocols define more. - * - * Note that you can't send arbitrary PurpleAttentionType's, because there is - * only a fixed set of attention commands. -diff -Nur pidgin-2.10.7/libpurple/status.h pidgin-2.10.7-nonprism/libpurple/status.h ---- pidgin-2.10.7/libpurple/status.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/status.h 2013-08-16 22:52:22.542054119 -0300 -@@ -43,8 +43,7 @@ - * one of your AIM buddies has set himself as "away." You have a - * PurpleBuddy node for this person in your buddy list. Purple wants - * to mark this buddy as "away," so it creates a new PurpleStatus. -- * The PurpleStatus has its PurpleStatusType set to the "away" state -- * for the oscar PRPL. The PurpleStatus also contains the buddy's -+ * The PurpleStatus also contains the buddy's - * away message. PurpleStatuses are sometimes saved, depending on - * the context. The current PurpleStatuses associated with each of - * your accounts are saved so that the next time you start Purple, -diff -Nur pidgin-2.10.7/libpurple/tests/check_libpurple.c pidgin-2.10.7-nonprism/libpurple/tests/check_libpurple.c ---- pidgin-2.10.7/libpurple/tests/check_libpurple.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/check_libpurple.c 2013-08-16 22:55:33.731462302 -0300 -@@ -88,8 +88,6 @@ - srunner_add_suite(sr, jabber_digest_md5_suite()); - srunner_add_suite(sr, jabber_jutil_suite()); - srunner_add_suite(sr, jabber_scram_suite()); -- srunner_add_suite(sr, oscar_util_suite()); -- srunner_add_suite(sr, yahoo_util_suite()); - srunner_add_suite(sr, util_suite()); - srunner_add_suite(sr, xmlnode_suite()); - -diff -Nur pidgin-2.10.7/libpurple/tests/Makefile.am pidgin-2.10.7-nonprism/libpurple/tests/Makefile.am ---- pidgin-2.10.7/libpurple/tests/Makefile.am 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/Makefile.am 2013-08-16 22:56:03.189064778 -0300 -@@ -14,8 +14,6 @@ - test_jabber_digest_md5.c \ - test_jabber_jutil.c \ - test_jabber_scram.c \ -- test_oscar_util.c \ -- test_yahoo_util.c \ - test_util.c \ - test_xmlnode.c \ - $(top_builddir)/libpurple/util.h -@@ -31,8 +29,6 @@ - - check_libpurple_LDADD=\ - $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ -- $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ -- $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ - $(top_builddir)/libpurple/libpurple.la \ - @CHECK_LIBS@ \ - $(GLIB_LIBS) -diff -Nur pidgin-2.10.7/libpurple/tests/Makefile.in pidgin-2.10.7-nonprism/libpurple/tests/Makefile.in ---- pidgin-2.10.7/libpurple/tests/Makefile.in 2013-02-11 07:17:23.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/Makefile.in 2013-08-16 23:53:20.713146759 -0300 -@@ -65,8 +65,8 @@ - CONFIG_CLEAN_VPATH_FILES = - am__check_libpurple_SOURCES_DIST = check_libpurple.c tests.h \ - test_cipher.c test_jabber_caps.c test_jabber_digest_md5.c \ -- test_jabber_jutil.c test_jabber_scram.c test_oscar_util.c \ -- test_yahoo_util.c test_util.c test_xmlnode.c \ -+ test_jabber_jutil.c test_jabber_scram.c \ -+ test_util.c test_xmlnode.c \ - $(top_builddir)/libpurple/util.h - @HAVE_CHECK_TRUE@am_check_libpurple_OBJECTS = \ - @HAVE_CHECK_TRUE@ check_libpurple-check_libpurple.$(OBJEXT) \ -@@ -75,15 +75,11 @@ - @HAVE_CHECK_TRUE@ check_libpurple-test_jabber_digest_md5.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_jabber_jutil.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_jabber_scram.$(OBJEXT) \ --@HAVE_CHECK_TRUE@ check_libpurple-test_oscar_util.$(OBJEXT) \ --@HAVE_CHECK_TRUE@ check_libpurple-test_yahoo_util.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_util.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_xmlnode.$(OBJEXT) - check_libpurple_OBJECTS = $(am_check_libpurple_OBJECTS) - am__DEPENDENCIES_1 = - @HAVE_CHECK_TRUE@check_libpurple_DEPENDENCIES = $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/libpurple.la \ - @HAVE_CHECK_TRUE@ $(am__DEPENDENCIES_1) - AM_V_lt = $(am__v_lt_@AM_V@) -@@ -177,8 +173,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -240,8 +234,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -389,8 +381,6 @@ - @HAVE_CHECK_TRUE@ test_jabber_digest_md5.c \ - @HAVE_CHECK_TRUE@ test_jabber_jutil.c \ - @HAVE_CHECK_TRUE@ test_jabber_scram.c \ --@HAVE_CHECK_TRUE@ test_oscar_util.c \ --@HAVE_CHECK_TRUE@ test_yahoo_util.c \ - @HAVE_CHECK_TRUE@ test_util.c \ - @HAVE_CHECK_TRUE@ test_xmlnode.c \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/util.h -@@ -406,8 +396,6 @@ - - @HAVE_CHECK_TRUE@check_libpurple_LDADD = \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/libpurple.la \ - @HAVE_CHECK_TRUE@ @CHECK_LIBS@ \ - @HAVE_CHECK_TRUE@ $(GLIB_LIBS) -@@ -471,10 +459,8 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_jabber_digest_md5.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_jabber_jutil.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_jabber_scram.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_oscar_util.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_util.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_xmlnode.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_yahoo_util.Po@am__quote@ - - .c.o: - @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@@ -581,34 +567,6 @@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_jabber_scram.obj `if test -f 'test_jabber_scram.c'; then $(CYGPATH_W) 'test_jabber_scram.c'; else $(CYGPATH_W) '$(srcdir)/test_jabber_scram.c'; fi` - --check_libpurple-test_oscar_util.o: test_oscar_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_oscar_util.o -MD -MP -MF $(DEPDIR)/check_libpurple-test_oscar_util.Tpo -c -o check_libpurple-test_oscar_util.o `test -f 'test_oscar_util.c' || echo '$(srcdir)/'`test_oscar_util.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_oscar_util.Tpo $(DEPDIR)/check_libpurple-test_oscar_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_oscar_util.c' object='check_libpurple-test_oscar_util.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_oscar_util.o `test -f 'test_oscar_util.c' || echo '$(srcdir)/'`test_oscar_util.c -- --check_libpurple-test_oscar_util.obj: test_oscar_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_oscar_util.obj -MD -MP -MF $(DEPDIR)/check_libpurple-test_oscar_util.Tpo -c -o check_libpurple-test_oscar_util.obj `if test -f 'test_oscar_util.c'; then $(CYGPATH_W) 'test_oscar_util.c'; else $(CYGPATH_W) '$(srcdir)/test_oscar_util.c'; fi` --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_oscar_util.Tpo $(DEPDIR)/check_libpurple-test_oscar_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_oscar_util.c' object='check_libpurple-test_oscar_util.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_oscar_util.obj `if test -f 'test_oscar_util.c'; then $(CYGPATH_W) 'test_oscar_util.c'; else $(CYGPATH_W) '$(srcdir)/test_oscar_util.c'; fi` -- --check_libpurple-test_yahoo_util.o: test_yahoo_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_yahoo_util.o -MD -MP -MF $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo -c -o check_libpurple-test_yahoo_util.o `test -f 'test_yahoo_util.c' || echo '$(srcdir)/'`test_yahoo_util.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo $(DEPDIR)/check_libpurple-test_yahoo_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_yahoo_util.c' object='check_libpurple-test_yahoo_util.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_yahoo_util.o `test -f 'test_yahoo_util.c' || echo '$(srcdir)/'`test_yahoo_util.c -- --check_libpurple-test_yahoo_util.obj: test_yahoo_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_yahoo_util.obj -MD -MP -MF $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo -c -o check_libpurple-test_yahoo_util.obj `if test -f 'test_yahoo_util.c'; then $(CYGPATH_W) 'test_yahoo_util.c'; else $(CYGPATH_W) '$(srcdir)/test_yahoo_util.c'; fi` --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo $(DEPDIR)/check_libpurple-test_yahoo_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_yahoo_util.c' object='check_libpurple-test_yahoo_util.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_yahoo_util.obj `if test -f 'test_yahoo_util.c'; then $(CYGPATH_W) 'test_yahoo_util.c'; else $(CYGPATH_W) '$(srcdir)/test_yahoo_util.c'; fi` -- - check_libpurple-test_util.o: test_util.c - @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_util.o -MD -MP -MF $(DEPDIR)/check_libpurple-test_util.Tpo -c -o check_libpurple-test_util.o `test -f 'test_util.c' || echo '$(srcdir)/'`test_util.c - @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_util.Tpo $(DEPDIR)/check_libpurple-test_util.Po -diff -Nur pidgin-2.10.7/libpurple/tests/test_jabber_caps.c pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_caps.c ---- pidgin-2.10.7/libpurple/tests/test_jabber_caps.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_caps.c 2013-08-17 00:25:08.235128437 -0300 -@@ -33,7 +33,7 @@ - START_TEST(test_calculate_caps) - { - assert_caps_calculate_match("sha1", "GNjxthSckUNvAIoCCJFttjl6VL8=", -- "<query xmlns='http://jabber.org/protocol/disco#info' node='http://tkabber.jabber.ru/#GNjxthSckUNvAIoCCJFttjl6VL8='><identity category='client' type='pc' name='Tkabber'/><x xmlns='jabber:x:data' type='result'><field var='FORM_TYPE' type='hidden'><value>urn:xmpp:dataforms:softwareinfo</value></field><field var='software'><value>Tkabber</value></field><field var='software_version'><value> ( 8.5.5 )</value></field><field var='os'><value>ATmega640-16AU</value></field><field var='os_version'><value/></field></x><feature var='games:board'/><feature var='google:mail:notify'/><feature var='http://jabber.org/protocol/activity'/><feature var='http://jabber.org/protocol/bytestreams'/><feature var='http://jabber.org/protocol/chatstates'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/disco#info'/><feature var='http://jabber.org/protocol/disco#items'/><feature var='http://jabber.org/protocol/feature-neg'/><feature var='http://jabber.org/protocol/geoloc'/><feature var='http://jabber.org/protocol/ibb'/><feature var='http://jabber.org/protocol/iqibb'/><feature var='http://jabber.org/protocol/mood'/><feature var='http://jabber.org/protocol/muc'/><feature var='http://jabber.org/protocol/mute#ancestor'/><feature var='http://jabber.org/protocol/mute#editor'/><feature var='http://jabber.org/protocol/rosterx'/><feature var='http://jabber.org/protocol/si'/><feature var='http://jabber.org/protocol/si/profile/file-transfer'/><feature var='http://jabber.org/protocol/tune'/><feature var='jabber:iq:avatar'/><feature var='jabber:iq:browse'/><feature var='jabber:iq:dtcp'/><feature var='jabber:iq:filexfer'/><feature var='jabber:iq:ibb'/><feature var='jabber:iq:inband'/><feature var='jabber:iq:jidlink'/><feature var='jabber:iq:last'/><feature var='jabber:iq:oob'/><feature var='jabber:iq:privacy'/><feature var='jabber:iq:time'/><feature var='jabber:iq:version'/><feature var='jabber:x:data'/><feature var='jabber:x:event'/><feature var='jabber:x:oob'/><feature var='urn:xmpp:ping'/><feature var='urn:xmpp:receipts'/><feature var='urn:xmpp:time'/></query>"); -+ "<query xmlns='http://jabber.org/protocol/disco#info' node='http://tkabber.jabber.ru/#GNjxthSckUNvAIoCCJFttjl6VL8='><identity category='client' type='pc' name='Tkabber'/><x xmlns='jabber:x:data' type='result'><field var='FORM_TYPE' type='hidden'><value>urn:xmpp:dataforms:softwareinfo</value></field><field var='software'><value>Tkabber</value></field><field var='software_version'><value> ( 8.5.5 )</value></field><field var='os'><value>ATmega640-16AU</value></field><field var='os_version'><value/></field></x><feature var='games:board'/><feature var='http://jabber.org/protocol/activity'/><feature var='http://jabber.org/protocol/bytestreams'/><feature var='http://jabber.org/protocol/chatstates'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/disco#info'/><feature var='http://jabber.org/protocol/disco#items'/><feature var='http://jabber.org/protocol/feature-neg'/><feature var='http://jabber.org/protocol/geoloc'/><feature var='http://jabber.org/protocol/ibb'/><feature var='http://jabber.org/protocol/iqibb'/><feature var='http://jabber.org/protocol/mood'/><feature var='http://jabber.org/protocol/muc'/><feature var='http://jabber.org/protocol/mute#ancestor'/><feature var='http://jabber.org/protocol/mute#editor'/><feature var='http://jabber.org/protocol/rosterx'/><feature var='http://jabber.org/protocol/si'/><feature var='http://jabber.org/protocol/si/profile/file-transfer'/><feature var='http://jabber.org/protocol/tune'/><feature var='jabber:iq:avatar'/><feature var='jabber:iq:browse'/><feature var='jabber:iq:dtcp'/><feature var='jabber:iq:filexfer'/><feature var='jabber:iq:ibb'/><feature var='jabber:iq:inband'/><feature var='jabber:iq:jidlink'/><feature var='jabber:iq:last'/><feature var='jabber:iq:oob'/><feature var='jabber:iq:privacy'/><feature var='jabber:iq:time'/><feature var='jabber:iq:version'/><feature var='jabber:x:data'/><feature var='jabber:x:event'/><feature var='jabber:x:oob'/><feature var='urn:xmpp:ping'/><feature var='urn:xmpp:receipts'/><feature var='urn:xmpp:time'/></query>"); - } - END_TEST - -diff -Nur pidgin-2.10.7/libpurple/tests/test_jabber_jutil.c pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_jutil.c ---- pidgin-2.10.7/libpurple/tests/test_jabber_jutil.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_jutil.c 2013-08-27 22:53:21.524229291 -0300 -@@ -99,19 +99,19 @@ - - START_TEST(test_jabber_id_new) - { -- assert_valid_jid("gmail.com"); -- assert_valid_jid("gmail.com/Test"); -- assert_valid_jid("gmail.com/Test@"); -- assert_valid_jid("gmail.com/@"); -- assert_valid_jid("gmail.com/Test@alkjaweflkj"); -- assert_valid_jid("mark.doliner@gmail.com"); -- assert_valid_jid("mark.doliner@gmail.com/Test12345"); -- assert_valid_jid("mark.doliner@gmail.com/Test@12345"); -- assert_valid_jid("mark.doliner@gmail.com/Te/st@12@//345"); -+ assert_valid_jid("mail.com"); -+ assert_valid_jid("mail.com/Test"); -+ assert_valid_jid("mail.com/Test@"); -+ assert_valid_jid("mail.com/@"); -+ assert_valid_jid("mail.com/Test@alkjaweflkj"); -+ assert_valid_jid("mark.doliner@mail.com"); -+ assert_valid_jid("mark.doliner@mail.com/Test12345"); -+ assert_valid_jid("mark.doliner@mail.com/Test@12345"); -+ assert_valid_jid("mark.doliner@mail.com/Te/st@12@//345"); - assert_valid_jid("わいど@conference.jabber.org"); - assert_valid_jid("まりるーむ@conference.jabber.org"); -- assert_valid_jid("mark.doliner@gmail.com/まりるーむ"); -- assert_valid_jid("mark.doliner@gmail/stuff.org"); -+ assert_valid_jid("mark.doliner@mail.com/まりるーむ"); -+ assert_valid_jid("mark.doliner@mail/stuff.org"); - assert_valid_jid("stuart@nödåtXäYZ.se"); - assert_valid_jid("stuart@nödåtXäYZ.se/まりるーむ"); - assert_valid_jid("mark.doliner@わいど.org"); -@@ -123,17 +123,17 @@ - assert_valid_jid("pa=ul@10.0.42.230"); - assert_valid_jid("pa,ul@10.0.42.230"); - -- assert_invalid_jid("@gmail.com"); -- assert_invalid_jid("@@gmail.com"); -- assert_invalid_jid("mark.doliner@@gmail.com/Test12345"); -- assert_invalid_jid("mark@doliner@gmail.com/Test12345"); -- assert_invalid_jid("@gmail.com/Test@12345"); -+ assert_invalid_jid("@mail.com"); -+ assert_invalid_jid("@@mail.com"); -+ assert_invalid_jid("mark.doliner@@mail.com/Test12345"); -+ assert_invalid_jid("mark@doliner@mail.com/Test12345"); -+ assert_invalid_jid("@mail.com/Test@12345"); - assert_invalid_jid("/Test@12345"); - assert_invalid_jid("mark.doliner@"); - assert_invalid_jid("mark.doliner/"); -- assert_invalid_jid("mark.doliner@gmail_stuff.org"); -- assert_invalid_jid("mark.doliner@gmail[stuff.org"); -- assert_invalid_jid("mark.doliner@gmail\\stuff.org"); -+ assert_invalid_jid("mark.doliner@mail_stuff.org"); -+ assert_invalid_jid("mark.doliner@mail[stuff.org"); -+ assert_invalid_jid("mark.doliner@mail\\stuff.org"); - assert_invalid_jid("paul@[::1]124"); - assert_invalid_jid("paul@2[::1]124/as"); - assert_invalid_jid("paul@まつ.おおかみ/\x01"); -diff -Nur pidgin-2.10.7/libpurple/tests/tests.h pidgin-2.10.7-nonprism/libpurple/tests/tests.h ---- pidgin-2.10.7/libpurple/tests/tests.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/tests.h 2013-08-16 22:56:18.999567027 -0300 -@@ -13,8 +13,6 @@ - Suite * jabber_digest_md5_suite(void); - Suite * jabber_jutil_suite(void); - Suite * jabber_scram_suite(void); --Suite * oscar_util_suite(void); --Suite * yahoo_util_suite(void); - Suite * util_suite(void); - Suite * xmlnode_suite(void); - -diff -Nur pidgin-2.10.7/libpurple/util.c pidgin-2.10.7-nonprism/libpurple/util.c ---- pidgin-2.10.7/libpurple/util.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/util.c 2013-08-16 23:29:38.062434329 -0300 -@@ -3451,8 +3451,7 @@ - * is set to TRUE if this URL is https, otherwise it is set to - * FALSE. But that change will break the API. - * -- * This is important for Yahoo! web messenger login. They now -- * force https login, and if you access the web messenger login -+ * They now force https login, and if you access the web messenger login - * page via http then it redirects you to the https version, but - * purple_util_fetch_url() ignores the "https" and attempts to - * fetch the URL via http again, which gets redirected again. -@@ -4943,18 +4942,6 @@ - return buf; - } - --const char *_purple_oscar_convert(const char *act, const char *protocol) --{ -- if (act && purple_strequal(protocol, "prpl-oscar")) { -- int i; -- for (i = 0; act[i] != '\0'; i++) -- if (!isdigit(act[i])) -- return "prpl-aim"; -- return "prpl-icq"; -- } -- return protocol; --} -- - void purple_restore_default_signal_handlers(void) - { - #ifndef _WIN32 -diff -Nur pidgin-2.10.7/libpurple/util.h pidgin-2.10.7-nonprism/libpurple/util.h ---- pidgin-2.10.7/libpurple/util.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/util.h 2013-08-16 23:31:12.535403448 -0300 -@@ -456,8 +456,7 @@ - /** - * Extracts a field of data from HTML. - * -- * This is a scary function. See protocols/msn/msn.c and -- * protocols/yahoo/yahoo_profile.c for example usage. -+ * This is a scary function. - * - * @param str The string to parse. - * @param len The size of str. -@@ -1450,16 +1449,6 @@ - const char *purple_escape_filename(const char *str); - - /** -- * This is added temporarily to assist the split of oscar into aim and icq. -- * This should not be used by plugins. -- * -- * @deprecated This function should not be used in new code and should be -- * removed in 3.0.0. The aim/icq prpl split happened a long -- * time ago, and we don't need to keep migrating old data. -- */ --const char *_purple_oscar_convert(const char *act, const char *protocol); -- --/** - * Restore default signal handlers for signals which might reasonably have - * handlers. This should be called by a fork()'d child process, since child processes - * inherit the handlers of the parent. -diff -Nur pidgin-2.10.7/pidgin/gtkaccount.c pidgin-2.10.7-nonprism/pidgin/gtkaccount.c ---- pidgin-2.10.7/pidgin/gtkaccount.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkaccount.c 2013-08-27 22:45:35.495576079 -0300 -@@ -563,16 +563,11 @@ - if (value == NULL) - value = purple_account_user_split_get_default_value(split); - -- /* Google Talk default domain hackery! */ - menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->protocol_menu)); - item = gtk_menu_get_active(GTK_MENU(menu)); -- if (value == NULL && g_object_get_data(G_OBJECT(item), "fakegoogle") && -+ if (value == NULL && g_object_get_data(G_OBJECT(item), "") && - !strcmp(purple_account_user_split_get_text(split), _("Domain"))) -- value = "gmail.com"; -- -- if (value == NULL && g_object_get_data(G_OBJECT(item), "fakefacebook") && -- !strcmp(purple_account_user_split_get_text(split), _("Domain"))) -- value = "chat.facebook.com"; -+ value = ""; - - if (value != NULL) - gtk_entry_set_text(GTK_ENTRY(entry), value); -@@ -925,10 +920,6 @@ - model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); - opt_entry->widget = combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); - -- if (g_object_get_data(G_OBJECT(item), "fakefacebook") && -- !strcmp(opt_entry->setting, "connection_security")) -- str_value = "opportunistic_tls"; -- - /* Loop through list of PurpleKeyValuePair items */ - for (node = list; node != NULL; node = node->next) { - if (node->data != NULL) { -diff -Nur pidgin-2.10.7/pidgin/gtkblist.c pidgin-2.10.7-nonprism/pidgin/gtkblist.c ---- pidgin-2.10.7/pidgin/gtkblist.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkblist.c 2013-08-16 23:10:16.549286879 -0300 -@@ -2126,10 +2126,6 @@ - char *temp_vcard; - char *s, *c; - char *alias = NULL; -- GList *aims = NULL; -- GList *icqs = NULL; -- GList *yahoos = NULL; -- GList *msns = NULL; - GList *jabbers = NULL; - - s = temp_vcard = g_strdup(vcard); -@@ -2168,24 +2164,14 @@ - /* We only want to worry about a few fields here. */ - if (!strcmp(field, "FN")) - alias = g_strdup(value); -- else if (!strcmp(field, "X-AIM") || !strcmp(field, "X-ICQ") || -- !strcmp(field, "X-YAHOO") || !strcmp(field, "X-MSN") || -- !strcmp(field, "X-JABBER")) -+ else if (!strcmp(field, "X-JABBER")) - { - char **values = g_strsplit(value, ":", 0); - char **im; - - for (im = values; *im != NULL; im++) - { -- if (!strcmp(field, "X-AIM")) -- aims = g_list_append(aims, g_strdup(*im)); -- else if (!strcmp(field, "X-ICQ")) -- icqs = g_list_append(icqs, g_strdup(*im)); -- else if (!strcmp(field, "X-YAHOO")) -- yahoos = g_list_append(yahoos, g_strdup(*im)); -- else if (!strcmp(field, "X-MSN")) -- msns = g_list_append(msns, g_strdup(*im)); -- else if (!strcmp(field, "X-JABBER")) -+ if (!strcmp(field, "X-JABBER")) - jabbers = g_list_append(jabbers, g_strdup(*im)); - } - -@@ -2195,18 +2181,13 @@ - - g_free(temp_vcard); - -- if (aims == NULL && icqs == NULL && yahoos == NULL && -- msns == NULL && jabbers == NULL) -+ if (jabbers == NULL) - { - g_free(alias); - - return FALSE; - } - -- add_buddies_from_vcard("prpl-aim", group, aims, alias); -- add_buddies_from_vcard("prpl-icq", group, icqs, alias); -- add_buddies_from_vcard("prpl-yahoo", group, yahoos, alias); -- add_buddies_from_vcard("prpl-msn", group, msns, alias); - add_buddies_from_vcard("prpl-jabber", group, jabbers, alias); - - g_free(alias); -diff -Nur pidgin-2.10.7/pidgin/gtkdialogs.c pidgin-2.10.7-nonprism/pidgin/gtkdialogs.c ---- pidgin-2.10.7/pidgin/gtkdialogs.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkdialogs.c 2013-08-16 21:37:21.863154130 -0300 -@@ -615,16 +615,6 @@ - #endif - #endif - --#if defined(_WIN32) || defined(USE_INTERNAL_LIBGADU) -- g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Internal<br/>"); --#else --#ifdef HAVE_LIBGADU -- g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Enabled<br/>"); --#else -- g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Disabled<br/>"); --#endif --#endif -- - #ifdef USE_GTKSPELL - g_string_append(str, " <b>GtkSpell:</b> Enabled<br/>"); - #else -diff -Nur pidgin-2.10.7/pidgin/gtkimhtml.c pidgin-2.10.7-nonprism/pidgin/gtkimhtml.c ---- pidgin-2.10.7/pidgin/gtkimhtml.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkimhtml.c 2013-08-16 22:59:51.862994429 -0300 -@@ -2440,7 +2440,6 @@ - static gboolean smooth_scroll_cb(gpointer data); - - /* -- <KingAnt> marv: The two IM image functions in oscar are purple_odc_send_im and purple_odc_incoming - - - [19:58] <Robot101> marv: images go into the imgstore, a refcounted... well.. hash. :) -diff -Nur pidgin-2.10.7/pidgin/gtknotify.c pidgin-2.10.7-nonprism/pidgin/gtknotify.c ---- pidgin-2.10.7/pidgin/gtknotify.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtknotify.c 2013-08-27 23:37:23.037593200 -0300 -@@ -1263,10 +1263,6 @@ - command = g_strdup_printf("xdg-open %s", escaped); - g_free(tmp); - } -- else if (purple_running_osx() == TRUE) -- { -- command = g_strdup_printf("open %s", escaped); -- } - else if (!strcmp(web_browser, "epiphany") || - !strcmp(web_browser, "galeon")) - { -@@ -1289,30 +1285,31 @@ - { - command = g_strdup_printf("kfmclient openURL %s", escaped); - /* -- * Does Konqueror have options to open in new tab -+ * Does Konqueror-libre have options to open in new tab - * and/or current window? - */ - } -- else if (!strcmp(web_browser, "mozilla") || -- !strcmp(web_browser, "mozilla-firebird") || -- !strcmp(web_browser, "firefox") || -- !strcmp(web_browser, "seamonkey")) -+ else if (!strcmp(web_browser, "iceweasel") || -+ !strcmp(web_browser, "icecat") || -+ !strcmp(web_browser, "iceape")) - { - char *args = ""; - - command = g_strdup_printf("%s %s", web_browser, escaped); - - /* -- * Firefox 0.9 and higher require a "-a firefox" option when -+ * Iceweasel-libre 0.9 and higher require a "-a iceweasel" option when - * using -remote commands. This breaks older versions of - * mozilla. So we include this other handly little string -- * when calling firefox. If the API for remote calls changes -- * any more in firefox then firefox should probably be split -+ * when calling iceweasel. If the API for remote calls changes -+ * any more in iceweasel then iceweasel should probably be split - * apart from mozilla-firebird and mozilla... but this is good - * for now. - */ -- if (!strcmp(web_browser, "firefox")) -- args = "-a firefox"; -+ if (!strcmp(web_browser, "iceweasel")) -+ args = "-a iceweasel"; -+ else if (!strcmp(web_browser, "icecat")) -+ args = "-a icecat"; - - if (place == PIDGIN_BROWSER_NEW_WINDOW) - remote_command = g_strdup_printf("%s %s -remote " -@@ -1327,58 +1324,12 @@ - "openURL(%s)", - web_browser, args, escaped); - } -- else if (!strcmp(web_browser, "netscape")) -- { -- command = g_strdup_printf("netscape %s", escaped); -- -- if (place == PIDGIN_BROWSER_NEW_WINDOW) -- { -- remote_command = g_strdup_printf("netscape -remote " -- "openURL(%s,new-window)", -- escaped); -- } -- else if (place == PIDGIN_BROWSER_CURRENT) -- { -- remote_command = g_strdup_printf("netscape -remote " -- "openURL(%s)", escaped); -- } -- } -- else if (!strcmp(web_browser, "opera")) -- { -- if (place == PIDGIN_BROWSER_NEW_WINDOW) -- command = g_strdup_printf("opera -newwindow %s", escaped); -- else if (place == PIDGIN_BROWSER_NEW_TAB) -- command = g_strdup_printf("opera -newpage %s", escaped); -- else if (place == PIDGIN_BROWSER_CURRENT) -- { -- remote_command = g_strdup_printf("opera -remote " -- "openURL(%s)", escaped); -- command = g_strdup_printf("opera %s", escaped); -- } -- else -- command = g_strdup_printf("opera %s", escaped); -- -- } -- else if (!strcmp(web_browser, "google-chrome")) -- { -- /* Google Chrome doesn't have command-line arguments that control the -- * opening of links from external calls. This is controlled solely from -- * a preference within Google Chrome. */ -- command = g_strdup_printf("google-chrome %s", escaped); -- } -- else if (!strcmp(web_browser, "chrome")) -- { -- /* Chromium doesn't have command-line arguments that control the -- * opening of links from external calls. This is controlled solely from -- * a preference within Chromium. */ -- command = g_strdup_printf("chrome %s", escaped); -- } -- else if (!strcmp(web_browser, "chromium-browser")) -+ else if (!strcmp(web_browser, "chromium")) - { -- /* Chromium doesn't have command-line arguments that control the -+ /* Chromium-libre doesn't have command-line arguments that control the - * opening of links from external calls. This is controlled solely from -- * a preference within Chromium. */ -- command = g_strdup_printf("chromium-browser %s", escaped); -+ * a preference within Chromium-libre. */ -+ command = g_strdup_printf("chromium %s", escaped); - } - else if (!strcmp(web_browser, "custom")) - { -diff -Nur pidgin-2.10.7/pidgin/gtkprefs.c pidgin-2.10.7-nonprism/pidgin/gtkprefs.c ---- pidgin-2.10.7/pidgin/gtkprefs.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkprefs.c 2013-08-27 22:55:58.523782666 -0300 -@@ -1851,24 +1851,15 @@ - - /* Sorted reverse alphabetically */ - static const struct browser possible_browsers[] = { -- {N_("Seamonkey"), "seamonkey"}, -- {N_("Opera"), "opera"}, -- {N_("Netscape"), "netscape"}, -- {N_("Mozilla"), "mozilla"}, -- {N_("Konqueror"), "kfmclient"}, -- {N_("Google Chrome"), "google-chrome"}, -- /* Do not move the line below. Code below expects gnome-open to be in -- * this list immediately after xdg-open! */ -+ {N_("Iceape-libre"), "iceape"}, -+ {N_("Konqueror-libre"), "kfmclient"}, - {N_("Desktop Default"), "xdg-open"}, - {N_("GNOME Default"), "gnome-open"}, -- {N_("Galeon"), "galeon"}, -- {N_("Firefox"), "firefox"}, -- {N_("Firebird"), "mozilla-firebird"}, -- {N_("Epiphany"), "epiphany"}, -- /* Translators: please do not translate "chromium-browser" here! */ -- {N_("Chromium (chromium-browser)"), "chromium-browser"}, -- /* Translators: please do not translate "chrome" here! */ -- {N_("Chromium (chrome)"), "chrome"} -+ {N_("Iceweasel-libre"), "iceweasel"}, -+ {N_("Icecat"), "icecat"}, -+ {N_("Epiphany-libre"), "epiphany"}, -+ /* Translators: please do not translate "chromium" here! */ -+ {N_("Chromium-libre (chromium)"), "chromium"}, - }; - static const int num_possible_browsers = G_N_ELEMENTS(possible_browsers); - -diff -Nur pidgin-2.10.7/pidgin/gtkutils.c pidgin-2.10.7-nonprism/pidgin/gtkutils.c ---- pidgin-2.10.7/pidgin/gtkutils.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkutils.c 2013-08-16 19:59:22.633298587 -0300 -@@ -677,7 +677,6 @@ - GdkPixbuf *pixbuf = NULL; - GtkSizeGroup *sg; - GList *p; -- const char *gtalk_name = NULL, *facebook_name = NULL; - int i; - - aop_menu = g_malloc0(sizeof(AopMenu)); -@@ -686,55 +685,12 @@ - gtk_widget_show(aop_menu->menu); - sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - -- if (purple_find_prpl("prpl-jabber")) { -- gtalk_name = _("Google Talk"); -- facebook_name = _("Facebook (XMPP)"); -- } -- - for (p = purple_plugins_get_protocols(), i = 0; - p != NULL; - p = p->next, i++) { - - plugin = (PurplePlugin *)p->data; - -- if (gtalk_name && strcmp(gtalk_name, plugin->info->name) < 0) { -- char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", -- "16", "google-talk.png", NULL); -- GtkWidget *item; -- -- pixbuf = pidgin_pixbuf_new_from_file(filename); -- g_free(filename); -- -- gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), -- item = aop_menu_item_new(sg, pixbuf, gtalk_name, "prpl-jabber", "protocol")); -- g_object_set_data(G_OBJECT(item), "fakegoogle", GINT_TO_POINTER(1)); -- -- if (pixbuf) -- g_object_unref(pixbuf); -- -- gtalk_name = NULL; -- i++; -- } -- -- if (facebook_name && strcmp(facebook_name, plugin->info->name) < 0) { -- char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", -- "16", "facebook.png", NULL); -- GtkWidget *item; -- -- pixbuf = pidgin_pixbuf_new_from_file(filename); -- g_free(filename); -- -- gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), -- item = aop_menu_item_new(sg, pixbuf, facebook_name, "prpl-jabber", "protocol")); -- g_object_set_data(G_OBJECT(item), "fakefacebook", GINT_TO_POINTER(1)); -- -- if (pixbuf) -- g_object_unref(pixbuf); -- -- facebook_name = NULL; -- i++; -- } -- - pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL); - - gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), -diff -Nur pidgin-2.10.7/pidgin/gtkwhiteboard.c pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.c ---- pidgin-2.10.7/pidgin/gtkwhiteboard.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.c 2013-08-16 23:25:21.614375960 -0300 -@@ -339,13 +339,10 @@ - */ - /* XXXX because otherwise gettext will see this string, even though it's - * in an #if 0 block. Remove the XXXX if you want to use this code. -- * But, it really shouldn't be a Yahoo-specific string. ;) */ -+ */ - purple_conv_im_write(PURPLE_CONV_IM(conv), "", XXXX_("Sent Doodle request."), - PURPLE_MESSAGE_NICK | PURPLE_MESSAGE_RECV, time(NULL)); - -- yahoo_doodle_command_send_request(gc, to); -- yahoo_doodle_command_send_ready(gc, to); -- - /* Insert this 'session' in the list. At this point, it's only a requested - * session. - */ -@@ -554,15 +551,13 @@ - if(event->button == 1 && pixmap != NULL) - { - /* If the brush was never moved, express two sets of two deltas That's a -- * 'point,' but not for Yahoo! -+ * 'point,' - */ - /* if((event->x == LastX) && (event->y == LastY)) */ - if(MotionCount == 0) - { - int index; - -- /* For Yahoo!, a (0 0) indicates the end of drawing */ -- /* FIXME: Yahoo Doodle specific! */ - for(index = 0; index < 2; index++) - { - draw_list = g_list_append(draw_list, 0); -diff -Nur pidgin-2.10.7/pidgin/gtkwhiteboard.h pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.h ---- pidgin-2.10.7/pidgin/gtkwhiteboard.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.h 2013-08-27 23:28:41.018759351 -0300 -@@ -37,8 +37,7 @@ - #define BRUSH_STATE_DOWN 1 - #define BRUSH_STATE_MOTION 2 - --/* XXX: This seems duplicated with the Yahoo! Doodle prpl code. -- * XXX: How should they work together? */ -+/* XXX: How should they work together? */ - #define PALETTE_NUM_COLORS 7 - - /** -diff -Nur pidgin-2.10.7/pidgin/Makefile.am pidgin-2.10.7-nonprism/pidgin/Makefile.am ---- pidgin-2.10.7/pidgin/Makefile.am 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/Makefile.am 2013-08-16 21:03:34.936610745 -0300 -@@ -160,10 +160,6 @@ - $(GTK_LIBS) \ - $(top_builddir)/libpurple/libpurple.la - --if USE_INTERNAL_LIBGADU --INTGG_CFLAGS = -DUSE_INTERNAL_LIBGADU --endif -- - AM_CPPFLAGS = \ - -DDATADIR=\"$(datadir)\" \ - -DLIBDIR=\"$(libdir)/pidgin/\" \ -@@ -179,6 +175,5 @@ - $(GTK_CFLAGS) \ - $(DBUS_CFLAGS) \ - $(GTKSPELL_CFLAGS) \ -- $(LIBXML_CFLAGS) \ -- $(INTGG_CFLAGS) -+ $(LIBXML_CFLAGS) - endif # ENABLE_GTK -diff -Nur pidgin-2.10.7/pidgin/Makefile.in pidgin-2.10.7-nonprism/pidgin/Makefile.in ---- pidgin-2.10.7/pidgin/Makefile.in 2013-02-11 07:17:23.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/Makefile.in 2013-08-16 23:56:44.729405978 -0300 -@@ -286,8 +286,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -349,8 +347,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -645,7 +641,6 @@ - @ENABLE_GTK_TRUE@ $(GTK_LIBS) \ - @ENABLE_GTK_TRUE@ $(top_builddir)/libpurple/libpurple.la - --@ENABLE_GTK_TRUE@@USE_INTERNAL_LIBGADU_TRUE@INTGG_CFLAGS = -DUSE_INTERNAL_LIBGADU - @ENABLE_GTK_TRUE@AM_CPPFLAGS = \ - @ENABLE_GTK_TRUE@ -DDATADIR=\"$(datadir)\" \ - @ENABLE_GTK_TRUE@ -DLIBDIR=\"$(libdir)/pidgin/\" \ -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/default.theme.in pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/default.theme.in ---- pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/default.theme.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/default.theme.in 2013-08-16 23:13:41.759061988 -0300 -@@ -28,8 +28,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -47,7 +46,7 @@ - foot-in-mouth.png :-! - shout.png >:o >:O - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - good.png :yes: - bad.png :no: -@@ -75,515 +74,3 @@ - ! skywalker.png C:-) c:-) C:) c:) - ! monkey.png :-(|) :(|) 8-|) - ! cyclops.png O-) o-) -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --shout.png >:o --excited.png :-D :D --moneymouth.png :-$ --foot-in-mouth.png :-! --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --love-over.png (U) (u) --msn.png (M) (m) --cat.png (@) --dog.png (&) --moon.png (S) --star.png (*) --film.png (~) --musical-note.png (8) --mail.png (E) (e) --rose.png (F) (f) --rose-dead.png (W) (w) --clock.png (O) (o) --kiss.png (K) (k) --present.png (G) (g) --cake.png (^) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --drink.png (D) (d) --boy.png (Z) (z) --girl.png (X) (x) --good.png (Y) (y) --bad.png (N) (n) --vampire.png :[ :-[ --goat.png (nah) --sun.png (#) --rainbow.png (R) (r) --quiet.png :-# --teeth.png 8o| --glasses-nerdy.png 8-| --sarcastic.png ^o) --secret.png :-* --sick.png +o( --snail.png (sn) --turtle.png (tu) --plate.png (pl) --bowl.png (||) --pizza.png (pi) --soccerball.png (so) --car.png (au) --airplane.png (ap) --umbrella.png (um) --island.png (ip) --computer.png (co) --mobile.png (mp) --brb.png (brb) --rain.png (st) --highfive.png (h5) --coins.png (mo) --sheep.png (bah) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) --bunny.png ('.') --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --handcuffs.png (%) --console.png (xx) (XX) --fingers-crossed.png (yn) (YN) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --curl-lip.png /:~ /pz /curl_lip --desire.png /:* /se /desire --dazed.png /:| /dazed --party.png /8-) /dy /revel --crying.png /:< /ll /cry --bashful.png /:$ /hx /bashful --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --weep.png /:'( /dk /weep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --act-up.png /:P /tp /act_up --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --doctor.png /:# /feid /SARS --silly.png /:Q /zk /crazy --sick.png /:T /tu /vomit --snicker.png /;p /tx /titter --cute.png /;-D /ka /cute --disdain.png /;d /by /disdain --arrogant.png /;o /am /arrogant --starving.png /:g /jie /starving --sleepy.png /|-) /kun /sleepy --terror.png /:! /jk /terror --hot.png /:L /sweat --smirk.png /:> /hanx /smirk --soldier.png /:; /db /soldier --struggle.png /;f /fendou /struggle --curse.png /:-S /zhm /curse --question.png /? /yiw /question --quiet.png /;x /xu /shh --hypnotized.png /;@ /yun /dizzy --excruciating.png /:8 /zhem /excrutiating --freaked-out.png /;! /shuai /freaked_out --skeleton.png /!!! /kl /skeleton --hammer.png /xx /qiao /hammer --bye.png /bye /zj /bye --go-away.png /go /shan /go --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --jump.png /jump /tiao /jump --search.png /find /zhao /search --lashes.png /& /mm /beautiful_eyebrows --pig.png /pig /zt /pig --cat.png /cat /mm /cat --dog.png /dog /xg /dog --hug-left.png /hug /yb /hug --coins.png /$ /qianc /money --lamp.png /! /dp /lightbulb --bowl.png /cup /bei /cup --cake.png /cake /dg /cake --thunder.png /li /shd /lightning --bomb.png /bome /zhd /bomb --knife.png /kn /dao /knife --soccerball.png /footb /zq /soccer --musical-note.png /music /yy /music --poop.png /shit /bb /shit --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --pill.png /pill /yw /pill --rose.png /rose /mg /rose --wilt.png /fade /dx /wilt --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --love-over.png /break /xs /broken_heart --meeting.png /meeting /hy /meeting --present.png /gift /lw /gift --phone.png /phone /dh /phone --clock.png /time /sj /time --mail.png /email /yj /email --tv.png /TV /ds /TV --sun.png /sun /ty /sun --moon.png /moon /yl /moon --good.png /strong /qiang /thumbs_up --bad.png /weak /ruo /thumbs_down --handshake.png /share /ws /handshake --victory.png /v /shl /victory --beauty.png /<J> /mn /beauty --qq.png /<QQ> /qz /qq --blowkiss.png /<L> /fw /blow_kiss --angry.png /<O> /oh /angry --liquor.png /<B> /bj /baijiu --can.png /<U> /qsh /soda --watermelon.png /<W> /xigua /watermelon --rain.png /<!!> /xy /rain --cloudy.png /<~> /duoy /cloudy --snowman.png /<Z> /xr /snowman --star.png /<*> /xixing /star --girl.png /<00> /nv /woman --boy.png /<11> /nan /man --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --laugh.png *JOKINGLY* --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kissed.png *KISSED* --stop.png *STOP* --kiss.png :-{} :-* --kissing.png *KISSING* --victory.png *YAHOO* --silly.png %) --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --bomb.png @= --thinking.png :-\\ :-/ --good.png *THUMBS\ UP* --shout.png >:o >:O :-@ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --glasses-nerdy.png B) --bulgy-eyes.png %) --freaked-out.png :E --happy.png :) :-) --amorous.png :X --laugh.png :)) --mohawk.png -: --mad-tongue.png X( --messed.png X) --glasses-nerdy.png Q) --doh.png :G --pirate.png P) --shocked.png :O --sidefrown.png :{ --sinister.png :B --smirk.png :, --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/theme pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/theme ---- pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/theme 2013-02-11 07:17:58.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/theme 2013-08-16 23:15:55.929941297 -0300 -@@ -28,8 +28,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -47,7 +46,7 @@ - foot-in-mouth.png :-! - shout.png >:o >:O - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - good.png :yes: - bad.png :no: -@@ -75,515 +74,3 @@ - ! skywalker.png C:-) c:-) C:) c:) - ! monkey.png :-(|) :(|) 8-|) - ! cyclops.png O-) o-) -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --shout.png >:o --excited.png :-D :D --moneymouth.png :-$ --foot-in-mouth.png :-! --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --love-over.png (U) (u) --msn.png (M) (m) --cat.png (@) --dog.png (&) --moon.png (S) --star.png (*) --film.png (~) --musical-note.png (8) --mail.png (E) (e) --rose.png (F) (f) --rose-dead.png (W) (w) --clock.png (O) (o) --kiss.png (K) (k) --present.png (G) (g) --cake.png (^) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --drink.png (D) (d) --boy.png (Z) (z) --girl.png (X) (x) --good.png (Y) (y) --bad.png (N) (n) --vampire.png :[ :-[ --goat.png (nah) --sun.png (#) --rainbow.png (R) (r) --quiet.png :-# --teeth.png 8o| --glasses-nerdy.png 8-| --sarcastic.png ^o) --secret.png :-* --sick.png +o( --snail.png (sn) --turtle.png (tu) --plate.png (pl) --bowl.png (||) --pizza.png (pi) --soccerball.png (so) --car.png (au) --airplane.png (ap) --umbrella.png (um) --island.png (ip) --computer.png (co) --mobile.png (mp) --brb.png (brb) --rain.png (st) --highfive.png (h5) --coins.png (mo) --sheep.png (bah) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) --bunny.png ('.') --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --handcuffs.png (%) --console.png (xx) (XX) --fingers-crossed.png (yn) (YN) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --curl-lip.png /:~ /pz /curl_lip --desire.png /:* /se /desire --dazed.png /:| /dazed --party.png /8-) /dy /revel --crying.png /:< /ll /cry --bashful.png /:$ /hx /bashful --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --weep.png /:'( /dk /weep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --act-up.png /:P /tp /act_up --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --doctor.png /:# /feid /SARS --silly.png /:Q /zk /crazy --sick.png /:T /tu /vomit --snicker.png /;p /tx /titter --cute.png /;-D /ka /cute --disdain.png /;d /by /disdain --arrogant.png /;o /am /arrogant --starving.png /:g /jie /starving --sleepy.png /|-) /kun /sleepy --terror.png /:! /jk /terror --hot.png /:L /sweat --smirk.png /:> /hanx /smirk --soldier.png /:; /db /soldier --struggle.png /;f /fendou /struggle --curse.png /:-S /zhm /curse --question.png /? /yiw /question --quiet.png /;x /xu /shh --hypnotized.png /;@ /yun /dizzy --excruciating.png /:8 /zhem /excrutiating --freaked-out.png /;! /shuai /freaked_out --skeleton.png /!!! /kl /skeleton --hammer.png /xx /qiao /hammer --bye.png /bye /zj /bye --go-away.png /go /shan /go --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --jump.png /jump /tiao /jump --search.png /find /zhao /search --lashes.png /& /mm /beautiful_eyebrows --pig.png /pig /zt /pig --cat.png /cat /mm /cat --dog.png /dog /xg /dog --hug-left.png /hug /yb /hug --coins.png /$ /qianc /money --lamp.png /! /dp /lightbulb --bowl.png /cup /bei /cup --cake.png /cake /dg /cake --thunder.png /li /shd /lightning --bomb.png /bome /zhd /bomb --knife.png /kn /dao /knife --soccerball.png /footb /zq /soccer --musical-note.png /music /yy /music --poop.png /shit /bb /shit --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --pill.png /pill /yw /pill --rose.png /rose /mg /rose --wilt.png /fade /dx /wilt --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --love-over.png /break /xs /broken_heart --meeting.png /meeting /hy /meeting --present.png /gift /lw /gift --phone.png /phone /dh /phone --clock.png /time /sj /time --mail.png /email /yj /email --tv.png /TV /ds /TV --sun.png /sun /ty /sun --moon.png /moon /yl /moon --good.png /strong /qiang /thumbs_up --bad.png /weak /ruo /thumbs_down --handshake.png /share /ws /handshake --victory.png /v /shl /victory --beauty.png /<J> /mn /beauty --qq.png /<QQ> /qz /qq --blowkiss.png /<L> /fw /blow_kiss --angry.png /<O> /oh /angry --liquor.png /<B> /bj /baijiu --can.png /<U> /qsh /soda --watermelon.png /<W> /xigua /watermelon --rain.png /<!!> /xy /rain --cloudy.png /<~> /duoy /cloudy --snowman.png /<Z> /xr /snowman --star.png /<*> /xixing /star --girl.png /<00> /nv /woman --boy.png /<11> /nan /man --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --laugh.png *JOKINGLY* --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kissed.png *KISSED* --stop.png *STOP* --kiss.png :-{} :-* --kissing.png *KISSING* --victory.png *YAHOO* --silly.png %) --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --bomb.png @= --thinking.png :-\\ :-/ --good.png *THUMBS\ UP* --shout.png >:o >:O :-@ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --glasses-nerdy.png B) --bulgy-eyes.png %) --freaked-out.png :E --happy.png :) :-) --amorous.png :X --laugh.png :)) --mohawk.png -: --mad-tongue.png X( --messed.png X) --glasses-nerdy.png Q) --doh.png :G --pirate.png P) --shocked.png :O --sidefrown.png :{ --sinister.png :B --smirk.png :, --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/small.theme.in pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/small.theme.in ---- pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/small.theme.in 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/small.theme.in 2013-08-16 23:19:01.815778718 -0300 -@@ -22,8 +22,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -38,7 +37,7 @@ - angel.png O:-) o:-) - shut-mouth.png :-X - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - rose.png @->-- :rose: - phone.png :telephone: -@@ -53,269 +52,3 @@ - neutral.png :| :-| - - # Hidden icons from the default set. -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --excited.png :-D :D --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --star.png (*) --musical-note.png (8) --rose.png (F) (f) --kiss.png (K) (k) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --boy.png (Z) (z) --girl.png (X) (x) --sarcastic.png ^o) --sick.png +o( --plate.png (pl) --mobile.png (mp) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --console.png (xx) (XX) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --party.png /8-) /dy /revel --crying.png /:< /ll /cry --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --sick.png /:T /tu /vomit --sleepy.png /|-) /kun /sleepy --hot.png /:L /sweat --question.png /? /yiw /question --excruciating.png /:8 /zhem /excrutiating --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --search.png /find /zhao /search --hug-left.png /hug /yb /hug --lamp.png /! /dp /lightbulb --thunder.png /li /shd /lightning --musical-note.png /music /yy /music --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --rose.png /rose /mg /rose --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --meeting.png /meeting /hy /meeting --phone.png /phone /dh /phone --tv.png /TV /ds /TV --angry.png /<O> /oh /angry --girl.png /<00> /nv /woman --boy.png /<11> /nan /man -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kiss.png :-{} :-* --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --thinking.png :-\\ :-/ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --drool.png =P~ =p~ --lying.png :^O :^o --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --hot.png #:-S #:-s --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --wink.png ;) ;-) --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --party.png <:-P <:-p -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --happy.png :) :-) --amorous.png :X --pirate.png P) --shocked.png :O --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/theme pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/theme ---- pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/theme 2013-02-11 07:17:58.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/theme 2013-08-16 23:17:03.828740061 -0300 -@@ -22,8 +22,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -38,7 +37,7 @@ - angel.png O:-) o:-) - shut-mouth.png :-X - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - rose.png @->-- :rose: - phone.png :telephone: -@@ -53,269 +52,3 @@ - neutral.png :| :-| - - # Hidden icons from the default set. -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --excited.png :-D :D --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --star.png (*) --musical-note.png (8) --rose.png (F) (f) --kiss.png (K) (k) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --boy.png (Z) (z) --girl.png (X) (x) --sarcastic.png ^o) --sick.png +o( --plate.png (pl) --mobile.png (mp) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --console.png (xx) (XX) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --party.png /8-) /dy /revel --crying.png /:< /ll /cry --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --sick.png /:T /tu /vomit --sleepy.png /|-) /kun /sleepy --hot.png /:L /sweat --question.png /? /yiw /question --excruciating.png /:8 /zhem /excrutiating --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --search.png /find /zhao /search --hug-left.png /hug /yb /hug --lamp.png /! /dp /lightbulb --thunder.png /li /shd /lightning --musical-note.png /music /yy /music --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --rose.png /rose /mg /rose --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --meeting.png /meeting /hy /meeting --phone.png /phone /dh /phone --tv.png /TV /ds /TV --angry.png /<O> /oh /angry --girl.png /<00> /nv /woman --boy.png /<11> /nan /man -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kiss.png :-{} :-* --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --thinking.png :-\\ :-/ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --drool.png =P~ =p~ --lying.png :^O :^o --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --hot.png #:-S #:-s --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --wink.png ;) ;-) --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --party.png <:-P <:-p -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --happy.png :) :-) --amorous.png :X --pirate.png P) --shocked.png :O --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/Makefile.am pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.am ---- pidgin-2.10.7/pidgin/pixmaps/Makefile.am 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.am 2013-08-17 00:00:17.335924146 -0300 -@@ -204,37 +204,19 @@ - emotes/small/16/scalable/pidgin-emotes.svg - - PROTOCOLS_16_SCALABLE = \ -- protocols/16/scalable/aim.svg \ - protocols/16/scalable/bonjour.svg \ -- protocols/16/scalable/gadu-gadu.svg \ -- protocols/16/scalable/novell.svg \ -- protocols/16/scalable/icq.svg \ - protocols/16/scalable/irc.svg \ - protocols/16/scalable/jabber.svg \ -- protocols/16/scalable/meanwhile.svg \ -- protocols/16/scalable/msn.svg \ - protocols/16/scalable/silc.svg \ - protocols/16/scalable/simple.svg \ -- protocols/16/scalable/yahoo.svg \ - protocols/16/scalable/zephyr.svg - - PROTOCOLS_16 = \ -- protocols/16/aim.png \ - protocols/16/bonjour.png \ -- protocols/16/facebook.png \ -- protocols/16/gadu-gadu.png \ -- protocols/16/google-talk.png \ -- protocols/16/novell.png \ -- protocols/16/icq.png \ - protocols/16/irc.png \ - protocols/16/jabber.png \ -- protocols/16/meanwhile.png \ -- protocols/16/msn.png \ -- protocols/16/mxit.png \ -- protocols/16/myspace.png \ - protocols/16/silc.png \ - protocols/16/simple.png \ -- protocols/16/yahoo.png \ - protocols/16/zephyr.png - - ICONS_16_SCALABLE = \ -@@ -259,72 +241,35 @@ - ICONS_SCALABLE = icons/hicolor/scalable/apps/pidgin.svg - - PROTOCOLS_22_SCALABLE = \ -- protocols/22/scalable/aim.svg \ - protocols/22/scalable/bonjour.svg \ -- protocols/22/scalable/gadu-gadu.svg \ -- protocols/22/scalable/novell.svg \ -- protocols/22/scalable/icq.svg \ - protocols/22/scalable/irc.svg \ - protocols/22/scalable/jabber.svg \ -- protocols/22/scalable/meanwhile.svg \ -- protocols/22/scalable/msn.svg \ - protocols/22/scalable/silc.svg \ - protocols/22/scalable/simple.svg \ -- protocols/22/scalable/yahoo.svg \ - protocols/22/scalable/zephyr.svg - - PROTOCOLS_22 = \ -- protocols/22/aim.png \ - protocols/22/bonjour.png \ -- protocols/22/facebook.png \ -- protocols/22/gadu-gadu.png \ -- protocols/22/google-talk.png \ -- protocols/22/novell.png \ -- protocols/22/icq.png \ - protocols/22/irc.png \ - protocols/22/jabber.png \ -- protocols/22/meanwhile.png \ -- protocols/22/msn.png \ -- protocols/22/mxit.png \ -- protocols/22/myspace.png \ - protocols/22/silc.png \ - protocols/22/simple.png \ -- protocols/22/yahoo.png \ - protocols/22/zephyr.png - - PROTOCOLS_48 = \ -- protocols/48/aim.png \ - protocols/48/bonjour.png \ -- protocols/48/facebook.png \ -- protocols/48/gadu-gadu.png \ -- protocols/48/novell.png \ -- protocols/48/icq.png \ - protocols/48/irc.png \ - protocols/48/jabber.png \ -- protocols/48/meanwhile.png \ -- protocols/48/msn.png \ -- protocols/48/mxit.png \ -- protocols/48/myspace.png \ - protocols/48/silc.png \ - protocols/48/simple.png \ -- protocols/48/yahoo.png \ - protocols/48/zephyr.png - - PROTOCOLS_SCALABLE = \ -- protocols/scalable/aim.svg \ - protocols/scalable/bonjour.svg \ -- protocols/scalable/gadu-gadu.svg \ -- protocols/scalable/google-talk.svg \ -- protocols/scalable/novell.svg \ -- protocols/scalable/icq.svg \ - protocols/scalable/irc.svg \ - protocols/scalable/jabber.svg \ -- protocols/scalable/meanwhile.svg \ -- protocols/scalable/msn.svg \ -- protocols/scalable/mxit.svg \ - protocols/scalable/silc.svg \ - protocols/scalable/simple.svg \ -- protocols/scalable/yahoo.svg \ - protocols/scalable/zephyr.svg - - STATUS_11 = \ -diff -Nur pidgin-2.10.7/pidgin/pixmaps/Makefile.in pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.in ---- pidgin-2.10.7/pidgin/pixmaps/Makefile.in 2013-02-11 07:17:23.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.in 2013-08-16 23:59:52.918508551 -0300 -@@ -240,40 +240,19 @@ - emblems/scalable/male.svg emblems/scalable/not-authorized.svg \ - emblems/scalable/secure.svg emblems/scalable/unavailable.svg \ - emblems/scalable/video.svg emblems/scalable/voice.svg \ -- protocols/16/aim.png protocols/16/bonjour.png \ -- protocols/16/facebook.png protocols/16/gadu-gadu.png \ -- protocols/16/google-talk.png protocols/16/novell.png \ -- protocols/16/icq.png protocols/16/irc.png \ -- protocols/16/jabber.png protocols/16/meanwhile.png \ -- protocols/16/msn.png protocols/16/mxit.png \ -- protocols/16/myspace.png protocols/16/silc.png \ -- protocols/16/simple.png protocols/16/yahoo.png \ -- protocols/16/zephyr.png protocols/22/aim.png \ -- protocols/22/bonjour.png protocols/22/facebook.png \ -- protocols/22/gadu-gadu.png protocols/22/google-talk.png \ -- protocols/22/novell.png protocols/22/icq.png \ -- protocols/22/irc.png protocols/22/jabber.png \ -- protocols/22/meanwhile.png protocols/22/msn.png \ -- protocols/22/mxit.png protocols/22/myspace.png \ -- protocols/22/silc.png protocols/22/simple.png \ -- protocols/22/yahoo.png protocols/22/zephyr.png \ -- protocols/48/aim.png protocols/48/bonjour.png \ -- protocols/48/facebook.png protocols/48/gadu-gadu.png \ -- protocols/48/novell.png protocols/48/icq.png \ -- protocols/48/irc.png protocols/48/jabber.png \ -- protocols/48/meanwhile.png protocols/48/msn.png \ -- protocols/48/mxit.png protocols/48/myspace.png \ -- protocols/48/silc.png protocols/48/simple.png \ -- protocols/48/yahoo.png protocols/48/zephyr.png \ -- protocols/scalable/aim.svg protocols/scalable/bonjour.svg \ -- protocols/scalable/gadu-gadu.svg \ -- protocols/scalable/google-talk.svg \ -- protocols/scalable/novell.svg protocols/scalable/icq.svg \ -- protocols/scalable/irc.svg protocols/scalable/jabber.svg \ -- protocols/scalable/meanwhile.svg protocols/scalable/msn.svg \ -- protocols/scalable/mxit.svg protocols/scalable/silc.svg \ -- protocols/scalable/simple.svg protocols/scalable/yahoo.svg \ -- protocols/scalable/zephyr.svg status/11/available.png \ -+ protocols/16/bonjour.png protocols/16/irc.png \ -+ protocols/16/jabber.png protocols/16/silc.png \ -+ protocols/16/simple.png protocols/16/zephyr.png \ -+ protocols/22/bonjour.png protocols/22/irc.png \ -+ protocols/22/jabber.png protocols/22/silc.png \ -+ protocols/22/simple.png protocols/22/zephyr.png \ -+ protocols/48/bonjour.png protocols/48/irc.png \ -+ protocols/48/jabber.png protocols/48/silc.png \ -+ protocols/48/simple.png protocols/48/zephyr.png \ -+ protocols/scalable/bonjour.svg protocols/scalable/irc.svg \ -+ protocols/scalable/jabber.svg protocols/scalable/silc.svg \ -+ protocols/scalable/simple.svg protocols/scalable/zephyr.svg \ -+ status/11/available.png \ - status/11/away.png status/11/busy.png status/11/chat.png \ - status/11/extended-away.png status/11/invisible.png \ - status/11/log-in.png status/11/log-out.png \ -@@ -443,8 +422,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -506,8 +483,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -850,37 +825,19 @@ - @INSTALL_PIXMAPS_TRUE@ emotes/small/16/scalable/pidgin-emotes.svg - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_16_SCALABLE = \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/aim.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/bonjour.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/gadu-gadu.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/novell.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/icq.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/irc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/jabber.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/meanwhile.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/msn.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/silc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/simple.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/yahoo.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/zephyr.svg - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_16 = \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/aim.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/bonjour.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/facebook.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/gadu-gadu.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/google-talk.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/novell.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/icq.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/irc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/jabber.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/meanwhile.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/msn.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/mxit.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/myspace.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/silc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/simple.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/yahoo.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/zephyr.png - - @INSTALL_PIXMAPS_TRUE@ICONS_16_SCALABLE = \ -@@ -899,72 +856,35 @@ - @INSTALL_PIXMAPS_TRUE@ICONS_48 = icons/hicolor/48x48/apps/pidgin.png - @INSTALL_PIXMAPS_TRUE@ICONS_SCALABLE = icons/hicolor/scalable/apps/pidgin.svg - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_22_SCALABLE = \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/aim.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/bonjour.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/gadu-gadu.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/novell.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/icq.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/irc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/jabber.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/meanwhile.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/msn.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/silc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/simple.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/yahoo.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/zephyr.svg - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_22 = \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/aim.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/bonjour.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/facebook.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/gadu-gadu.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/google-talk.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/novell.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/icq.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/irc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/jabber.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/meanwhile.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/msn.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/mxit.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/myspace.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/silc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/simple.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/yahoo.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/zephyr.png - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_48 = \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/aim.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/bonjour.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/facebook.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/gadu-gadu.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/novell.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/icq.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/irc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/jabber.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/meanwhile.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/msn.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/mxit.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/myspace.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/silc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/simple.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/yahoo.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/zephyr.png - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_SCALABLE = \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/aim.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/bonjour.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/gadu-gadu.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/google-talk.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/novell.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/icq.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/irc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/jabber.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/meanwhile.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/msn.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/mxit.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/silc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/simple.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/yahoo.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/zephyr.svg - - @INSTALL_PIXMAPS_TRUE@STATUS_11 = \ -diff -Nur pidgin-2.10.7/pidgin/plugins/disco/xmppdisco.c pidgin-2.10.7-nonprism/pidgin/plugins/disco/xmppdisco.c ---- pidgin-2.10.7/pidgin/plugins/disco/xmppdisco.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/disco/xmppdisco.c 2013-08-16 23:39:46.921427463 -0300 -@@ -250,9 +250,6 @@ - const char *from; - const char *to; - } disco_type_mappings[] = { -- { "gadu-gadu", "gadu-gadu" }, /* the prpl is prpl-gg, but list_icon returns "gadu-gadu" */ -- { "sametime", "meanwhile" }, -- { "myspaceim", "myspace" }, - { "xmpp", "jabber" }, /* prpl-jabber (mentioned in case the prpl is renamed so this line will match) */ - { NULL, NULL } - }; -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/add_buddy_dialog.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/add_buddy_dialog.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/add_buddy_dialog.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/add_buddy_dialog.c 2013-08-16 21:26:56.293625899 -0300 -@@ -288,21 +288,13 @@ - { - EContact *contact = E_CONTACT(c->data); - const char *name; -- GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells, *ggs; -+ GList *jabbers; - - name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); - -- aims = e_contact_get(contact, E_CONTACT_IM_AIM); - jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER); -- yahoos = e_contact_get(contact, E_CONTACT_IM_YAHOO); -- msns = e_contact_get(contact, E_CONTACT_IM_MSN); -- icqs = e_contact_get(contact, E_CONTACT_IM_ICQ); -- novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE); -- ggs = e_contact_get(contact, E_CONTACT_IM_GADUGADU); -- -- if (aims == NULL && jabbers == NULL && yahoos == NULL && -- msns == NULL && icqs == NULL && novells == NULL && -- ggs == NULL) -+ -+ if (jabbers == NULL) - { - GtkTreeIter iter; - -@@ -315,13 +307,7 @@ - } - else - { -- add_ims(dialog, contact, name, aims, "prpl-aim"); - add_ims(dialog, contact, name, jabbers, "prpl-jabber"); -- add_ims(dialog, contact, name, yahoos, "prpl-yahoo"); -- add_ims(dialog, contact, name, msns, "prpl-msn"); -- add_ims(dialog, contact, name, icqs, "prpl-icq"); -- add_ims(dialog, contact, name, novells, "prpl-novell"); -- add_ims(dialog, contact, name, ggs, "prpl-gg"); - } - } - -@@ -367,7 +353,7 @@ - { - EContact *contact = E_CONTACT(l->data); - const char *name; -- GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells, *ggs; -+ GList *jabbers; - - name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); - -@@ -377,17 +363,9 @@ - continue; - } - -- aims = e_contact_get(contact, E_CONTACT_IM_AIM); - jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER); -- yahoos = e_contact_get(contact, E_CONTACT_IM_YAHOO); -- msns = e_contact_get(contact, E_CONTACT_IM_MSN); -- icqs = e_contact_get(contact, E_CONTACT_IM_ICQ); -- novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE); -- ggs = e_contact_get(contact, E_CONTACT_IM_GADUGADU); -- -- if (aims == NULL && jabbers == NULL && yahoos == NULL && -- msns == NULL && icqs == NULL && novells == NULL && -- ggs == NULL) -+ -+ if (jabbers == NULL) - { - GtkTreeIter iter; - -@@ -400,13 +378,7 @@ - } - else - { -- add_ims(dialog, contact, name, aims, "prpl-aim"); - add_ims(dialog, contact, name, jabbers, "prpl-jabber"); -- add_ims(dialog, contact, name, yahoos, "prpl-yahoo"); -- add_ims(dialog, contact, name, msns, "prpl-msn"); -- add_ims(dialog, contact, name, icqs, "prpl-icq"); -- add_ims(dialog, contact, name, novells, "prpl-novell"); -- add_ims(dialog, contact, name, ggs, "prpl-gg"); - } - } - } -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/gevolution.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevolution.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/gevolution.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevolution.c 2013-08-16 21:14:05.483056049 -0300 -@@ -119,13 +119,7 @@ - - name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); - -- update_ims_from_contact(contact, name, "prpl-aim", E_CONTACT_IM_AIM); - update_ims_from_contact(contact, name, "prpl-jabber", E_CONTACT_IM_JABBER); -- update_ims_from_contact(contact, name, "prpl-yahoo", E_CONTACT_IM_YAHOO); -- update_ims_from_contact(contact, name, "prpl-msn", E_CONTACT_IM_MSN); -- update_ims_from_contact(contact, name, "prpl-icq", E_CONTACT_IM_ICQ); -- update_ims_from_contact(contact, name, "prpl-novell", E_CONTACT_IM_GROUPWISE); -- update_ims_from_contact(contact, name, "prpl-gg", E_CONTACT_IM_GADUGADU); - } - - static void -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/gevo-util.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevo-util.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/gevo-util.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevo-util.c 2013-08-16 23:20:45.692374640 -0300 -@@ -99,20 +99,8 @@ - - protocol_id = purple_account_get_protocol_id(account); - -- if (!strcmp(protocol_id, "prpl-aim")) -- protocol_field = E_CONTACT_IM_AIM; -- else if (!strcmp(protocol_id, "prpl-icq")) -- protocol_field = E_CONTACT_IM_ICQ; -- else if (!strcmp(protocol_id, "prpl-msn")) -- protocol_field = E_CONTACT_IM_MSN; -- else if (!strcmp(protocol_id, "prpl-yahoo")) -- protocol_field = E_CONTACT_IM_YAHOO; -- else if (!strcmp(protocol_id, "prpl-jabber")) -+ if (!strcmp(protocol_id, "prpl-jabber")) - protocol_field = E_CONTACT_IM_JABBER; -- else if (!strcmp(protocol_id, "prpl-novell")) -- protocol_field = E_CONTACT_IM_GROUPWISE; -- else if (!strcmp(protocol_id, "prpl-gg")) -- protocol_field = E_CONTACT_IM_GADUGADU; - - return protocol_field; - } -@@ -169,18 +157,6 @@ - { - PurpleAccount *account = purple_buddy_get_account(buddy); - const char *prpl_id = purple_account_get_protocol_id(account); -- -- if (!strcmp(prpl_id, "prpl-msn")) -- { -- mail = g_strdup(purple_normalize(account, -- purple_buddy_get_name(buddy))); -- } -- else if (!strcmp(prpl_id, "prpl-yahoo")) -- { -- mail = g_strdup_printf("%s@yahoo.com", -- purple_normalize(account, -- purple_buddy_get_name(buddy))); -- } - } - - return mail; -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/new_person_dialog.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/new_person_dialog.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/new_person_dialog.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/new_person_dialog.c 2013-08-16 21:23:26.207116339 -0300 -@@ -141,20 +141,8 @@ - if (*email) - e_contact_set(contact, E_CONTACT_EMAIL_1, (gpointer)email); - -- if (!strcmp(im_service, "prpl-aim")) -- field = E_CONTACT_IM_AIM; -- else if (!strcmp(im_service, "prpl-icq")) -- field = E_CONTACT_IM_ICQ; -- else if (!strcmp(im_service, "prpl-yahoo")) -- field = E_CONTACT_IM_YAHOO; -- else if (!strcmp(im_service, "prpl-jabber")) -+ if (!strcmp(im_service, "prpl-jabber")) - field = E_CONTACT_IM_JABBER; -- else if (!strcmp(im_service, "prpl-msn")) -- field = E_CONTACT_IM_MSN; -- else if (!strcmp(im_service, "prpl-novell")) -- field = E_CONTACT_IM_GROUPWISE; -- else if (!strcmp(im_service, "prpl-gg")) -- field = E_CONTACT_IM_GADUGADU; - - if (field > 0) - { -diff -Nur pidgin-2.10.7/pidgin.apspec.in pidgin-2.10.7-nonprism/pidgin.apspec.in ---- pidgin-2.10.7/pidgin.apspec.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.apspec.in 2013-08-16 20:53:14.523862926 -0300 -@@ -14,17 +14,13 @@ - - [Description] - Pidgin allows you to talk to anyone using a variety of messaging protocols, --including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, XMPP, --Gadu-Gadu, and Zephyr. These protocols are implemented using a -+including IRC, XMPP and Zephyr. These protocols are implemented using a - modular, easy to use design. To use a protocol, just add an account using the - account editor. - - Pidgin supports many common features of other clients, as well as many unique - features, such as perl scripting, TCL scripting and C plugins. - --Pidgin is NOT affiliated with or endorsed by America Online, Inc., Microsoft --Corporation, Yahoo! Inc., or ICQ Inc. -- - [BuildPrepare] - APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-gtktest --disable-glibtest --disable-vv --disable-fortify - #APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-vv -diff -Nur pidgin-2.10.7/pidgin.desktop.in pidgin-2.10.7-nonprism/pidgin.desktop.in ---- pidgin-2.10.7/pidgin.desktop.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.desktop.in 2013-08-16 23:07:34.874212867 -0300 -@@ -1,7 +1,7 @@ - [Desktop Entry] - _Name=Pidgin Internet Messenger - _GenericName=Internet Messenger --_Comment=Chat over IM. Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more -+_Comment=Chat over IM. Supports IRC, Jabber/XMPP and more - Exec=pidgin - Icon=pidgin - StartupNotify=true -diff -Nur pidgin-2.10.7/pidgin.spec pidgin-2.10.7-nonprism/pidgin.spec ---- pidgin-2.10.7/pidgin.spec 2013-02-11 07:17:59.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.spec 2013-08-17 00:03:18.474815955 -0300 -@@ -34,7 +34,6 @@ - %{!?_without_startupnotification:BuildRequires: startup-notification-devel} - %{?_with_avahi:BuildRequires: avahi-glib-devel} - %{!?_without_gtkspell:BuildRequires: gtkspell-devel} --%{?_with_meanwhile:BuildRequires: meanwhile-devel} - %{?_with_mono:BuildRequires: mono-devel} - %{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2} - %{!?_without_silc:BuildRequires: /usr/include/silc/silcclient.h} -@@ -105,7 +104,6 @@ - Group: Applications/Internet - Obsoletes: gaim-silc - Obsoletes: gaim-tcl --Obsoletes: gaim-gadugadu - Obsoletes: pidgin-tcl < 2.0.0 - Obsoletes: pidgin-silc < 2.0.0 - Obsoletes: libpurple-perl < %{version} -@@ -131,13 +129,6 @@ - Requires: libpurple >= %{apiver} - %endif - --%if 0%{?_with_meanwhile:1} --%package -n libpurple-meanwhile --Summary: Lotus Sametime plugin for Pidgin using the Meanwhile library --Group: Applications/Internet --Requires: libpurple >= %{apiver} --%endif -- - %if 0%{?_with_mono:1} - %package -n libpurple-mono - Summary: Mono .NET plugin support for Pidgin -@@ -161,18 +152,14 @@ - - %description - Pidgin allows you to talk to anyone using a variety of messaging --protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu, --ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and --Zephyr. These protocols are implemented using a modular, easy to -+protocols including XMPP, Bonjour, IRC, SILC, Simple and Zephyr. -+These protocols are implemented using a modular, easy to - use design. To use a protocol, just add an account using the - account editor. - - Pidgin supports many common features of other clients, as well as many - unique features, such as perl scripting, TCL scripting and C plugins. - --Pidgin is not affiliated with or endorsed by America Online, Inc., --Microsoft Corporation, Yahoo! Inc., or ICQ Inc. -- - %description devel - The pidgin-devel package contains the header files, developer - documentation, and libraries required for development of Pidgin scripts -@@ -182,9 +169,8 @@ - libpurple contains the core IM support for IM clients such as Pidgin - and Finch. - --libpurple supports a variety of messaging protocols including AIM, MSN, --Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, --Lotus Sametime, SILC, Simple and Zephyr. -+libpurple supports a variety of messaging protocols including XMPP, -+Bonjour, IRC, SILC, Simple and Zephyr. - - %description -n libpurple-devel - The libpurple-devel package contains the header files, developer -@@ -196,11 +182,6 @@ - Bonjour plugin for Pidgin. - %endif - --%if 0%{?_with_meanwhile:1} --%description -n libpurple-meanwhile --Lotus Sametime plugin for Pidgin using the Meanwhile library. --%endif -- - %if 0%{?_with_mono:1} - %description -n libpurple-mono - Mono plugin loader for Pidgin. This package will allow you to write or -@@ -236,7 +217,6 @@ - %{!?_with_vv:--disable-vv} \ - %{!?_with_dbus:--disable-dbus} \ - %{!?_with_avahi:--disable-avahi} \ -- %{!?_with_meanwhile:--disable-meanwhile} \ - %{?_without_gstreamer:--disable-gstreamer} \ - %{?_without_gtkspell:--disable-gtkspell} \ - %{?_without_nm:--disable-nm} \ -@@ -258,9 +238,7 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/gnt/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.la --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/liboscar.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libymsg.so - rm -f $RPM_BUILD_ROOT%{_libdir}/*.la - rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod - find $RPM_BUILD_ROOT -type f -name '*.a' -exec rm -f {} ';' -@@ -271,10 +249,6 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libbonjour.so - %endif - --%if 0%{!?_with_meanwhile:1} --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsametime.so --%endif -- - %if 0%{!?_with_mono:1} - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/mono.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.dll -@@ -299,7 +273,6 @@ - find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \ - sed "s@^$RPM_BUILD_ROOT@@g" | \ - grep -v /libbonjour.so | \ -- grep -v /libsametime.so | \ - grep -v /mono.so | \ - grep -v ".dll$" > %{name}-%{version}-purpleplugins - -@@ -435,13 +408,6 @@ - %{_libdir}/purple-2/libbonjour.* - %endif - --%if 0%{?_with_meanwhile:1} --%files -n libpurple-meanwhile --%defattr(-, root, root) -- --%{_libdir}/purple-2/libsametime.* --%endif -- - %if 0%{?_with_mono:1} - %files -n libpurple-mono - %defattr(-, root, root) -@@ -492,9 +458,6 @@ - * Sat Jul 11 2009 Stu Tomlinson <stu@nosnilmot.com> - - Update to reflect changes in perl module installation directories - --* Mon May 19 2008 Stu Tomlinson <stu@nosnilmot.com> --- Fix building without meanwhile support -- - * Fri May 16 2008 Stu Tomlinson <stu@nosnilmot.com> - - Add "--without nm" support to build without NetworkManager - -@@ -586,8 +549,6 @@ - - Update to reflect renaming to pidgin/libpurple - - * Sun Oct 1 2006 Stu Tomlinson <stu@nosnilmot.com> --- We can build with internal gadu gadu again, so bring it back into the -- main package - - Deal with gconf schame uninstallation on package upgrade and removal - - * Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com> -@@ -606,19 +567,14 @@ - - Source RPM uses tar.bz2 now to save space - - Update BuildRequires for new intltool dependencies - - Add a --with perlmakehack option to allow builds to succeed on RH9 --- Add a --with gadugadu to build (separate) gaim-gadugadu package - - * Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add support for beta versions so the subsequent releases are seen as newer - by RPM --- Split of sametime support to gaim-meanwhile - - Use make DESTDIR=... instead of overloading prefix etc. when installing - - Default build to include cyrus-sasl support in Jabber - - Add --with dbus to build with DBUS support - --* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net> --- Added obsoletes gaim-meanwhile -- - * Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add separate gaim-bonjour package if built with --with-howl - - Add separate gaim-mono package if built with --with-mono -diff -Nur pidgin-2.10.7/pidgin.spec.in pidgin-2.10.7-nonprism/pidgin.spec.in ---- pidgin-2.10.7/pidgin.spec.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.spec.in 2013-08-17 00:07:12.251996234 -0300 -@@ -34,7 +34,6 @@ - %{!?_without_startupnotification:BuildRequires: startup-notification-devel} - %{?_with_avahi:BuildRequires: avahi-glib-devel} - %{!?_without_gtkspell:BuildRequires: gtkspell-devel} --%{?_with_meanwhile:BuildRequires: meanwhile-devel} - %{?_with_mono:BuildRequires: mono-devel} - %{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2} - %{!?_without_silc:BuildRequires: /usr/include/silc/silcclient.h} -@@ -105,7 +104,6 @@ - Group: Applications/Internet - Obsoletes: gaim-silc - Obsoletes: gaim-tcl --Obsoletes: gaim-gadugadu - Obsoletes: pidgin-tcl < 2.0.0 - Obsoletes: pidgin-silc < 2.0.0 - Obsoletes: libpurple-perl < %{version} -@@ -131,13 +129,6 @@ - Requires: libpurple >= %{apiver} - %endif - --%if 0%{?_with_meanwhile:1} --%package -n libpurple-meanwhile --Summary: Lotus Sametime plugin for Pidgin using the Meanwhile library --Group: Applications/Internet --Requires: libpurple >= %{apiver} --%endif -- - %if 0%{?_with_mono:1} - %package -n libpurple-mono - Summary: Mono .NET plugin support for Pidgin -@@ -161,18 +152,14 @@ - - %description - Pidgin allows you to talk to anyone using a variety of messaging --protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu, --ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and --Zephyr. These protocols are implemented using a modular, easy to -+protocols including XMPP, Bonjour, IRC, SILC, Simple and Zephyr. -+These protocols are implemented using a modular, easy to - use design. To use a protocol, just add an account using the - account editor. - - Pidgin supports many common features of other clients, as well as many - unique features, such as perl scripting, TCL scripting and C plugins. - --Pidgin is not affiliated with or endorsed by America Online, Inc., --Microsoft Corporation, Yahoo! Inc., or ICQ Inc. -- - %description devel - The pidgin-devel package contains the header files, developer - documentation, and libraries required for development of Pidgin scripts -@@ -182,9 +169,8 @@ - libpurple contains the core IM support for IM clients such as Pidgin - and Finch. - --libpurple supports a variety of messaging protocols including AIM, MSN, --Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, --Lotus Sametime, SILC, Simple and Zephyr. -+libpurple supports a variety of messaging protocols including XMPP, -+Bonjour, IRC, SILC, Simple and Zephyr. - - %description -n libpurple-devel - The libpurple-devel package contains the header files, developer -@@ -196,11 +182,6 @@ - Bonjour plugin for Pidgin. - %endif - --%if 0%{?_with_meanwhile:1} --%description -n libpurple-meanwhile --Lotus Sametime plugin for Pidgin using the Meanwhile library. --%endif -- - %if 0%{?_with_mono:1} - %description -n libpurple-mono - Mono plugin loader for Pidgin. This package will allow you to write or -@@ -236,7 +217,6 @@ - %{!?_with_vv:--disable-vv} \ - %{!?_with_dbus:--disable-dbus} \ - %{!?_with_avahi:--disable-avahi} \ -- %{!?_with_meanwhile:--disable-meanwhile} \ - %{?_without_gstreamer:--disable-gstreamer} \ - %{?_without_gtkspell:--disable-gtkspell} \ - %{?_without_nm:--disable-nm} \ -@@ -258,9 +238,7 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/gnt/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.la --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/liboscar.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libymsg.so - rm -f $RPM_BUILD_ROOT%{_libdir}/*.la - rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod - find $RPM_BUILD_ROOT -type f -name '*.a' -exec rm -f {} ';' -@@ -271,10 +249,6 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libbonjour.so - %endif - --%if 0%{!?_with_meanwhile:1} --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsametime.so --%endif -- - %if 0%{!?_with_mono:1} - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/mono.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.dll -@@ -299,7 +273,6 @@ - find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \ - sed "s@^$RPM_BUILD_ROOT@@g" | \ - grep -v /libbonjour.so | \ -- grep -v /libsametime.so | \ - grep -v /mono.so | \ - grep -v ".dll$" > %{name}-%{version}-purpleplugins - -@@ -435,13 +408,6 @@ - %{_libdir}/purple-2/libbonjour.* - %endif - --%if 0%{?_with_meanwhile:1} --%files -n libpurple-meanwhile --%defattr(-, root, root) -- --%{_libdir}/purple-2/libsametime.* --%endif -- - %if 0%{?_with_mono:1} - %files -n libpurple-mono - %defattr(-, root, root) -@@ -492,9 +458,6 @@ - * Sat Jul 11 2009 Stu Tomlinson <stu@nosnilmot.com> - - Update to reflect changes in perl module installation directories - --* Mon May 19 2008 Stu Tomlinson <stu@nosnilmot.com> --- Fix building without meanwhile support -- - * Fri May 16 2008 Stu Tomlinson <stu@nosnilmot.com> - - Add "--without nm" support to build without NetworkManager - -@@ -586,8 +549,6 @@ - - Update to reflect renaming to pidgin/libpurple - - * Sun Oct 1 2006 Stu Tomlinson <stu@nosnilmot.com> --- We can build with internal gadu gadu again, so bring it back into the -- main package - - Deal with gconf schame uninstallation on package upgrade and removal - - * Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com> -@@ -606,19 +567,14 @@ - - Source RPM uses tar.bz2 now to save space - - Update BuildRequires for new intltool dependencies - - Add a --with perlmakehack option to allow builds to succeed on RH9 --- Add a --with gadugadu to build (separate) gaim-gadugadu package - - * Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add support for beta versions so the subsequent releases are seen as newer - by RPM --- Split of sametime support to gaim-meanwhile - - Use make DESTDIR=... instead of overloading prefix etc. when installing - - Default build to include cyrus-sasl support in Jabber - - Add --with dbus to build with DBUS support - --* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net> --- Added obsoletes gaim-meanwhile -- - * Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add separate gaim-bonjour package if built with --with-howl - - Add separate gaim-mono package if built with --with-mono diff --git a/nonprism/pidgin-nonprism/nonprism.patch b/nonprism/pidgin-nonprism/nonprism.patch index 485bef3c8..88140268e 100644 --- a/nonprism/pidgin-nonprism/nonprism.patch +++ b/nonprism/pidgin-nonprism/nonprism.patch @@ -1,2256 +1,6 @@ -diff -Nur pidgin-2.10.7/config.h.in pidgin-2.10.7-nonprism/config.h.in ---- pidgin-2.10.7/config.h.in 2013-02-11 07:17:16.000000000 -0200 -+++ pidgin-2.10.7-nonprism/config.h.in 2013-08-16 22:16:16.833531712 -0300 -@@ -151,9 +151,6 @@ - /* Define to 1 if you have the `db' library (-ldb). */ - #undef HAVE_LIBDB - --/* Define to 1 if you have libgadu. */ --#undef HAVE_LIBGADU -- - /* Define to 1 if you have the `nsl' library (-lnsl). */ - #undef HAVE_LIBNSL - -diff -Nur pidgin-2.10.7/configure pidgin-2.10.7-nonprism/configure ---- pidgin-2.10.7/configure 2013-02-11 07:17:26.000000000 -0200 -+++ pidgin-2.10.7-nonprism/configure 2013-08-27 16:47:16.890662082 -0300 -@@ -716,45 +716,23 @@ - STATIC_LINK_LIBS - STATIC_ZEPHYR_FALSE - STATIC_ZEPHYR_TRUE --STATIC_YAHOO_FALSE --STATIC_YAHOO_TRUE - STATIC_SIMPLE_FALSE - STATIC_SIMPLE_TRUE - STATIC_SILC_FALSE - STATIC_SILC_TRUE --STATIC_SAMETIME_FALSE --STATIC_SAMETIME_TRUE --STATIC_OSCAR_FALSE --STATIC_OSCAR_TRUE --STATIC_NOVELL_FALSE --STATIC_NOVELL_TRUE --STATIC_MXIT_FALSE --STATIC_MXIT_TRUE --STATIC_MYSPACE_FALSE --STATIC_MYSPACE_TRUE --STATIC_MSN_FALSE --STATIC_MSN_TRUE - STATIC_JABBER_FALSE - STATIC_JABBER_TRUE - STATIC_IRC_FALSE - STATIC_IRC_TRUE --STATIC_GG_FALSE --STATIC_GG_TRUE - STATIC_BONJOUR_FALSE - STATIC_BONJOUR_TRUE - STATIC_PRPLS - DISTRIB_FALSE - DISTRIB_TRUE --USE_INTERNAL_LIBGADU_FALSE --USE_INTERNAL_LIBGADU_TRUE --GADU_LIBS --GADU_CFLAGS - SILC_LIBS - SILC_CFLAGS - AVAHI_LIBS - AVAHI_CFLAGS --MEANWHILE_LIBS --MEANWHILE_CFLAGS - IDN_LIBS - IDN_CFLAGS - USE_VV_FALSE -@@ -1021,14 +999,11 @@ - enable_farstream - enable_vv - enable_idn --enable_meanwhile - enable_avahi - with_avahi_client_includes - with_avahi_client_libs - with_silc_includes - with_silc_libs --with_gadu_includes --with_gadu_libs - enable_distrib - with_static_prpls - with_dynamic_prpls -@@ -1100,14 +1075,10 @@ - FARSTREAM_LIBS - IDN_CFLAGS - IDN_LIBS --MEANWHILE_CFLAGS --MEANWHILE_LIBS - AVAHI_CFLAGS - AVAHI_LIBS - SILC_CFLAGS - SILC_LIBS --GADU_CFLAGS --GADU_LIBS - DBUS_CFLAGS - DBUS_LIBS - NETWORKMANAGER_CFLAGS -@@ -1773,8 +1744,6 @@ - --disable-farstream compile without farstream support - --disable-vv compile without voice and video support - --disable-idn compile without IDN support -- --disable-meanwhile compile without meanwhile (required for Sametime -- support) - --disable-avahi compile without avahi (required for Bonjour support) - - --disable-plugins compile without plugin support -@@ -1826,9 +1795,6 @@ - --with-silc-includes=DIR - compile the SILC plugin against includes in DIR - --with-silc-libs=DIR compile the SILC plugin against the SILC libs in DIR -- --with-gadu-includes=DIR -- compile the Gadu-Gadu plugin against includes in DIR -- --with-gadu-libs=DIR compile the Gadu-Gadu plugin against the libs in DIR - --with-static-prpls Link to certain protocols statically - --with-dynamic-prpls specify which protocols to build dynamically - --with-krb4=PREFIX compile Zephyr plugin with Kerberos 4 support -@@ -1905,17 +1871,11 @@ - linker flags for FARSTREAM, overriding pkg-config - IDN_CFLAGS C compiler flags for IDN, overriding pkg-config - IDN_LIBS linker flags for IDN, overriding pkg-config -- MEANWHILE_CFLAGS -- C compiler flags for MEANWHILE, overriding pkg-config -- MEANWHILE_LIBS -- linker flags for MEANWHILE, overriding pkg-config - AVAHI_CFLAGS - C compiler flags for AVAHI, overriding pkg-config - AVAHI_LIBS linker flags for AVAHI, overriding pkg-config - SILC_CFLAGS C compiler flags for SILC, overriding pkg-config - SILC_LIBS linker flags for SILC, overriding pkg-config -- GADU_CFLAGS C compiler flags for GADU, overriding pkg-config -- GADU_LIBS linker flags for GADU, overriding pkg-config - DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config - DBUS_LIBS linker flags for DBUS, overriding pkg-config - NETWORKMANAGER_CFLAGS -@@ -18487,105 +18447,6 @@ - fi - fi - --# Check whether --enable-meanwhile was given. --if test "${enable_meanwhile+set}" = set; then : -- enableval=$enable_meanwhile; enable_meanwhile="$enableval" --else -- enable_meanwhile="yes" --fi -- --if test "x$enable_meanwhile" = "xyes"; then -- --pkg_failed=no --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MEANWHILE" >&5 --$as_echo_n "checking for MEANWHILE... " >&6; } -- --if test -n "$MEANWHILE_CFLAGS"; then -- pkg_cv_MEANWHILE_CFLAGS="$MEANWHILE_CFLAGS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"meanwhile >= 1.0.0 meanwhile < 2.0.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "meanwhile >= 1.0.0 meanwhile < 2.0.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_MEANWHILE_CFLAGS=`$PKG_CONFIG --cflags "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi --if test -n "$MEANWHILE_LIBS"; then -- pkg_cv_MEANWHILE_LIBS="$MEANWHILE_LIBS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"meanwhile >= 1.0.0 meanwhile < 2.0.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "meanwhile >= 1.0.0 meanwhile < 2.0.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_MEANWHILE_LIBS=`$PKG_CONFIG --libs "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi -- -- -- --if test $pkg_failed = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- --if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then -- _pkg_short_errors_supported=yes --else -- _pkg_short_errors_supported=no --fi -- if test $_pkg_short_errors_supported = yes; then -- MEANWHILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>&1` -- else -- MEANWHILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "meanwhile >= 1.0.0 meanwhile < 2.0.0" 2>&1` -- fi -- # Put the nasty error message in config.log where it belongs -- echo "$MEANWHILE_PKG_ERRORS" >&5 -- -- -- have_meanwhile="no" -- if test "x$force_deps" = "xyes" ; then -- as_fn_error $? " --Meanwhile development headers not found. --Use --disable-meanwhile if you do not need meanwhile (Sametime) support. --" "$LINENO" 5 -- fi --elif test $pkg_failed = untried; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- -- have_meanwhile="no" -- if test "x$force_deps" = "xyes" ; then -- as_fn_error $? " --Meanwhile development headers not found. --Use --disable-meanwhile if you do not need meanwhile (Sametime) support. --" "$LINENO" 5 -- fi --else -- MEANWHILE_CFLAGS=$pkg_cv_MEANWHILE_CFLAGS -- MEANWHILE_LIBS=$pkg_cv_MEANWHILE_LIBS -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- -- have_meanwhile="yes" -- --fi --fi -- -- -- - # Check whether --enable-avahi was given. - if test "${enable_avahi+set}" = set; then : - enableval=$enable_avahi; enable_avahi="$enableval" -@@ -19207,267 +19068,6 @@ - fi - - --# Check whether --with-gadu-includes was given. --if test "${with_gadu_includes+set}" = set; then : -- withval=$with_gadu_includes; ac_gadu_includes="$withval" --else -- ac_gadu_includes="no" --fi -- -- --# Check whether --with-gadu-libs was given. --if test "${with_gadu_libs+set}" = set; then : -- withval=$with_gadu_libs; ac_gadu_libs="$withval" --else -- ac_gadu_libs="no" --fi -- --GADU_CFLAGS="" --GADU_LIBS="" --if test -n "$with_gadu_includes" || test -n "$with_gadu_libs"; then -- gadu_manual_check="yes" --else -- gadu_manual_check="no" --fi --if test "x$gadu_manual_check" = "xno"; then -- --pkg_failed=no --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GADU" >&5 --$as_echo_n "checking for GADU... " >&6; } -- --if test -n "$GADU_CFLAGS"; then -- pkg_cv_GADU_CFLAGS="$GADU_CFLAGS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgadu >= 1.11.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "libgadu >= 1.11.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_GADU_CFLAGS=`$PKG_CONFIG --cflags "libgadu >= 1.11.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi --if test -n "$GADU_LIBS"; then -- pkg_cv_GADU_LIBS="$GADU_LIBS" -- elif test -n "$PKG_CONFIG"; then -- if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgadu >= 1.11.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "libgadu >= 1.11.0") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; then -- pkg_cv_GADU_LIBS=`$PKG_CONFIG --libs "libgadu >= 1.11.0" 2>/dev/null` -- test "x$?" != "x0" && pkg_failed=yes --else -- pkg_failed=yes --fi -- else -- pkg_failed=untried --fi -- -- -- --if test $pkg_failed = yes; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- --if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then -- _pkg_short_errors_supported=yes --else -- _pkg_short_errors_supported=no --fi -- if test $_pkg_short_errors_supported = yes; then -- GADU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libgadu >= 1.11.0" 2>&1` -- else -- GADU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libgadu >= 1.11.0" 2>&1` -- fi -- # Put the nasty error message in config.log where it belongs -- echo "$GADU_PKG_ERRORS" >&5 -- -- -- gadu_includes="no" -- --elif test $pkg_failed = untried; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- -- gadu_includes="no" -- --else -- GADU_CFLAGS=$pkg_cv_GADU_CFLAGS -- GADU_LIBS=$pkg_cv_GADU_LIBS -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- -- gadu_includes="yes" -- gadu_libs="yes" -- --fi --else -- if test "$ac_gadu_includes" != "no"; then -- GADU_CFLAGS="-I$ac_gadu_includes" -- fi -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- ac_fn_c_check_header_mongrel "$LINENO" "libgadu.h" "ac_cv_header_libgadu_h" "$ac_includes_default" --if test "x$ac_cv_header_libgadu_h" = xyes; then : -- gadu_includes=yes --fi -- -- -- CPPFLAGS="$CPPFLAGS_save" -- -- if test "$ac_gadu_libs" != "no"; then -- GADU_LIBS="-L$ac_gadu_libs" -- fi -- GADU_LIBS="$GADU_LIBS -lgadu" -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gg_libgadu_version in -lgadu" >&5 --$as_echo_n "checking for gg_libgadu_version in -lgadu... " >&6; } --if ${ac_cv_lib_gadu_gg_libgadu_version+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lgadu $GADU_LIBS $LIBS" --cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --/* Override any GCC internal prototype to avoid an error. -- Use char because int might match the return type of a GCC -- builtin and then its argument prototype would still apply. */ --#ifdef __cplusplus --extern "C" --#endif --char gg_libgadu_version (); --int --main () --{ --return gg_libgadu_version (); -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- ac_cv_lib_gadu_gg_libgadu_version=yes --else -- ac_cv_lib_gadu_gg_libgadu_version=no --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gadu_gg_libgadu_version" >&5 --$as_echo "$ac_cv_lib_gadu_gg_libgadu_version" >&6; } --if test "x$ac_cv_lib_gadu_gg_libgadu_version" = xyes; then : -- gadu_libs=yes --fi -- --fi --GADU_CFLAGS=`echo $GADU_CFLAGS |$sedpath 's/-Wall//'` -- --if test "x$gadu_libs" = "xyes"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libgadu GPL compatibility" >&5 --$as_echo_n "checking for libgadu GPL compatibility... " >&6; } -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --#include <libgadu.h> --int --main () --{ -- --#if defined(__GG_LIBGADU_HAVE_OPENSSL) || defined(GG_CONFIG_HAVE_OPENSSL) --#error "libgadu is not compatible with the GPL when compiled with OpenSSL support." --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --#include <libgadu.h> --int --main () --{ -- --#if GG_DEFAULT_PROTOCOL_VERSION < 0x2e --#error "Your libgadu version is too old. libpurple requires 1.11.0 or higher." --#endif -- -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_compile "$LINENO"; then : -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 --$as_echo "yes" >&6; } -- --$as_echo "#define HAVE_LIBGADU 1" >>confdefs.h -- -- --else -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- echo -- echo -- echo "Your supplied copy of libgadu is too old." -- echo "Install version 1.11.0 or newer." -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -- --else -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } -- echo -- echo -- echo "libgadu is not compatible with the GPL when compiled with OpenSSL support." -- echo "To compile against system libgadu, please recompile libgadu using:" -- echo "./autogen.sh --disable-libgadu-openssl --disable-static --enable-shared" -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- --fi --rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -- CPPFLAGS="$CPPFLAGS_save" --fi -- -- if test "x$gadu_libs" != "xyes"; then -- USE_INTERNAL_LIBGADU_TRUE= -- USE_INTERNAL_LIBGADU_FALSE='#' --else -- USE_INTERNAL_LIBGADU_TRUE='#' -- USE_INTERNAL_LIBGADU_FALSE= --fi -- -- --if test "x$gadu_libs" = "x"; then -- gadu_libs=no --fi -- - - - -@@ -19500,10 +19100,7 @@ - fi - - if test "x$STATIC_PRPLS" = "xall" ; then -- STATIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes" ; then -- STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'` -+ STATIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/bonjour//'` -@@ -19519,46 +19116,22 @@ - extern_init= - load_proto= - for i in $STATIC_PRPLS ; do -- if test \( "x$i" = "xoscar" -o "x$i" = "xaim" -o "x$i" = "xicq" \) -a "x$static_oscar" != "xyes"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/oscar/liboscar.la" -- extern_init="$extern_init extern gboolean purple_init_aim_plugin();" -- extern_init="$extern_init extern gboolean purple_init_icq_plugin();" -- load_proto="$load_proto purple_init_aim_plugin();" -- load_proto="$load_proto purple_init_icq_plugin();" -- elif test "x$i" = "xyahoo"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/yahoo/libymsg.la" -- extern_init="$extern_init extern gboolean purple_init_yahoo_plugin();" -- extern_init="$extern_init extern gboolean purple_init_yahoojp_plugin();" -- load_proto="$load_proto purple_init_yahoo_plugin();" -- load_proto="$load_proto purple_init_yahoojp_plugin();" -+ if test "x$i" = "xsilc"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -+ elif test "x$i" = "xsilc10"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" - else -- if test "x$i" = "xsilc"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -- elif test "x$i" = "xsilc10"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" -- else -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" -- fi -- extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -- load_proto="$load_proto purple_init_${i}_plugin();" -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" - fi -+ extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -+ load_proto="$load_proto purple_init_${i}_plugin();" - case $i in - bonjour) static_bonjour=yes ;; -- gg) static_gg=yes ;; - irc) static_irc=yes ;; - jabber) static_jabber=yes ;; -- msn) static_msn=yes ;; -- myspace) static_myspace=yes ;; -- mxit) static_mxit=yes ;; -- novell) static_novell=yes ;; -- oscar) static_oscar=yes ;; -- aim) static_oscar=yes ;; -- icq) static_oscar=yes ;; -- sametime) static_sametime=yes ;; - silc) static_silc=yes ;; - silc10) static_silc=yes ;; - simple) static_simple=yes ;; -- yahoo) static_yahoo=yes ;; - zephyr) static_zephyr=yes ;; - *) echo "Invalid static protocol $i!!" ; exit 1 ;; - esac -@@ -19571,14 +19144,6 @@ - STATIC_BONJOUR_FALSE= - fi - -- if test "x$static_gg" = "xyes"; then -- STATIC_GG_TRUE= -- STATIC_GG_FALSE='#' --else -- STATIC_GG_TRUE='#' -- STATIC_GG_FALSE= --fi -- - if test "x$static_irc" = "xyes"; then - STATIC_IRC_TRUE= - STATIC_IRC_FALSE='#' -@@ -19595,54 +19160,6 @@ - STATIC_JABBER_FALSE= - fi - -- if test "x$static_msn" = "xyes"; then -- STATIC_MSN_TRUE= -- STATIC_MSN_FALSE='#' --else -- STATIC_MSN_TRUE='#' -- STATIC_MSN_FALSE= --fi -- -- if test "x$static_myspace" = "xyes"; then -- STATIC_MYSPACE_TRUE= -- STATIC_MYSPACE_FALSE='#' --else -- STATIC_MYSPACE_TRUE='#' -- STATIC_MYSPACE_FALSE= --fi -- -- if test "x$static_mxit" = "xyes"; then -- STATIC_MXIT_TRUE= -- STATIC_MXIT_FALSE='#' --else -- STATIC_MXIT_TRUE='#' -- STATIC_MXIT_FALSE= --fi -- -- if test "x$static_novell" = "xyes"; then -- STATIC_NOVELL_TRUE= -- STATIC_NOVELL_FALSE='#' --else -- STATIC_NOVELL_TRUE='#' -- STATIC_NOVELL_FALSE= --fi -- -- if test "x$static_oscar" = "xyes"; then -- STATIC_OSCAR_TRUE= -- STATIC_OSCAR_FALSE='#' --else -- STATIC_OSCAR_TRUE='#' -- STATIC_OSCAR_FALSE= --fi -- -- if test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes"; then -- STATIC_SAMETIME_TRUE= -- STATIC_SAMETIME_FALSE='#' --else -- STATIC_SAMETIME_TRUE='#' -- STATIC_SAMETIME_FALSE= --fi -- - if test "x$static_silc" = "xyes" -a "x$have_silc" = "xyes"; then - STATIC_SILC_TRUE= - STATIC_SILC_FALSE='#' -@@ -19659,14 +19176,6 @@ - STATIC_SIMPLE_FALSE= - fi - -- if test "x$static_yahoo" = "xyes"; then -- STATIC_YAHOO_TRUE= -- STATIC_YAHOO_FALSE='#' --else -- STATIC_YAHOO_TRUE='#' -- STATIC_YAHOO_FALSE= --fi -- - if test "x$static_zephyr" = "xyes"; then - STATIC_ZEPHYR_TRUE= - STATIC_ZEPHYR_FALSE='#' -@@ -19689,10 +19198,7 @@ - fi - - if test "x$DYNAMIC_PRPLS" = "xall" ; then -- DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes"; then -- DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'` -+ DYNAMIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/bonjour//'` -@@ -19707,22 +19213,12 @@ - for i in $DYNAMIC_PRPLS ; do - case $i in - bonjour) dynamic_bonjour=yes ;; -- gg) dynamic_gg=yes ;; - irc) dynamic_irc=yes ;; - jabber) dynamic_jabber=yes ;; -- msn) dynamic_msn=yes ;; -- myspace) dynamic_myspace=yes ;; -- mxit) dynamic_mxit=yes ;; -- novell) dynamic_novell=yes ;; - null) dynamic_null=yes ;; -- oscar) dynamic_oscar=yes ;; -- aim) dynamic_oscar=yes ;; -- icq) dynamic_oscar=yes ;; -- sametime) dynamic_sametime=yes ;; - silc) dynamic_silc=yes ;; - silc10) dynamic_silc=yes ;; - simple) dynamic_simple=yes ;; -- yahoo) dynamic_yahoo=yes ;; - zephyr) dynamic_zephyr=yes ;; - *) echo "Invalid dynamic protocol $i!!" ; exit 1 ;; - esac -@@ -21001,7 +20497,7 @@ - fi - - --msg_ssl="None. MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!" -+msg_ssl="None." - looked_for_gnutls="no" - if test "x$enable_gnutls" != "xno"; then - enable_gnutls="no" -@@ -21871,19 +21367,17 @@ - as_fn_error $? " - Neither GnuTLS or NSS SSL development headers found. - Use --disable-nss --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable! -+ - " "$LINENO" 5 - elif test "x$looked_for_gnutls" = "xyes" -a "x$force_deps" = "xyes" ; then - as_fn_error $? " - GnuTLS SSL development headers not found. - Use --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - " "$LINENO" 5 - elif test "x$looked_for_nss" = "xyes" -a "x$force_deps" = "xyes" ; then - as_fn_error $? " - NSS SSL development headers not found. - Use --disable-nss if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - " "$LINENO" 5 - fi - -@@ -23176,7 +22670,7 @@ - fi - - --ac_config_files="$ac_config_files Makefile Doxyfile doc/Makefile doc/pidgin.1 doc/finch.1 m4macros/Makefile pidgin.apspec pidgin/Makefile pidgin/pidgin.pc pidgin/pidgin-uninstalled.pc pidgin/pidgin-2.pc pidgin/pidgin-2-uninstalled.pc pidgin/pixmaps/Makefile pidgin/pixmaps/emotes/default/24/Makefile pidgin/pixmaps/emotes/none/Makefile pidgin/pixmaps/emotes/small/16/Makefile pidgin/plugins/Makefile pidgin/plugins/cap/Makefile pidgin/plugins/disco/Makefile pidgin/plugins/gestures/Makefile pidgin/plugins/gevolution/Makefile pidgin/plugins/musicmessaging/Makefile pidgin/plugins/perl/Makefile pidgin/plugins/perl/common/Makefile.PL pidgin/plugins/ticker/Makefile libpurple/ciphers/Makefile libpurple/example/Makefile libpurple/gconf/Makefile libpurple/purple.pc libpurple/purple-uninstalled.pc libpurple/purple-2.pc libpurple/purple-2-uninstalled.pc libpurple/plugins/Makefile libpurple/plugins/mono/Makefile libpurple/plugins/mono/api/Makefile libpurple/plugins/mono/loader/Makefile libpurple/plugins/perl/Makefile libpurple/plugins/perl/common/Makefile.PL libpurple/plugins/ssl/Makefile libpurple/plugins/tcl/Makefile libpurple/Makefile libpurple/protocols/Makefile libpurple/protocols/bonjour/Makefile libpurple/protocols/gg/Makefile libpurple/protocols/irc/Makefile libpurple/protocols/jabber/Makefile libpurple/protocols/msn/Makefile libpurple/protocols/myspace/Makefile libpurple/protocols/mxit/Makefile libpurple/protocols/novell/Makefile libpurple/protocols/null/Makefile libpurple/protocols/oscar/Makefile libpurple/protocols/sametime/Makefile libpurple/protocols/silc/Makefile libpurple/protocols/silc10/Makefile libpurple/protocols/simple/Makefile libpurple/protocols/yahoo/Makefile libpurple/protocols/zephyr/Makefile libpurple/tests/Makefile libpurple/purple.h libpurple/version.h share/sounds/Makefile share/ca-certs/Makefile finch/finch.pc finch/Makefile finch/libgnt/Makefile finch/libgnt/gnt.pc finch/libgnt/wms/Makefile finch/plugins/Makefile po/Makefile.in pidgin.spec" -+ac_config_files="$ac_config_files Makefile Doxyfile doc/Makefile doc/pidgin.1 doc/finch.1 m4macros/Makefile pidgin.apspec pidgin/Makefile pidgin/pidgin.pc pidgin/pidgin-uninstalled.pc pidgin/pidgin-2.pc pidgin/pidgin-2-uninstalled.pc pidgin/pixmaps/Makefile pidgin/pixmaps/emotes/default/24/Makefile pidgin/pixmaps/emotes/none/Makefile pidgin/pixmaps/emotes/small/16/Makefile pidgin/plugins/Makefile pidgin/plugins/cap/Makefile pidgin/plugins/disco/Makefile pidgin/plugins/gestures/Makefile pidgin/plugins/gevolution/Makefile pidgin/plugins/musicmessaging/Makefile pidgin/plugins/perl/Makefile pidgin/plugins/perl/common/Makefile.PL pidgin/plugins/ticker/Makefile libpurple/ciphers/Makefile libpurple/example/Makefile libpurple/gconf/Makefile libpurple/purple.pc libpurple/purple-uninstalled.pc libpurple/purple-2.pc libpurple/purple-2-uninstalled.pc libpurple/plugins/Makefile libpurple/plugins/mono/Makefile libpurple/plugins/mono/api/Makefile libpurple/plugins/mono/loader/Makefile libpurple/plugins/perl/Makefile libpurple/plugins/perl/common/Makefile.PL libpurple/plugins/ssl/Makefile libpurple/plugins/tcl/Makefile libpurple/Makefile libpurple/protocols/Makefile libpurple/protocols/bonjour/Makefile libpurple/protocols/irc/Makefile libpurple/protocols/jabber/Makefile libpurple/protocols/null/Makefile libpurple/protocols/silc/Makefile libpurple/protocols/silc10/Makefile libpurple/protocols/simple/Makefile libpurple/protocols/zephyr/Makefile libpurple/tests/Makefile libpurple/purple.h libpurple/version.h share/sounds/Makefile share/ca-certs/Makefile finch/finch.pc finch/Makefile finch/libgnt/Makefile finch/libgnt/gnt.pc finch/libgnt/wms/Makefile finch/plugins/Makefile po/Makefile.in pidgin.spec" - - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure -@@ -23344,10 +22838,6 @@ - as_fn_error $? "conditional \"USE_VV\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${USE_INTERNAL_LIBGADU_TRUE}" && test -z "${USE_INTERNAL_LIBGADU_FALSE}"; then -- as_fn_error $? "conditional \"USE_INTERNAL_LIBGADU\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${DISTRIB_TRUE}" && test -z "${DISTRIB_FALSE}"; then - as_fn_error $? "conditional \"DISTRIB\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -23356,10 +22846,6 @@ - as_fn_error $? "conditional \"STATIC_BONJOUR\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${STATIC_GG_TRUE}" && test -z "${STATIC_GG_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_GG\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${STATIC_IRC_TRUE}" && test -z "${STATIC_IRC_FALSE}"; then - as_fn_error $? "conditional \"STATIC_IRC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -23368,30 +22854,6 @@ - as_fn_error $? "conditional \"STATIC_JABBER\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${STATIC_MSN_TRUE}" && test -z "${STATIC_MSN_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_MSN\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_MYSPACE_TRUE}" && test -z "${STATIC_MYSPACE_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_MYSPACE\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_MXIT_TRUE}" && test -z "${STATIC_MXIT_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_MXIT\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_NOVELL_TRUE}" && test -z "${STATIC_NOVELL_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_NOVELL\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_OSCAR_TRUE}" && test -z "${STATIC_OSCAR_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_OSCAR\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi --if test -z "${STATIC_SAMETIME_TRUE}" && test -z "${STATIC_SAMETIME_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_SAMETIME\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${STATIC_SILC_TRUE}" && test -z "${STATIC_SILC_FALSE}"; then - as_fn_error $? "conditional \"STATIC_SILC\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -23400,10 +22862,6 @@ - as_fn_error $? "conditional \"STATIC_SIMPLE\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 - fi --if test -z "${STATIC_YAHOO_TRUE}" && test -z "${STATIC_YAHOO_FALSE}"; then -- as_fn_error $? "conditional \"STATIC_YAHOO\" was never defined. --Usually this means the macro was only invoked conditionally." "$LINENO" 5 --fi - if test -z "${STATIC_ZEPHYR_TRUE}" && test -z "${STATIC_ZEPHYR_FALSE}"; then - as_fn_error $? "conditional \"STATIC_ZEPHYR\" was never defined. - Usually this means the macro was only invoked conditionally." "$LINENO" 5 -@@ -24425,20 +23883,12 @@ - "libpurple/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/Makefile" ;; - "libpurple/protocols/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/Makefile" ;; - "libpurple/protocols/bonjour/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/bonjour/Makefile" ;; -- "libpurple/protocols/gg/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/gg/Makefile" ;; - "libpurple/protocols/irc/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/irc/Makefile" ;; - "libpurple/protocols/jabber/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/jabber/Makefile" ;; -- "libpurple/protocols/msn/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/msn/Makefile" ;; -- "libpurple/protocols/myspace/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/myspace/Makefile" ;; -- "libpurple/protocols/mxit/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/mxit/Makefile" ;; -- "libpurple/protocols/novell/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/novell/Makefile" ;; - "libpurple/protocols/null/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/null/Makefile" ;; -- "libpurple/protocols/oscar/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/oscar/Makefile" ;; -- "libpurple/protocols/sametime/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/sametime/Makefile" ;; - "libpurple/protocols/silc/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/silc/Makefile" ;; - "libpurple/protocols/silc10/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/silc10/Makefile" ;; - "libpurple/protocols/simple/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/simple/Makefile" ;; -- "libpurple/protocols/yahoo/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/yahoo/Makefile" ;; - "libpurple/protocols/zephyr/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/protocols/zephyr/Makefile" ;; - "libpurple/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libpurple/tests/Makefile" ;; - "libpurple/purple.h") CONFIG_FILES="$CONFIG_FILES libpurple/purple.h" ;; -@@ -25863,7 +25313,6 @@ - echo Build with Cyrus SASL support. : $enable_cyrus_sasl - echo Use kerberos 4 with zephyr.... : $kerberos - echo Use external libzephyr........ : $zephyr --echo Use external libgadu.......... : $gadu_libs - echo Install pixmaps............... : $enable_pixmaps - echo Old tray icon compatibility... : $enable_traycompat - echo Install translations.......... : $enable_i18n -diff -Nur pidgin-2.10.7/configure.ac pidgin-2.10.7-nonprism/configure.ac ---- pidgin-2.10.7/configure.ac 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/configure.ac 2013-08-16 23:44:41.800496326 -0300 -@@ -854,28 +854,6 @@ - fi - - dnl ####################################################################### --dnl # Check for Meanwhile headers (for Sametime) --dnl ####################################################################### --AC_ARG_ENABLE(meanwhile, -- [AC_HELP_STRING([--disable-meanwhile], -- [compile without meanwhile (required for Sametime support)])], -- enable_meanwhile="$enableval", enable_meanwhile="yes") --if test "x$enable_meanwhile" = "xyes"; then -- PKG_CHECK_MODULES(MEANWHILE, [meanwhile >= 1.0.0 meanwhile < 2.0.0], [ -- have_meanwhile="yes" -- ], [ -- have_meanwhile="no" -- if test "x$force_deps" = "xyes" ; then -- AC_MSG_ERROR([ --Meanwhile development headers not found. --Use --disable-meanwhile if you do not need meanwhile (Sametime) support. --]) -- fi]) --fi --AC_SUBST(MEANWHILE_CFLAGS) --AC_SUBST(MEANWHILE_LIBS) -- --dnl ####################################################################### - dnl # Check for Native Avahi headers (for Bonjour) - dnl ####################################################################### - AC_ARG_ENABLE(avahi, -@@ -1020,100 +998,6 @@ - CPPFLAGS="$CPPFLAGS_save" - fi - --dnl ####################################################################### --dnl # Check for Gadu-Gadu client includes and libraries --dnl ####################################################################### --AC_ARG_WITH(gadu-includes, [AC_HELP_STRING([--with-gadu-includes=DIR], [compile the Gadu-Gadu plugin against includes in DIR])], [ac_gadu_includes="$withval"], [ac_gadu_includes="no"]) --AC_ARG_WITH(gadu-libs, [AC_HELP_STRING([--with-gadu-libs=DIR], [compile the Gadu-Gadu plugin against the libs in DIR])], [ac_gadu_libs="$withval"], [ac_gadu_libs="no"]) --GADU_CFLAGS="" --GADU_LIBS="" --if test -n "$with_gadu_includes" || test -n "$with_gadu_libs"; then -- gadu_manual_check="yes" --else -- gadu_manual_check="no" --fi --if test "x$gadu_manual_check" = "xno"; then -- PKG_CHECK_MODULES(GADU, [libgadu >= 1.11.0], [ -- gadu_includes="yes" -- gadu_libs="yes" -- ], [ -- gadu_includes="no" -- ]) --else -- if test "$ac_gadu_includes" != "no"; then -- GADU_CFLAGS="-I$ac_gadu_includes" -- fi -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- AC_CHECK_HEADER(libgadu.h, [gadu_includes=yes]) -- CPPFLAGS="$CPPFLAGS_save" -- -- if test "$ac_gadu_libs" != "no"; then -- GADU_LIBS="-L$ac_gadu_libs" -- fi -- GADU_LIBS="$GADU_LIBS -lgadu" -- AC_CHECK_LIB(gadu, gg_libgadu_version, [gadu_libs=yes], , $GADU_LIBS) --fi --GADU_CFLAGS=`echo $GADU_CFLAGS |$sedpath 's/-Wall//'` -- --if test "x$gadu_libs" = "xyes"; then -- AC_MSG_CHECKING(for libgadu GPL compatibility) -- CPPFLAGS_save="$CPPFLAGS" -- CPPFLAGS="$CPPFLAGS $GADU_CFLAGS" -- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libgadu.h>]], [[ --#if defined(__GG_LIBGADU_HAVE_OPENSSL) || defined(GG_CONFIG_HAVE_OPENSSL) --#error "libgadu is not compatible with the GPL when compiled with OpenSSL support." --#endif -- ]])], [ -- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <libgadu.h>]], [[ --#if GG_DEFAULT_PROTOCOL_VERSION < 0x2e --#error "Your libgadu version is too old. libpurple requires 1.11.0 or higher." --#endif -- ]])], [ -- AC_MSG_RESULT(yes) -- AC_DEFINE([HAVE_LIBGADU], [1], -- [Define to 1 if you have libgadu.]) -- ], [ -- AC_MSG_RESULT(no) -- echo -- echo -- echo "Your supplied copy of libgadu is too old." -- echo "Install version 1.11.0 or newer." -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- ]) -- ], [ -- AC_MSG_RESULT(no) -- echo -- echo -- echo "libgadu is not compatible with the GPL when compiled with OpenSSL support." -- echo "To compile against system libgadu, please recompile libgadu using:" -- echo "./autogen.sh --disable-libgadu-openssl --disable-static --enable-shared" -- echo "Then rerun this ./configure" -- echo -- echo "Falling back to using our own copy of libgadu" -- echo -- GADU_LIBS="" -- GADU_CFLAGS="" -- gadu_libs=no -- ]) -- CPPFLAGS="$CPPFLAGS_save" --fi -- --AM_CONDITIONAL(USE_INTERNAL_LIBGADU, test "x$gadu_libs" != "xyes") -- --if test "x$gadu_libs" = "x"; then -- gadu_libs=no --fi -- --AC_SUBST(GADU_LIBS) --AC_SUBST(GADU_CFLAGS) -- - AC_ARG_ENABLE(distrib,,,enable_distrib=no) - AM_CONDITIONAL(DISTRIB, test "x$enable_distrib" = "xyes") - DYNAMIC_PRPLS=all -@@ -1123,10 +1007,7 @@ - fi - - if test "x$STATIC_PRPLS" = "xall" ; then -- STATIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes" ; then -- STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/sametime//'` -+ STATIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - STATIC_PRPLS=`echo $STATIC_PRPLS | $sedpath 's/bonjour//'` -@@ -1143,64 +1024,31 @@ - load_proto= - for i in $STATIC_PRPLS ; do - dnl Ugly special case for "libsilcpurple.la": -- dnl ... and Ugly special case for multi-protocol oscar and yahoo -- if test \( "x$i" = "xoscar" -o "x$i" = "xaim" -o "x$i" = "xicq" \) -a "x$static_oscar" != "xyes"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/oscar/liboscar.la" -- extern_init="$extern_init extern gboolean purple_init_aim_plugin();" -- extern_init="$extern_init extern gboolean purple_init_icq_plugin();" -- load_proto="$load_proto purple_init_aim_plugin();" -- load_proto="$load_proto purple_init_icq_plugin();" -- elif test "x$i" = "xyahoo"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/yahoo/libymsg.la" -- extern_init="$extern_init extern gboolean purple_init_yahoo_plugin();" -- extern_init="$extern_init extern gboolean purple_init_yahoojp_plugin();" -- load_proto="$load_proto purple_init_yahoo_plugin();" -- load_proto="$load_proto purple_init_yahoojp_plugin();" -+ if test "x$i" = "xsilc"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -+ elif test "x$i" = "xsilc10"; then -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" - else -- if test "x$i" = "xsilc"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib${i}purple.la" -- elif test "x$i" = "xsilc10"; then -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/libsilcpurple.la" -- else -- STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" -- fi -- extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -- load_proto="$load_proto purple_init_${i}_plugin();" -+ STATIC_LINK_LIBS="$STATIC_LINK_LIBS \$(top_builddir)/libpurple/protocols/$i/lib$i.la" - fi -+ extern_init="$extern_init extern gboolean purple_init_${i}_plugin();" -+ load_proto="$load_proto purple_init_${i}_plugin();" - case $i in - bonjour) static_bonjour=yes ;; -- gg) static_gg=yes ;; - irc) static_irc=yes ;; - jabber) static_jabber=yes ;; -- msn) static_msn=yes ;; -- myspace) static_myspace=yes ;; -- mxit) static_mxit=yes ;; -- novell) static_novell=yes ;; -- oscar) static_oscar=yes ;; -- aim) static_oscar=yes ;; -- icq) static_oscar=yes ;; -- sametime) static_sametime=yes ;; - silc) static_silc=yes ;; - silc10) static_silc=yes ;; - simple) static_simple=yes ;; -- yahoo) static_yahoo=yes ;; - zephyr) static_zephyr=yes ;; - *) echo "Invalid static protocol $i!!" ; exit 1 ;; - esac - done - AM_CONDITIONAL(STATIC_BONJOUR, test "x$static_bonjour" = "xyes") --AM_CONDITIONAL(STATIC_GG, test "x$static_gg" = "xyes") - AM_CONDITIONAL(STATIC_IRC, test "x$static_irc" = "xyes") - AM_CONDITIONAL(STATIC_JABBER, test "x$static_jabber" = "xyes") --AM_CONDITIONAL(STATIC_MSN, test "x$static_msn" = "xyes") --AM_CONDITIONAL(STATIC_MYSPACE, test "x$static_myspace" = "xyes") --AM_CONDITIONAL(STATIC_MXIT, test "x$static_mxit" = "xyes") --AM_CONDITIONAL(STATIC_NOVELL, test "x$static_novell" = "xyes") --AM_CONDITIONAL(STATIC_OSCAR, test "x$static_oscar" = "xyes") --AM_CONDITIONAL(STATIC_SAMETIME, test "x$static_sametime" = "xyes" -a "x$have_meanwhile" = "xyes") - AM_CONDITIONAL(STATIC_SILC, test "x$static_silc" = "xyes" -a "x$have_silc" = "xyes") - AM_CONDITIONAL(STATIC_SIMPLE, test "x$static_simple" = "xyes") --AM_CONDITIONAL(STATIC_YAHOO, test "x$static_yahoo" = "xyes") - AM_CONDITIONAL(STATIC_ZEPHYR, test "x$static_zephyr" = "xyes") - AC_SUBST(STATIC_LINK_LIBS) - AC_DEFINE_UNQUOTED(STATIC_PROTO_INIT, $extern_init static void static_proto_init(void) { $load_proto }, -@@ -1208,10 +1056,7 @@ - - AC_ARG_WITH(dynamic_prpls, [AC_HELP_STRING([--with-dynamic-prpls], [specify which protocols to build dynamically])], [DYNAMIC_PRPLS=`echo $withval | $sedpath 's/,/ /g'`]) - if test "x$DYNAMIC_PRPLS" = "xall" ; then -- DYNAMIC_PRPLS="bonjour gg irc jabber msn myspace mxit novell oscar sametime silc simple yahoo zephyr" --fi --if test "x$have_meanwhile" != "xyes"; then -- DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/sametime//'` -+ DYNAMIC_PRPLS="bonjour irc jabber silc simple zephyr" - fi - if test "x$avahiincludes" != "xyes" -o "x$avahilibs" != "xyes"; then - DYNAMIC_PRPLS=`echo $DYNAMIC_PRPLS | $sedpath 's/bonjour//'` -@@ -1226,22 +1071,12 @@ - for i in $DYNAMIC_PRPLS ; do - case $i in - bonjour) dynamic_bonjour=yes ;; -- gg) dynamic_gg=yes ;; - irc) dynamic_irc=yes ;; - jabber) dynamic_jabber=yes ;; -- msn) dynamic_msn=yes ;; -- myspace) dynamic_myspace=yes ;; -- mxit) dynamic_mxit=yes ;; -- novell) dynamic_novell=yes ;; - null) dynamic_null=yes ;; -- oscar) dynamic_oscar=yes ;; -- aim) dynamic_oscar=yes ;; -- icq) dynamic_oscar=yes ;; -- sametime) dynamic_sametime=yes ;; - silc) dynamic_silc=yes ;; - silc10) dynamic_silc=yes ;; - simple) dynamic_simple=yes ;; -- yahoo) dynamic_yahoo=yes ;; - zephyr) dynamic_zephyr=yes ;; - *) echo "Invalid dynamic protocol $i!!" ; exit 1 ;; - esac -@@ -1713,7 +1548,7 @@ - [enable_nss="$enableval"], - [enable_nss="yes"]) - --msg_ssl="None. MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!" -+msg_ssl="None." - looked_for_gnutls="no" - dnl # - dnl # Check for GnuTLS if it's specified. -@@ -2124,19 +1959,16 @@ - AC_MSG_ERROR([ - Neither GnuTLS or NSS SSL development headers found. - Use --disable-nss --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable! - ]) - elif test "x$looked_for_gnutls" = "xyes" -a "x$force_deps" = "xyes" ; then - AC_MSG_ERROR([ - GnuTLS SSL development headers not found. - Use --disable-gnutls if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - ]) - elif test "x$looked_for_nss" = "xyes" -a "x$force_deps" = "xyes" ; then - AC_MSG_ERROR([ - NSS SSL development headers not found. - Use --disable-nss if you do not need SSL support. --MSN, Yahoo!, Novell Groupwise and Google Talk will not work without SSL support. - ]) - fi - -@@ -2577,20 +2409,12 @@ - libpurple/Makefile - libpurple/protocols/Makefile - libpurple/protocols/bonjour/Makefile -- libpurple/protocols/gg/Makefile - libpurple/protocols/irc/Makefile - libpurple/protocols/jabber/Makefile -- libpurple/protocols/msn/Makefile -- libpurple/protocols/myspace/Makefile -- libpurple/protocols/mxit/Makefile -- libpurple/protocols/novell/Makefile - libpurple/protocols/null/Makefile -- libpurple/protocols/oscar/Makefile -- libpurple/protocols/sametime/Makefile - libpurple/protocols/silc/Makefile - libpurple/protocols/silc10/Makefile - libpurple/protocols/simple/Makefile -- libpurple/protocols/yahoo/Makefile - libpurple/protocols/zephyr/Makefile - libpurple/tests/Makefile - libpurple/purple.h -@@ -2635,7 +2459,6 @@ - echo Build with Cyrus SASL support. : $enable_cyrus_sasl - echo Use kerberos 4 with zephyr.... : $kerberos - echo Use external libzephyr........ : $zephyr --echo Use external libgadu.......... : $gadu_libs - echo Install pixmaps............... : $enable_pixmaps - echo Old tray icon compatibility... : $enable_traycompat - echo Install translations.......... : $enable_i18n -diff -Nur pidgin-2.10.7/doc/finch.1.in pidgin-2.10.7-nonprism/doc/finch.1.in ---- pidgin-2.10.7/doc/finch.1.in 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/doc/finch.1.in 2013-08-16 21:01:16.682280145 -0300 -@@ -30,11 +30,8 @@ - .SH DESCRIPTION - .PP - \fBfinch\fR is a console-based modular messaging client based on libpurple --which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, --Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has -+which is capable of connecting to XMPP, IRC, SILC and Zephyr all at once. It has - many common features found in other clients, as well as many unique features. --Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or --Yahoo. - - .SH OPTIONS - The following options are provided by \fBfinch\fR using the standard GNU -diff -Nur pidgin-2.10.7/doc/funniest_home_convos.txt pidgin-2.10.7-nonprism/doc/funniest_home_convos.txt ---- pidgin-2.10.7/doc/funniest_home_convos.txt 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/doc/funniest_home_convos.txt 2013-08-16 23:08:16.148841464 -0300 -@@ -301,8 +301,6 @@ - --- - - 18:33:26 <NoName> hello there --18:34:03 <NoName> I just wanted to share some bevavior that I think its kinda of -- unsafe when using GAIM with yahoo messenges accounts - 18:34:43 <NoName> Whenever you transfer files between users, no receiving - confirmation is requested, the file gets transfered - automatically -diff -Nur pidgin-2.10.7/doc/pidgin.1.in pidgin-2.10.7-nonprism/doc/pidgin.1.in ---- pidgin-2.10.7/doc/pidgin.1.in 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/doc/pidgin.1.in 2013-08-16 21:00:30.964181946 -0300 -@@ -29,11 +29,8 @@ - .SH DESCRIPTION - .PP - \fBpidgin\fR is a graphical modular messaging client based on libpurple --which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, --Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has -+which is capable of connecting to XMPP, IRC, SILC and Zephyr all at once. It has - many common features found in other clients, as well as many unique features. --Pidgin is not endorsed by or affiliated with America Online, ICQ, Microsoft, or --Yahoo. - .PP - Pidgin can be extended by plugins written in multiple programming languages and - controlled through DBus or \fBpurple-remote\fR. -diff -Nur pidgin-2.10.7/libpurple/account.c pidgin-2.10.7-nonprism/libpurple/account.c ---- pidgin-2.10.7/libpurple/account.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/account.c 2013-08-16 23:31:48.026518940 -0300 -@@ -482,55 +482,6 @@ - /********************************************************************* - * Reading from disk * - *********************************************************************/ --static void --migrate_yahoo_japan(PurpleAccount *account) --{ -- /* detect a Yahoo! JAPAN account that existed prior to 2.6.0 and convert it -- * to use the new prpl-yahoojp. Also remove the account-specific settings -- * we no longer need */ -- -- if(purple_strequal(purple_account_get_protocol_id(account), "prpl-yahoo")) { -- if(purple_account_get_bool(account, "yahoojp", FALSE)) { -- const char *serverjp = purple_account_get_string(account, "serverjp", NULL); -- const char *xferjp_host = purple_account_get_string(account, "xferjp_host", NULL); -- -- g_return_if_fail(serverjp != NULL); -- g_return_if_fail(xferjp_host != NULL); -- -- purple_account_set_string(account, "server", serverjp); -- purple_account_set_string(account, "xfer_host", xferjp_host); -- -- purple_account_set_protocol_id(account, "prpl-yahoojp"); -- } -- -- /* these should always be nuked */ -- purple_account_remove_setting(account, "yahoojp"); -- purple_account_remove_setting(account, "serverjp"); -- purple_account_remove_setting(account, "xferjp_host"); -- -- } --} -- --static void --migrate_icq_server(PurpleAccount *account) --{ -- /* Migrate the login server setting for ICQ accounts. See -- * 'mtn log --last 1 --no-graph --from b6d7712e90b68610df3bd2d8cbaf46d94c8b3794' -- * for details on the change. */ -- -- if(purple_strequal(purple_account_get_protocol_id(account), "prpl-icq")) { -- const char *tmp = purple_account_get_string(account, "server", NULL); -- -- /* Non-secure server */ -- if(purple_strequal(tmp, "login.messaging.aol.com") || -- purple_strequal(tmp, "login.oscar.aol.com")) -- purple_account_set_string(account, "server", "login.icq.com"); -- -- /* Secure server */ -- if(purple_strequal(tmp, "slogin.oscar.aol.com")) -- purple_account_set_string(account, "server", "slogin.icq.com"); -- } --} - - static void - migrate_xmpp_encryption(PurpleAccount *account) -@@ -615,12 +566,6 @@ - g_free(data); - } - -- /* we do this here because we need access to account settings to determine -- * if we can/should migrate an old Yahoo! JAPAN account */ -- migrate_yahoo_japan(account); -- /* we do this here because we need access to account settings to determine -- * if we can/should migrate an ICQ account's server setting */ -- migrate_icq_server(account); - /* we do this here because we need to do it before the user views the - * Edit Account dialog. */ - migrate_xmpp_encryption(account); -@@ -874,7 +819,6 @@ - return NULL; - } - -- ret = purple_account_new(name, _purple_oscar_convert(name, protocol_id)); /* XXX: */ - g_free(name); - g_free(protocol_id); - -diff -Nur pidgin-2.10.7/libpurple/blist.c pidgin-2.10.7-nonprism/libpurple/blist.c ---- pidgin-2.10.7/libpurple/blist.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/blist.c 2013-08-16 22:53:19.640535242 -0300 -@@ -466,9 +466,7 @@ - - acct_name = xmlnode_get_attrib(bnode, "account"); - protocol = xmlnode_get_attrib(bnode, "protocol"); -- protocol = _purple_oscar_convert(acct_name, protocol); /* XXX: Remove */ - proto = xmlnode_get_attrib(bnode, "proto"); -- proto = _purple_oscar_convert(acct_name, proto); /* XXX: Remove */ - - if (!acct_name || (!proto && !protocol)) - return; -diff -Nur pidgin-2.10.7/libpurple/buddyicon.c pidgin-2.10.7-nonprism/libpurple/buddyicon.c ---- pidgin-2.10.7/libpurple/buddyicon.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/buddyicon.c 2013-08-16 23:28:49.244233493 -0300 -@@ -1099,18 +1099,6 @@ - { - PurpleAccount *account = purple_buddy_get_account((PurpleBuddy *)node); - const char *prpl_id = purple_account_get_protocol_id(account); -- -- if (g_str_equal(prpl_id, "prpl-yahoo") || g_str_equal(prpl_id, "prpl-yahoojp")) -- { -- int checksum = purple_blist_node_get_int(node, "icon_checksum"); -- if (checksum != 0) -- { -- char *checksum_str = g_strdup_printf("%i", checksum); -- purple_blist_node_remove_setting(node, "icon_checksum"); -- purple_blist_node_set_string(node, "icon_checksum", checksum_str); -- g_free(checksum_str); -- } -- } - } - } - } -diff -Nur pidgin-2.10.7/libpurple/ft.h pidgin-2.10.7-nonprism/libpurple/ft.h ---- pidgin-2.10.7/libpurple/ft.h 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/ft.h 2013-08-16 22:51:20.590085226 -0300 -@@ -470,8 +470,6 @@ - * can be used to jump backward in the file if the protocol detects - * that some bit of data needs to be resent or has been sent twice. - * -- * It's used for pausing and resuming an oscar file transfer. -- * - * @param xfer The file transfer. - * @param bytes_sent The new current position in the file. If we're - * sending a file then this is the byte that we will -diff -Nur pidgin-2.10.7/libpurple/gaim-compat.h pidgin-2.10.7-nonprism/libpurple/gaim-compat.h ---- pidgin-2.10.7/libpurple/gaim-compat.h 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/gaim-compat.h 2013-08-16 23:33:16.372629159 -0300 -@@ -2302,16 +2302,8 @@ - #define gaim_init_ssl_plugin purple_init_ssl_plugin - #define gaim_init_ssl_openssl_plugin purple_init_ssl_openssl_plugin - #define gaim_init_ssl_gnutls_plugin purple_init_ssl_gnutls_plugin --#define gaim_init_gg_plugin purple_init_gg_plugin - #define gaim_init_jabber_plugin purple_init_jabber_plugin --#define gaim_init_sametime_plugin purple_init_sametime_plugin --#define gaim_init_msn_plugin purple_init_msn_plugin --#define gaim_init_novell_plugin purple_init_novell_plugin --#define gaim_init_qq_plugin purple_init_qq_plugin - #define gaim_init_simple_plugin purple_init_simple_plugin --#define gaim_init_yahoo_plugin purple_init_yahoo_plugin - #define gaim_init_zephyr_plugin purple_init_zephyr_plugin --#define gaim_init_aim_plugin purple_init_aim_plugin --#define gaim_init_icq_plugin purple_init_icq_plugin - - #endif /* _GAIM_COMPAT_H_ */ -diff -Nur pidgin-2.10.7/libpurple/internal.h pidgin-2.10.7-nonprism/libpurple/internal.h ---- pidgin-2.10.7/libpurple/internal.h 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/internal.h 2013-08-17 00:24:37.244172407 -0300 -@@ -43,7 +43,7 @@ - * - * The Singular/Plural/Number ngettext dummy definition below was - * taken from an email to the texinfo mailing list by Manuel Guerrero. -- * Thank you Manuel, and thank you Alex's good friend Google. -+ * Thank you Manuel. - */ - #ifdef ENABLE_NLS - # include <locale.h> -diff -Nur pidgin-2.10.7/libpurple/media/backend-fs2.c pidgin-2.10.7-nonprism/libpurple/media/backend-fs2.c ---- pidgin-2.10.7/libpurple/media/backend-fs2.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/media/backend-fs2.c 2013-08-17 00:23:19.488440821 -0300 -@@ -1661,18 +1661,6 @@ - g_object_set(G_OBJECT(session->session), - "no-rtcp-timeout", 0, NULL); - -- /* -- * Hack to make x264 work with Gmail video. -- */ -- if (is_nice && !strcmp(sess_id, "google-video")) { -- FsElementAddedNotifier *notifier = -- fs_element_added_notifier_new(); -- g_signal_connect(G_OBJECT(notifier), "element-added", -- G_CALLBACK(gst_element_added_cb), NULL); -- fs_element_added_notifier_add(notifier, -- GST_BIN(priv->conference)); -- } -- - session->id = g_strdup(sess_id); - session->backend = self; - session->type = type; -diff -Nur pidgin-2.10.7/libpurple/plugins/psychic.c pidgin-2.10.7-nonprism/libpurple/plugins/psychic.c ---- pidgin-2.10.7/libpurple/plugins/psychic.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/plugins/psychic.c 2013-08-27 21:18:22.251908751 -0300 -@@ -20,8 +20,7 @@ - #define PLUGIN_NAME N_("Psychic Mode") - #define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation") - #define PLUGIN_DESC N_("Causes conversation windows to appear as other" \ -- " users begin to message you. This works for" \ -- " AIM, ICQ, XMPP, Sametime, and Yahoo!") -+ " users begin to message you. This works for XMPP") - #define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>" - - -diff -Nur pidgin-2.10.7/libpurple/pounce.c pidgin-2.10.7-nonprism/libpurple/pounce.c ---- pidgin-2.10.7/libpurple/pounce.c 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/pounce.c 2013-08-16 23:02:20.671021669 -0300 -@@ -409,7 +409,6 @@ - g_free(data->account_name); - data->account_name = g_strdup(buffer); - tmp = data->protocol_id; -- data->protocol_id = g_strdup(_purple_oscar_convert(buffer, tmp)); - g_free(tmp); - } - else if (purple_strequal(element_name, "pouncee")) { -diff -Nur pidgin-2.10.7/libpurple/protocols/Makefile.am pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.am ---- pidgin-2.10.7/libpurple/protocols/Makefile.am 2013-02-11 07:16:51.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.am 2013-08-16 22:37:55.011207011 -0300 -@@ -1,5 +1,5 @@ - EXTRA_DIST = Makefile.mingw - --DIST_SUBDIRS = bonjour gg irc jabber msn myspace mxit novell null oscar sametime silc silc10 simple yahoo zephyr -+DIST_SUBDIRS = bonjour irc jabber null silc silc10 simple zephyr - - SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS) -diff -Nur pidgin-2.10.7/libpurple/protocols/Makefile.in pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.in ---- pidgin-2.10.7/libpurple/protocols/Makefile.in 2013-02-11 07:17:19.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/protocols/Makefile.in 2013-08-16 23:50:36.651423353 -0300 -@@ -160,8 +160,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -223,8 +221,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -365,7 +361,7 @@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ - EXTRA_DIST = Makefile.mingw --DIST_SUBDIRS = bonjour gg irc jabber msn myspace mxit novell null oscar sametime silc silc10 simple yahoo zephyr -+DIST_SUBDIRS = bonjour irc jabber null silc silc10 simple zephyr - SUBDIRS = $(DYNAMIC_PRPLS) $(STATIC_PRPLS) - all: all-recursive - -diff -Nur pidgin-2.10.7/libpurple/prpl.h pidgin-2.10.7-nonprism/libpurple/prpl.h ---- pidgin-2.10.7/libpurple/prpl.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/prpl.h 2013-08-16 22:29:46.145754932 -0300 -@@ -161,15 +161,11 @@ - - /** - * Notify on new mail. -- * -- * MSN and Yahoo notify you when you have new mail. - */ - OPT_PROTO_MAIL_CHECK = 0x00000020, - - /** - * Images in IMs. -- * -- * Oscar lets you send images in direct IMs. - */ - OPT_PROTO_IM_IMAGE = 0x00000040, - -@@ -184,16 +180,13 @@ - /** - * Allows font size to be specified in sane point size - * -- * Probably just XMPP and Y!M -+ * Probably just XMPP - */ - OPT_PROTO_USE_POINTSIZE = 0x00000100, - - /** - * Set the Register button active even when the username has not - * been specified. -- * -- * Gadu-Gadu doesn't need a username to register new account (because -- * usernames are assigned by the server). - */ - OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200, - -@@ -467,9 +460,7 @@ - void (*convo_closed)(PurpleConnection *, const char *who); - - /** -- * Convert the username @a who to its canonical form. (For example, -- * AIM treats "fOo BaR" and "foobar" as the same user; this function -- * should return the same normalized string for both of those.) -+ * Convert the username @a who to its canonical form. - */ - const char *(*normalize)(const PurpleAccount *, const char *who); - -@@ -923,7 +914,7 @@ - * @param who Whose attention to request. - * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. 0 if prpl only defines one -- * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). -+ * , but some protocols define more. - * - * Note that you can't send arbitrary PurpleAttentionType's, because there is - * only a fixed set of attention commands. -diff -Nur pidgin-2.10.7/libpurple/purple-url-handler pidgin-2.10.7-nonprism/libpurple/purple-url-handler ---- pidgin-2.10.7/libpurple/purple-url-handler 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/purple-url-handler 2013-08-16 21:16:42.951304560 -0300 -@@ -117,70 +117,6 @@ - def addbuddy(account, screenname, group="", alias=""): - cpurple.PurpleBlistRequestAddBuddy(account, screenname, group, alias) - -- --def aim(uri): -- protocol = "prpl-aim" -- match = re.match(r"^aim:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid aim URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- accountname = params.get("account", "") -- screenname = params.get("screenname", "") -- -- account = findaccount(protocol, accountname) -- -- if command.lower() == "goim": -- goim(account, screenname, params.get("message")) -- elif command.lower() == "gochat": -- gochat(account, params) -- elif command.lower() == "addbuddy": -- addbuddy(account, screenname, params.get("group", "")) -- --def gg(uri): -- protocol = "prpl-gg" -- match = re.match(r"^gg:(.*)", uri) -- if not match: -- print "Invalid gg URI: %s" % uri -- return -- -- screenname = urllib.unquote_plus(match.group(1)) -- account = findaccount(protocol) -- goim(account, screenname) -- --def icq(uri): -- protocol = "prpl-icq" -- match = re.match(r"^icq:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid icq URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- accountname = params.get("account", "") -- screenname = params.get("screenname", "") -- -- account = findaccount(protocol, accountname) -- -- if command.lower() == "goim": -- goim(account, screenname, params.get("message")) -- elif command.lower() == "gochat": -- gochat(account, params) -- elif command.lower() == "addbuddy": -- addbuddy(account, screenname, params.get("group", "")) -- - def irc(uri): - protocol = "prpl-irc" - match = re.match(r"^irc:(//([^/]*))?/?([^?]*)(\?(.*))?", uri) -@@ -221,34 +157,6 @@ - channel = "#" + channel - gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg")) - --def msnim(uri): -- protocol = "prpl-msn" -- match = re.match(r"^msnim:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid msnim URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- screenname = params.get("contact", "") -- -- account = findaccount(protocol) -- -- if command.lower() == "chat": -- goim(account, screenname) -- elif command.lower() == "add": -- addbuddy(account, screenname) -- --def myim(uri): -- protocol = "prpl-myspace" -- print "TODO: send uri: ", uri -- assert False, "Not implemented" -- - def sip(uri): - protocol = "prpl-simple" - match = re.match(r"^sip:(.*)", uri) -@@ -300,57 +208,6 @@ - else: - goim(account, screenname) - --def gtalk(uri): -- protocol = "prpl-jabber" -- match = re.match(r"^gtalk:([^?]*)(\?(.*))", uri) -- if not match: -- print "Invalid gtalk URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- paramstring = match.group(3) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- accountname = params.get("from_jid", "") -- jid = params.get("jid", "") -- -- account = findaccount(protocol, accountname) -- -- if command.lower() == "chat": -- goim(account, jid) -- elif command.lower() == "call": -- # XXX V&V prompt to establish call -- goim(account, jid) -- --def ymsgr(uri): -- protocol = "prpl-yahoo" -- match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri) -- if not match: -- print "Invalid ymsgr URI: %s" % uri -- return -- -- command = urllib.unquote_plus(match.group(1)) -- screenname = urllib.unquote_plus(match.group(3)) -- paramstring = match.group(5) -- params = {} -- if paramstring: -- for param in paramstring.split("&"): -- key, value = extendlist(param.split("=", 1), 2, "") -- params[key] = urllib.unquote_plus(value) -- -- account = findaccount(protocol) -- -- if command.lower() == "sendim": -- goim(account, screenname, params.get("m")) -- elif command.lower() == "chat": -- gochat(account, {"room": screenname}) -- elif command.lower() == "addfriend": -- addbuddy(account, screenname) -- -- - def main(argv=sys.argv): - if len(argv) != 2 or argv[1] == "--help" or argv[1] == "-h": - print "Usage: %s URI" % argv[0] -diff -Nur pidgin-2.10.7/libpurple/savedstatuses.c pidgin-2.10.7-nonprism/libpurple/savedstatuses.c ---- pidgin-2.10.7/libpurple/savedstatuses.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/savedstatuses.c 2013-08-16 22:52:44.582754543 -0300 -@@ -387,7 +387,6 @@ - const char *protocol; - acct_name = xmlnode_get_data(node); - protocol = xmlnode_get_attrib(node, "protocol"); -- protocol = _purple_oscar_convert(acct_name, protocol); /* XXX: Remove */ - if ((acct_name != NULL) && (protocol != NULL)) - ret->account = purple_accounts_find(acct_name, protocol); - g_free(acct_name); -diff -Nur pidgin-2.10.7/libpurple/server.h pidgin-2.10.7-nonprism/libpurple/server.h ---- pidgin-2.10.7/libpurple/server.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/server.h 2013-08-16 23:30:04.149920853 -0300 -@@ -69,7 +69,7 @@ - * @param who Whose attention to request. - * @param type_code An index into the prpl's attention_types list determining the type - * of the attention request command to send. 0 if prpl only defines one -- * (for example, Yahoo and MSN), but some protocols define more (MySpaceIM). -+ * , but some protocols define more. - * - * Note that you can't send arbitrary PurpleAttentionType's, because there is - * only a fixed set of attention commands. -diff -Nur pidgin-2.10.7/libpurple/status.h pidgin-2.10.7-nonprism/libpurple/status.h ---- pidgin-2.10.7/libpurple/status.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/status.h 2013-08-16 22:52:22.542054119 -0300 -@@ -43,8 +43,7 @@ - * one of your AIM buddies has set himself as "away." You have a - * PurpleBuddy node for this person in your buddy list. Purple wants - * to mark this buddy as "away," so it creates a new PurpleStatus. -- * The PurpleStatus has its PurpleStatusType set to the "away" state -- * for the oscar PRPL. The PurpleStatus also contains the buddy's -+ * The PurpleStatus also contains the buddy's - * away message. PurpleStatuses are sometimes saved, depending on - * the context. The current PurpleStatuses associated with each of - * your accounts are saved so that the next time you start Purple, -diff -Nur pidgin-2.10.7/libpurple/tests/check_libpurple.c pidgin-2.10.7-nonprism/libpurple/tests/check_libpurple.c ---- pidgin-2.10.7/libpurple/tests/check_libpurple.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/check_libpurple.c 2013-08-16 22:55:33.731462302 -0300 -@@ -88,8 +88,6 @@ - srunner_add_suite(sr, jabber_digest_md5_suite()); - srunner_add_suite(sr, jabber_jutil_suite()); - srunner_add_suite(sr, jabber_scram_suite()); -- srunner_add_suite(sr, oscar_util_suite()); -- srunner_add_suite(sr, yahoo_util_suite()); - srunner_add_suite(sr, util_suite()); - srunner_add_suite(sr, xmlnode_suite()); - -diff -Nur pidgin-2.10.7/libpurple/tests/Makefile.am pidgin-2.10.7-nonprism/libpurple/tests/Makefile.am ---- pidgin-2.10.7/libpurple/tests/Makefile.am 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/Makefile.am 2013-08-16 22:56:03.189064778 -0300 -@@ -14,8 +14,6 @@ - test_jabber_digest_md5.c \ - test_jabber_jutil.c \ - test_jabber_scram.c \ -- test_oscar_util.c \ -- test_yahoo_util.c \ - test_util.c \ - test_xmlnode.c \ - $(top_builddir)/libpurple/util.h -@@ -31,8 +29,6 @@ - - check_libpurple_LDADD=\ - $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ -- $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ -- $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ - $(top_builddir)/libpurple/libpurple.la \ - @CHECK_LIBS@ \ - $(GLIB_LIBS) -diff -Nur pidgin-2.10.7/libpurple/tests/Makefile.in pidgin-2.10.7-nonprism/libpurple/tests/Makefile.in ---- pidgin-2.10.7/libpurple/tests/Makefile.in 2013-02-11 07:17:23.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/Makefile.in 2013-08-16 23:53:20.713146759 -0300 -@@ -65,8 +65,8 @@ - CONFIG_CLEAN_VPATH_FILES = - am__check_libpurple_SOURCES_DIST = check_libpurple.c tests.h \ - test_cipher.c test_jabber_caps.c test_jabber_digest_md5.c \ -- test_jabber_jutil.c test_jabber_scram.c test_oscar_util.c \ -- test_yahoo_util.c test_util.c test_xmlnode.c \ -+ test_jabber_jutil.c test_jabber_scram.c \ -+ test_util.c test_xmlnode.c \ - $(top_builddir)/libpurple/util.h - @HAVE_CHECK_TRUE@am_check_libpurple_OBJECTS = \ - @HAVE_CHECK_TRUE@ check_libpurple-check_libpurple.$(OBJEXT) \ -@@ -75,15 +75,11 @@ - @HAVE_CHECK_TRUE@ check_libpurple-test_jabber_digest_md5.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_jabber_jutil.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_jabber_scram.$(OBJEXT) \ --@HAVE_CHECK_TRUE@ check_libpurple-test_oscar_util.$(OBJEXT) \ --@HAVE_CHECK_TRUE@ check_libpurple-test_yahoo_util.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_util.$(OBJEXT) \ - @HAVE_CHECK_TRUE@ check_libpurple-test_xmlnode.$(OBJEXT) - check_libpurple_OBJECTS = $(am_check_libpurple_OBJECTS) - am__DEPENDENCIES_1 = - @HAVE_CHECK_TRUE@check_libpurple_DEPENDENCIES = $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/libpurple.la \ - @HAVE_CHECK_TRUE@ $(am__DEPENDENCIES_1) - AM_V_lt = $(am__v_lt_@AM_V@) -@@ -177,8 +173,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -240,8 +234,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -389,8 +381,6 @@ - @HAVE_CHECK_TRUE@ test_jabber_digest_md5.c \ - @HAVE_CHECK_TRUE@ test_jabber_jutil.c \ - @HAVE_CHECK_TRUE@ test_jabber_scram.c \ --@HAVE_CHECK_TRUE@ test_oscar_util.c \ --@HAVE_CHECK_TRUE@ test_yahoo_util.c \ - @HAVE_CHECK_TRUE@ test_util.c \ - @HAVE_CHECK_TRUE@ test_xmlnode.c \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/util.h -@@ -406,8 +396,6 @@ - - @HAVE_CHECK_TRUE@check_libpurple_LDADD = \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ --@HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ - @HAVE_CHECK_TRUE@ $(top_builddir)/libpurple/libpurple.la \ - @HAVE_CHECK_TRUE@ @CHECK_LIBS@ \ - @HAVE_CHECK_TRUE@ $(GLIB_LIBS) -@@ -471,10 +459,8 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_jabber_digest_md5.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_jabber_jutil.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_jabber_scram.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_oscar_util.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_util.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_xmlnode.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_libpurple-test_yahoo_util.Po@am__quote@ - - .c.o: - @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@@ -581,34 +567,6 @@ - @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ - @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_jabber_scram.obj `if test -f 'test_jabber_scram.c'; then $(CYGPATH_W) 'test_jabber_scram.c'; else $(CYGPATH_W) '$(srcdir)/test_jabber_scram.c'; fi` - --check_libpurple-test_oscar_util.o: test_oscar_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_oscar_util.o -MD -MP -MF $(DEPDIR)/check_libpurple-test_oscar_util.Tpo -c -o check_libpurple-test_oscar_util.o `test -f 'test_oscar_util.c' || echo '$(srcdir)/'`test_oscar_util.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_oscar_util.Tpo $(DEPDIR)/check_libpurple-test_oscar_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_oscar_util.c' object='check_libpurple-test_oscar_util.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_oscar_util.o `test -f 'test_oscar_util.c' || echo '$(srcdir)/'`test_oscar_util.c -- --check_libpurple-test_oscar_util.obj: test_oscar_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_oscar_util.obj -MD -MP -MF $(DEPDIR)/check_libpurple-test_oscar_util.Tpo -c -o check_libpurple-test_oscar_util.obj `if test -f 'test_oscar_util.c'; then $(CYGPATH_W) 'test_oscar_util.c'; else $(CYGPATH_W) '$(srcdir)/test_oscar_util.c'; fi` --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_oscar_util.Tpo $(DEPDIR)/check_libpurple-test_oscar_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_oscar_util.c' object='check_libpurple-test_oscar_util.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_oscar_util.obj `if test -f 'test_oscar_util.c'; then $(CYGPATH_W) 'test_oscar_util.c'; else $(CYGPATH_W) '$(srcdir)/test_oscar_util.c'; fi` -- --check_libpurple-test_yahoo_util.o: test_yahoo_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_yahoo_util.o -MD -MP -MF $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo -c -o check_libpurple-test_yahoo_util.o `test -f 'test_yahoo_util.c' || echo '$(srcdir)/'`test_yahoo_util.c --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo $(DEPDIR)/check_libpurple-test_yahoo_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_yahoo_util.c' object='check_libpurple-test_yahoo_util.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_yahoo_util.o `test -f 'test_yahoo_util.c' || echo '$(srcdir)/'`test_yahoo_util.c -- --check_libpurple-test_yahoo_util.obj: test_yahoo_util.c --@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_yahoo_util.obj -MD -MP -MF $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo -c -o check_libpurple-test_yahoo_util.obj `if test -f 'test_yahoo_util.c'; then $(CYGPATH_W) 'test_yahoo_util.c'; else $(CYGPATH_W) '$(srcdir)/test_yahoo_util.c'; fi` --@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_yahoo_util.Tpo $(DEPDIR)/check_libpurple-test_yahoo_util.Po --@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test_yahoo_util.c' object='check_libpurple-test_yahoo_util.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -c -o check_libpurple-test_yahoo_util.obj `if test -f 'test_yahoo_util.c'; then $(CYGPATH_W) 'test_yahoo_util.c'; else $(CYGPATH_W) '$(srcdir)/test_yahoo_util.c'; fi` -- - check_libpurple-test_util.o: test_util.c - @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_libpurple_CFLAGS) $(CFLAGS) -MT check_libpurple-test_util.o -MD -MP -MF $(DEPDIR)/check_libpurple-test_util.Tpo -c -o check_libpurple-test_util.o `test -f 'test_util.c' || echo '$(srcdir)/'`test_util.c - @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/check_libpurple-test_util.Tpo $(DEPDIR)/check_libpurple-test_util.Po -diff -Nur pidgin-2.10.7/libpurple/tests/test_jabber_caps.c pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_caps.c ---- pidgin-2.10.7/libpurple/tests/test_jabber_caps.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_caps.c 2013-08-17 00:25:08.235128437 -0300 -@@ -33,7 +33,7 @@ - START_TEST(test_calculate_caps) - { - assert_caps_calculate_match("sha1", "GNjxthSckUNvAIoCCJFttjl6VL8=", -- "<query xmlns='http://jabber.org/protocol/disco#info' node='http://tkabber.jabber.ru/#GNjxthSckUNvAIoCCJFttjl6VL8='><identity category='client' type='pc' name='Tkabber'/><x xmlns='jabber:x:data' type='result'><field var='FORM_TYPE' type='hidden'><value>urn:xmpp:dataforms:softwareinfo</value></field><field var='software'><value>Tkabber</value></field><field var='software_version'><value> ( 8.5.5 )</value></field><field var='os'><value>ATmega640-16AU</value></field><field var='os_version'><value/></field></x><feature var='games:board'/><feature var='google:mail:notify'/><feature var='http://jabber.org/protocol/activity'/><feature var='http://jabber.org/protocol/bytestreams'/><feature var='http://jabber.org/protocol/chatstates'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/disco#info'/><feature var='http://jabber.org/protocol/disco#items'/><feature var='http://jabber.org/protocol/feature-neg'/><feature var='http://jabber.org/protocol/geoloc'/><feature var='http://jabber.org/protocol/ibb'/><feature var='http://jabber.org/protocol/iqibb'/><feature var='http://jabber.org/protocol/mood'/><feature var='http://jabber.org/protocol/muc'/><feature var='http://jabber.org/protocol/mute#ancestor'/><feature var='http://jabber.org/protocol/mute#editor'/><feature var='http://jabber.org/protocol/rosterx'/><feature var='http://jabber.org/protocol/si'/><feature var='http://jabber.org/protocol/si/profile/file-transfer'/><feature var='http://jabber.org/protocol/tune'/><feature var='jabber:iq:avatar'/><feature var='jabber:iq:browse'/><feature var='jabber:iq:dtcp'/><feature var='jabber:iq:filexfer'/><feature var='jabber:iq:ibb'/><feature var='jabber:iq:inband'/><feature var='jabber:iq:jidlink'/><feature var='jabber:iq:last'/><feature var='jabber:iq:oob'/><feature var='jabber:iq:privacy'/><feature var='jabber:iq:time'/><feature var='jabber:iq:version'/><feature var='jabber:x:data'/><feature var='jabber:x:event'/><feature var='jabber:x:oob'/><feature var='urn:xmpp:ping'/><feature var='urn:xmpp:receipts'/><feature var='urn:xmpp:time'/></query>"); -+ "<query xmlns='http://jabber.org/protocol/disco#info' node='http://tkabber.jabber.ru/#GNjxthSckUNvAIoCCJFttjl6VL8='><identity category='client' type='pc' name='Tkabber'/><x xmlns='jabber:x:data' type='result'><field var='FORM_TYPE' type='hidden'><value>urn:xmpp:dataforms:softwareinfo</value></field><field var='software'><value>Tkabber</value></field><field var='software_version'><value> ( 8.5.5 )</value></field><field var='os'><value>ATmega640-16AU</value></field><field var='os_version'><value/></field></x><feature var='games:board'/><feature var='http://jabber.org/protocol/activity'/><feature var='http://jabber.org/protocol/bytestreams'/><feature var='http://jabber.org/protocol/chatstates'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/commands'/><feature var='http://jabber.org/protocol/disco#info'/><feature var='http://jabber.org/protocol/disco#items'/><feature var='http://jabber.org/protocol/feature-neg'/><feature var='http://jabber.org/protocol/geoloc'/><feature var='http://jabber.org/protocol/ibb'/><feature var='http://jabber.org/protocol/iqibb'/><feature var='http://jabber.org/protocol/mood'/><feature var='http://jabber.org/protocol/muc'/><feature var='http://jabber.org/protocol/mute#ancestor'/><feature var='http://jabber.org/protocol/mute#editor'/><feature var='http://jabber.org/protocol/rosterx'/><feature var='http://jabber.org/protocol/si'/><feature var='http://jabber.org/protocol/si/profile/file-transfer'/><feature var='http://jabber.org/protocol/tune'/><feature var='jabber:iq:avatar'/><feature var='jabber:iq:browse'/><feature var='jabber:iq:dtcp'/><feature var='jabber:iq:filexfer'/><feature var='jabber:iq:ibb'/><feature var='jabber:iq:inband'/><feature var='jabber:iq:jidlink'/><feature var='jabber:iq:last'/><feature var='jabber:iq:oob'/><feature var='jabber:iq:privacy'/><feature var='jabber:iq:time'/><feature var='jabber:iq:version'/><feature var='jabber:x:data'/><feature var='jabber:x:event'/><feature var='jabber:x:oob'/><feature var='urn:xmpp:ping'/><feature var='urn:xmpp:receipts'/><feature var='urn:xmpp:time'/></query>"); - } - END_TEST - -diff -Nur pidgin-2.10.7/libpurple/tests/test_jabber_jutil.c pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_jutil.c ---- pidgin-2.10.7/libpurple/tests/test_jabber_jutil.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/test_jabber_jutil.c 2013-08-27 22:53:21.524229291 -0300 -@@ -99,19 +99,19 @@ - - START_TEST(test_jabber_id_new) - { -- assert_valid_jid("gmail.com"); -- assert_valid_jid("gmail.com/Test"); -- assert_valid_jid("gmail.com/Test@"); -- assert_valid_jid("gmail.com/@"); -- assert_valid_jid("gmail.com/Test@alkjaweflkj"); -- assert_valid_jid("mark.doliner@gmail.com"); -- assert_valid_jid("mark.doliner@gmail.com/Test12345"); -- assert_valid_jid("mark.doliner@gmail.com/Test@12345"); -- assert_valid_jid("mark.doliner@gmail.com/Te/st@12@//345"); -+ assert_valid_jid("mail.com"); -+ assert_valid_jid("mail.com/Test"); -+ assert_valid_jid("mail.com/Test@"); -+ assert_valid_jid("mail.com/@"); -+ assert_valid_jid("mail.com/Test@alkjaweflkj"); -+ assert_valid_jid("mark.doliner@mail.com"); -+ assert_valid_jid("mark.doliner@mail.com/Test12345"); -+ assert_valid_jid("mark.doliner@mail.com/Test@12345"); -+ assert_valid_jid("mark.doliner@mail.com/Te/st@12@//345"); - assert_valid_jid("わいど@conference.jabber.org"); - assert_valid_jid("まりるーむ@conference.jabber.org"); -- assert_valid_jid("mark.doliner@gmail.com/まりるーむ"); -- assert_valid_jid("mark.doliner@gmail/stuff.org"); -+ assert_valid_jid("mark.doliner@mail.com/まりるーむ"); -+ assert_valid_jid("mark.doliner@mail/stuff.org"); - assert_valid_jid("stuart@nödåtXäYZ.se"); - assert_valid_jid("stuart@nödåtXäYZ.se/まりるーむ"); - assert_valid_jid("mark.doliner@わいど.org"); -@@ -123,17 +123,17 @@ - assert_valid_jid("pa=ul@10.0.42.230"); - assert_valid_jid("pa,ul@10.0.42.230"); - -- assert_invalid_jid("@gmail.com"); -- assert_invalid_jid("@@gmail.com"); -- assert_invalid_jid("mark.doliner@@gmail.com/Test12345"); -- assert_invalid_jid("mark@doliner@gmail.com/Test12345"); -- assert_invalid_jid("@gmail.com/Test@12345"); -+ assert_invalid_jid("@mail.com"); -+ assert_invalid_jid("@@mail.com"); -+ assert_invalid_jid("mark.doliner@@mail.com/Test12345"); -+ assert_invalid_jid("mark@doliner@mail.com/Test12345"); -+ assert_invalid_jid("@mail.com/Test@12345"); - assert_invalid_jid("/Test@12345"); - assert_invalid_jid("mark.doliner@"); - assert_invalid_jid("mark.doliner/"); -- assert_invalid_jid("mark.doliner@gmail_stuff.org"); -- assert_invalid_jid("mark.doliner@gmail[stuff.org"); -- assert_invalid_jid("mark.doliner@gmail\\stuff.org"); -+ assert_invalid_jid("mark.doliner@mail_stuff.org"); -+ assert_invalid_jid("mark.doliner@mail[stuff.org"); -+ assert_invalid_jid("mark.doliner@mail\\stuff.org"); - assert_invalid_jid("paul@[::1]124"); - assert_invalid_jid("paul@2[::1]124/as"); - assert_invalid_jid("paul@まつ.おおかみ/\x01"); -diff -Nur pidgin-2.10.7/libpurple/tests/tests.h pidgin-2.10.7-nonprism/libpurple/tests/tests.h ---- pidgin-2.10.7/libpurple/tests/tests.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/tests/tests.h 2013-08-16 22:56:18.999567027 -0300 -@@ -13,8 +13,6 @@ - Suite * jabber_digest_md5_suite(void); - Suite * jabber_jutil_suite(void); - Suite * jabber_scram_suite(void); --Suite * oscar_util_suite(void); --Suite * yahoo_util_suite(void); - Suite * util_suite(void); - Suite * xmlnode_suite(void); - -diff -Nur pidgin-2.10.7/libpurple/util.c pidgin-2.10.7-nonprism/libpurple/util.c ---- pidgin-2.10.7/libpurple/util.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/util.c 2013-08-16 23:29:38.062434329 -0300 -@@ -3451,8 +3451,7 @@ - * is set to TRUE if this URL is https, otherwise it is set to - * FALSE. But that change will break the API. - * -- * This is important for Yahoo! web messenger login. They now -- * force https login, and if you access the web messenger login -+ * They now force https login, and if you access the web messenger login - * page via http then it redirects you to the https version, but - * purple_util_fetch_url() ignores the "https" and attempts to - * fetch the URL via http again, which gets redirected again. -@@ -4943,18 +4942,6 @@ - return buf; - } - --const char *_purple_oscar_convert(const char *act, const char *protocol) --{ -- if (act && purple_strequal(protocol, "prpl-oscar")) { -- int i; -- for (i = 0; act[i] != '\0'; i++) -- if (!isdigit(act[i])) -- return "prpl-aim"; -- return "prpl-icq"; -- } -- return protocol; --} -- - void purple_restore_default_signal_handlers(void) - { - #ifndef _WIN32 -diff -Nur pidgin-2.10.7/libpurple/util.h pidgin-2.10.7-nonprism/libpurple/util.h ---- pidgin-2.10.7/libpurple/util.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/libpurple/util.h 2013-08-16 23:31:12.535403448 -0300 -@@ -456,8 +456,7 @@ - /** - * Extracts a field of data from HTML. - * -- * This is a scary function. See protocols/msn/msn.c and -- * protocols/yahoo/yahoo_profile.c for example usage. -+ * This is a scary function. - * - * @param str The string to parse. - * @param len The size of str. -@@ -1450,16 +1449,6 @@ - const char *purple_escape_filename(const char *str); - - /** -- * This is added temporarily to assist the split of oscar into aim and icq. -- * This should not be used by plugins. -- * -- * @deprecated This function should not be used in new code and should be -- * removed in 3.0.0. The aim/icq prpl split happened a long -- * time ago, and we don't need to keep migrating old data. -- */ --const char *_purple_oscar_convert(const char *act, const char *protocol); -- --/** - * Restore default signal handlers for signals which might reasonably have - * handlers. This should be called by a fork()'d child process, since child processes - * inherit the handlers of the parent. -diff -Nur pidgin-2.10.7/pidgin/gtkaccount.c pidgin-2.10.7-nonprism/pidgin/gtkaccount.c ---- pidgin-2.10.7/pidgin/gtkaccount.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkaccount.c 2013-08-27 22:45:35.495576079 -0300 -@@ -563,16 +563,11 @@ - if (value == NULL) - value = purple_account_user_split_get_default_value(split); - -- /* Google Talk default domain hackery! */ - menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(dialog->protocol_menu)); - item = gtk_menu_get_active(GTK_MENU(menu)); -- if (value == NULL && g_object_get_data(G_OBJECT(item), "fakegoogle") && -+ if (value == NULL && g_object_get_data(G_OBJECT(item), "") && - !strcmp(purple_account_user_split_get_text(split), _("Domain"))) -- value = "gmail.com"; -- -- if (value == NULL && g_object_get_data(G_OBJECT(item), "fakefacebook") && -- !strcmp(purple_account_user_split_get_text(split), _("Domain"))) -- value = "chat.facebook.com"; -+ value = ""; - - if (value != NULL) - gtk_entry_set_text(GTK_ENTRY(entry), value); -@@ -925,10 +920,6 @@ - model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); - opt_entry->widget = combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); - -- if (g_object_get_data(G_OBJECT(item), "fakefacebook") && -- !strcmp(opt_entry->setting, "connection_security")) -- str_value = "opportunistic_tls"; -- - /* Loop through list of PurpleKeyValuePair items */ - for (node = list; node != NULL; node = node->next) { - if (node->data != NULL) { -diff -Nur pidgin-2.10.7/pidgin/gtkblist.c pidgin-2.10.7-nonprism/pidgin/gtkblist.c ---- pidgin-2.10.7/pidgin/gtkblist.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkblist.c 2013-08-16 23:10:16.549286879 -0300 -@@ -2126,10 +2126,6 @@ - char *temp_vcard; - char *s, *c; - char *alias = NULL; -- GList *aims = NULL; -- GList *icqs = NULL; -- GList *yahoos = NULL; -- GList *msns = NULL; - GList *jabbers = NULL; - - s = temp_vcard = g_strdup(vcard); -@@ -2168,24 +2164,14 @@ - /* We only want to worry about a few fields here. */ - if (!strcmp(field, "FN")) - alias = g_strdup(value); -- else if (!strcmp(field, "X-AIM") || !strcmp(field, "X-ICQ") || -- !strcmp(field, "X-YAHOO") || !strcmp(field, "X-MSN") || -- !strcmp(field, "X-JABBER")) -+ else if (!strcmp(field, "X-JABBER")) - { - char **values = g_strsplit(value, ":", 0); - char **im; - - for (im = values; *im != NULL; im++) - { -- if (!strcmp(field, "X-AIM")) -- aims = g_list_append(aims, g_strdup(*im)); -- else if (!strcmp(field, "X-ICQ")) -- icqs = g_list_append(icqs, g_strdup(*im)); -- else if (!strcmp(field, "X-YAHOO")) -- yahoos = g_list_append(yahoos, g_strdup(*im)); -- else if (!strcmp(field, "X-MSN")) -- msns = g_list_append(msns, g_strdup(*im)); -- else if (!strcmp(field, "X-JABBER")) -+ if (!strcmp(field, "X-JABBER")) - jabbers = g_list_append(jabbers, g_strdup(*im)); - } - -@@ -2195,18 +2181,13 @@ - - g_free(temp_vcard); - -- if (aims == NULL && icqs == NULL && yahoos == NULL && -- msns == NULL && jabbers == NULL) -+ if (jabbers == NULL) - { - g_free(alias); - - return FALSE; - } - -- add_buddies_from_vcard("prpl-aim", group, aims, alias); -- add_buddies_from_vcard("prpl-icq", group, icqs, alias); -- add_buddies_from_vcard("prpl-yahoo", group, yahoos, alias); -- add_buddies_from_vcard("prpl-msn", group, msns, alias); - add_buddies_from_vcard("prpl-jabber", group, jabbers, alias); - - g_free(alias); -diff -Nur pidgin-2.10.7/pidgin/gtkdialogs.c pidgin-2.10.7-nonprism/pidgin/gtkdialogs.c ---- pidgin-2.10.7/pidgin/gtkdialogs.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkdialogs.c 2013-08-16 21:37:21.863154130 -0300 -@@ -615,16 +615,6 @@ - #endif - #endif - --#if defined(_WIN32) || defined(USE_INTERNAL_LIBGADU) -- g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Internal<br/>"); --#else --#ifdef HAVE_LIBGADU -- g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Enabled<br/>"); --#else -- g_string_append(str, " <b>Gadu-Gadu library (libgadu):</b> Disabled<br/>"); --#endif --#endif -- - #ifdef USE_GTKSPELL - g_string_append(str, " <b>GtkSpell:</b> Enabled<br/>"); - #else -diff -Nur pidgin-2.10.7/pidgin/gtkimhtml.c pidgin-2.10.7-nonprism/pidgin/gtkimhtml.c ---- pidgin-2.10.7/pidgin/gtkimhtml.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkimhtml.c 2013-08-16 22:59:51.862994429 -0300 -@@ -2440,7 +2440,6 @@ - static gboolean smooth_scroll_cb(gpointer data); - - /* -- <KingAnt> marv: The two IM image functions in oscar are purple_odc_send_im and purple_odc_incoming - - - [19:58] <Robot101> marv: images go into the imgstore, a refcounted... well.. hash. :) -diff -Nur pidgin-2.10.7/pidgin/gtknotify.c pidgin-2.10.7-nonprism/pidgin/gtknotify.c ---- pidgin-2.10.7/pidgin/gtknotify.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtknotify.c 2013-08-27 23:37:23.037593200 -0300 -@@ -1263,10 +1263,6 @@ - command = g_strdup_printf("xdg-open %s", escaped); - g_free(tmp); - } -- else if (purple_running_osx() == TRUE) -- { -- command = g_strdup_printf("open %s", escaped); -- } - else if (!strcmp(web_browser, "epiphany") || - !strcmp(web_browser, "galeon")) - { -@@ -1289,30 +1285,31 @@ - { - command = g_strdup_printf("kfmclient openURL %s", escaped); - /* -- * Does Konqueror have options to open in new tab -+ * Does Konqueror-libre have options to open in new tab - * and/or current window? - */ - } -- else if (!strcmp(web_browser, "mozilla") || -- !strcmp(web_browser, "mozilla-firebird") || -- !strcmp(web_browser, "firefox") || -- !strcmp(web_browser, "seamonkey")) -+ else if (!strcmp(web_browser, "iceweasel") || -+ !strcmp(web_browser, "icecat") || -+ !strcmp(web_browser, "iceape")) - { - char *args = ""; - - command = g_strdup_printf("%s %s", web_browser, escaped); - - /* -- * Firefox 0.9 and higher require a "-a firefox" option when -+ * Iceweasel-libre 0.9 and higher require a "-a iceweasel" option when - * using -remote commands. This breaks older versions of - * mozilla. So we include this other handly little string -- * when calling firefox. If the API for remote calls changes -- * any more in firefox then firefox should probably be split -+ * when calling iceweasel. If the API for remote calls changes -+ * any more in iceweasel then iceweasel should probably be split - * apart from mozilla-firebird and mozilla... but this is good - * for now. - */ -- if (!strcmp(web_browser, "firefox")) -- args = "-a firefox"; -+ if (!strcmp(web_browser, "iceweasel")) -+ args = "-a iceweasel"; -+ else if (!strcmp(web_browser, "icecat")) -+ args = "-a icecat"; - - if (place == PIDGIN_BROWSER_NEW_WINDOW) - remote_command = g_strdup_printf("%s %s -remote " -@@ -1327,58 +1324,12 @@ - "openURL(%s)", - web_browser, args, escaped); - } -- else if (!strcmp(web_browser, "netscape")) -- { -- command = g_strdup_printf("netscape %s", escaped); -- -- if (place == PIDGIN_BROWSER_NEW_WINDOW) -- { -- remote_command = g_strdup_printf("netscape -remote " -- "openURL(%s,new-window)", -- escaped); -- } -- else if (place == PIDGIN_BROWSER_CURRENT) -- { -- remote_command = g_strdup_printf("netscape -remote " -- "openURL(%s)", escaped); -- } -- } -- else if (!strcmp(web_browser, "opera")) -- { -- if (place == PIDGIN_BROWSER_NEW_WINDOW) -- command = g_strdup_printf("opera -newwindow %s", escaped); -- else if (place == PIDGIN_BROWSER_NEW_TAB) -- command = g_strdup_printf("opera -newpage %s", escaped); -- else if (place == PIDGIN_BROWSER_CURRENT) -- { -- remote_command = g_strdup_printf("opera -remote " -- "openURL(%s)", escaped); -- command = g_strdup_printf("opera %s", escaped); -- } -- else -- command = g_strdup_printf("opera %s", escaped); -- -- } -- else if (!strcmp(web_browser, "google-chrome")) -- { -- /* Google Chrome doesn't have command-line arguments that control the -- * opening of links from external calls. This is controlled solely from -- * a preference within Google Chrome. */ -- command = g_strdup_printf("google-chrome %s", escaped); -- } -- else if (!strcmp(web_browser, "chrome")) -- { -- /* Chromium doesn't have command-line arguments that control the -- * opening of links from external calls. This is controlled solely from -- * a preference within Chromium. */ -- command = g_strdup_printf("chrome %s", escaped); -- } -- else if (!strcmp(web_browser, "chromium-browser")) -+ else if (!strcmp(web_browser, "chromium")) - { -- /* Chromium doesn't have command-line arguments that control the -+ /* Chromium-libre doesn't have command-line arguments that control the - * opening of links from external calls. This is controlled solely from -- * a preference within Chromium. */ -- command = g_strdup_printf("chromium-browser %s", escaped); -+ * a preference within Chromium-libre. */ -+ command = g_strdup_printf("chromium %s", escaped); - } - else if (!strcmp(web_browser, "custom")) - { -diff -Nur pidgin-2.10.7/pidgin/gtkprefs.c pidgin-2.10.7-nonprism/pidgin/gtkprefs.c ---- pidgin-2.10.7/pidgin/gtkprefs.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkprefs.c 2013-08-27 22:55:58.523782666 -0300 -@@ -1851,24 +1851,15 @@ - - /* Sorted reverse alphabetically */ - static const struct browser possible_browsers[] = { -- {N_("Seamonkey"), "seamonkey"}, -- {N_("Opera"), "opera"}, -- {N_("Netscape"), "netscape"}, -- {N_("Mozilla"), "mozilla"}, -- {N_("Konqueror"), "kfmclient"}, -- {N_("Google Chrome"), "google-chrome"}, -- /* Do not move the line below. Code below expects gnome-open to be in -- * this list immediately after xdg-open! */ -+ {N_("Iceape-libre"), "iceape"}, -+ {N_("Konqueror-libre"), "kfmclient"}, - {N_("Desktop Default"), "xdg-open"}, - {N_("GNOME Default"), "gnome-open"}, -- {N_("Galeon"), "galeon"}, -- {N_("Firefox"), "firefox"}, -- {N_("Firebird"), "mozilla-firebird"}, -- {N_("Epiphany"), "epiphany"}, -- /* Translators: please do not translate "chromium-browser" here! */ -- {N_("Chromium (chromium-browser)"), "chromium-browser"}, -- /* Translators: please do not translate "chrome" here! */ -- {N_("Chromium (chrome)"), "chrome"} -+ {N_("Iceweasel-libre"), "iceweasel"}, -+ {N_("Icecat"), "icecat"}, -+ {N_("Epiphany-libre"), "epiphany"}, -+ /* Translators: please do not translate "chromium" here! */ -+ {N_("Chromium-libre (chromium)"), "chromium"}, - }; - static const int num_possible_browsers = G_N_ELEMENTS(possible_browsers); - diff -Nur pidgin-2.10.7/pidgin/gtkutils.c pidgin-2.10.7-nonprism/pidgin/gtkutils.c ---- pidgin-2.10.7/pidgin/gtkutils.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkutils.c 2013-08-16 19:59:22.633298587 -0300 +--- a/pidgin/gtkutils.c 2013-02-11 07:16:53.000000000 -0200 ++++ b/pidgin/gtkutils.c 2013-08-16 19:59:22.633298587 -0300 @@ -677,7 +677,6 @@ GdkPixbuf *pixbuf = NULL; GtkSizeGroup *sg; @@ -2315,2616 +65,3 @@ diff -Nur pidgin-2.10.7/pidgin/gtkutils.c pidgin-2.10.7-nonprism/pidgin/gtkutils pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL); gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), -diff -Nur pidgin-2.10.7/pidgin/gtkwhiteboard.c pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.c ---- pidgin-2.10.7/pidgin/gtkwhiteboard.c 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.c 2013-08-16 23:25:21.614375960 -0300 -@@ -339,13 +339,10 @@ - */ - /* XXXX because otherwise gettext will see this string, even though it's - * in an #if 0 block. Remove the XXXX if you want to use this code. -- * But, it really shouldn't be a Yahoo-specific string. ;) */ -+ */ - purple_conv_im_write(PURPLE_CONV_IM(conv), "", XXXX_("Sent Doodle request."), - PURPLE_MESSAGE_NICK | PURPLE_MESSAGE_RECV, time(NULL)); - -- yahoo_doodle_command_send_request(gc, to); -- yahoo_doodle_command_send_ready(gc, to); -- - /* Insert this 'session' in the list. At this point, it's only a requested - * session. - */ -@@ -554,15 +551,13 @@ - if(event->button == 1 && pixmap != NULL) - { - /* If the brush was never moved, express two sets of two deltas That's a -- * 'point,' but not for Yahoo! -+ * 'point,' - */ - /* if((event->x == LastX) && (event->y == LastY)) */ - if(MotionCount == 0) - { - int index; - -- /* For Yahoo!, a (0 0) indicates the end of drawing */ -- /* FIXME: Yahoo Doodle specific! */ - for(index = 0; index < 2; index++) - { - draw_list = g_list_append(draw_list, 0); -diff -Nur pidgin-2.10.7/pidgin/gtkwhiteboard.h pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.h ---- pidgin-2.10.7/pidgin/gtkwhiteboard.h 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/gtkwhiteboard.h 2013-08-27 23:28:41.018759351 -0300 -@@ -37,8 +37,7 @@ - #define BRUSH_STATE_DOWN 1 - #define BRUSH_STATE_MOTION 2 - --/* XXX: This seems duplicated with the Yahoo! Doodle prpl code. -- * XXX: How should they work together? */ -+/* XXX: How should they work together? */ - #define PALETTE_NUM_COLORS 7 - - /** -diff -Nur pidgin-2.10.7/pidgin/Makefile.am pidgin-2.10.7-nonprism/pidgin/Makefile.am ---- pidgin-2.10.7/pidgin/Makefile.am 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/Makefile.am 2013-08-16 21:03:34.936610745 -0300 -@@ -160,10 +160,6 @@ - $(GTK_LIBS) \ - $(top_builddir)/libpurple/libpurple.la - --if USE_INTERNAL_LIBGADU --INTGG_CFLAGS = -DUSE_INTERNAL_LIBGADU --endif -- - AM_CPPFLAGS = \ - -DDATADIR=\"$(datadir)\" \ - -DLIBDIR=\"$(libdir)/pidgin/\" \ -@@ -179,6 +175,5 @@ - $(GTK_CFLAGS) \ - $(DBUS_CFLAGS) \ - $(GTKSPELL_CFLAGS) \ -- $(LIBXML_CFLAGS) \ -- $(INTGG_CFLAGS) -+ $(LIBXML_CFLAGS) - endif # ENABLE_GTK -diff -Nur pidgin-2.10.7/pidgin/Makefile.in pidgin-2.10.7-nonprism/pidgin/Makefile.in ---- pidgin-2.10.7/pidgin/Makefile.in 2013-02-11 07:17:23.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/Makefile.in 2013-08-16 23:56:44.729405978 -0300 -@@ -286,8 +286,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -349,8 +347,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -645,7 +641,6 @@ - @ENABLE_GTK_TRUE@ $(GTK_LIBS) \ - @ENABLE_GTK_TRUE@ $(top_builddir)/libpurple/libpurple.la - --@ENABLE_GTK_TRUE@@USE_INTERNAL_LIBGADU_TRUE@INTGG_CFLAGS = -DUSE_INTERNAL_LIBGADU - @ENABLE_GTK_TRUE@AM_CPPFLAGS = \ - @ENABLE_GTK_TRUE@ -DDATADIR=\"$(datadir)\" \ - @ENABLE_GTK_TRUE@ -DLIBDIR=\"$(libdir)/pidgin/\" \ -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/default.theme.in pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/default.theme.in ---- pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/default.theme.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/default.theme.in 2013-08-16 23:13:41.759061988 -0300 -@@ -28,8 +28,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -47,7 +46,7 @@ - foot-in-mouth.png :-! - shout.png >:o >:O - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - good.png :yes: - bad.png :no: -@@ -75,515 +74,3 @@ - ! skywalker.png C:-) c:-) C:) c:) - ! monkey.png :-(|) :(|) 8-|) - ! cyclops.png O-) o-) -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --shout.png >:o --excited.png :-D :D --moneymouth.png :-$ --foot-in-mouth.png :-! --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --love-over.png (U) (u) --msn.png (M) (m) --cat.png (@) --dog.png (&) --moon.png (S) --star.png (*) --film.png (~) --musical-note.png (8) --mail.png (E) (e) --rose.png (F) (f) --rose-dead.png (W) (w) --clock.png (O) (o) --kiss.png (K) (k) --present.png (G) (g) --cake.png (^) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --drink.png (D) (d) --boy.png (Z) (z) --girl.png (X) (x) --good.png (Y) (y) --bad.png (N) (n) --vampire.png :[ :-[ --goat.png (nah) --sun.png (#) --rainbow.png (R) (r) --quiet.png :-# --teeth.png 8o| --glasses-nerdy.png 8-| --sarcastic.png ^o) --secret.png :-* --sick.png +o( --snail.png (sn) --turtle.png (tu) --plate.png (pl) --bowl.png (||) --pizza.png (pi) --soccerball.png (so) --car.png (au) --airplane.png (ap) --umbrella.png (um) --island.png (ip) --computer.png (co) --mobile.png (mp) --brb.png (brb) --rain.png (st) --highfive.png (h5) --coins.png (mo) --sheep.png (bah) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) --bunny.png ('.') --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --handcuffs.png (%) --console.png (xx) (XX) --fingers-crossed.png (yn) (YN) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --curl-lip.png /:~ /pz /curl_lip --desire.png /:* /se /desire --dazed.png /:| /dazed --party.png /8-) /dy /revel --crying.png /:< /ll /cry --bashful.png /:$ /hx /bashful --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --weep.png /:'( /dk /weep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --act-up.png /:P /tp /act_up --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --doctor.png /:# /feid /SARS --silly.png /:Q /zk /crazy --sick.png /:T /tu /vomit --snicker.png /;p /tx /titter --cute.png /;-D /ka /cute --disdain.png /;d /by /disdain --arrogant.png /;o /am /arrogant --starving.png /:g /jie /starving --sleepy.png /|-) /kun /sleepy --terror.png /:! /jk /terror --hot.png /:L /sweat --smirk.png /:> /hanx /smirk --soldier.png /:; /db /soldier --struggle.png /;f /fendou /struggle --curse.png /:-S /zhm /curse --question.png /? /yiw /question --quiet.png /;x /xu /shh --hypnotized.png /;@ /yun /dizzy --excruciating.png /:8 /zhem /excrutiating --freaked-out.png /;! /shuai /freaked_out --skeleton.png /!!! /kl /skeleton --hammer.png /xx /qiao /hammer --bye.png /bye /zj /bye --go-away.png /go /shan /go --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --jump.png /jump /tiao /jump --search.png /find /zhao /search --lashes.png /& /mm /beautiful_eyebrows --pig.png /pig /zt /pig --cat.png /cat /mm /cat --dog.png /dog /xg /dog --hug-left.png /hug /yb /hug --coins.png /$ /qianc /money --lamp.png /! /dp /lightbulb --bowl.png /cup /bei /cup --cake.png /cake /dg /cake --thunder.png /li /shd /lightning --bomb.png /bome /zhd /bomb --knife.png /kn /dao /knife --soccerball.png /footb /zq /soccer --musical-note.png /music /yy /music --poop.png /shit /bb /shit --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --pill.png /pill /yw /pill --rose.png /rose /mg /rose --wilt.png /fade /dx /wilt --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --love-over.png /break /xs /broken_heart --meeting.png /meeting /hy /meeting --present.png /gift /lw /gift --phone.png /phone /dh /phone --clock.png /time /sj /time --mail.png /email /yj /email --tv.png /TV /ds /TV --sun.png /sun /ty /sun --moon.png /moon /yl /moon --good.png /strong /qiang /thumbs_up --bad.png /weak /ruo /thumbs_down --handshake.png /share /ws /handshake --victory.png /v /shl /victory --beauty.png /<J> /mn /beauty --qq.png /<QQ> /qz /qq --blowkiss.png /<L> /fw /blow_kiss --angry.png /<O> /oh /angry --liquor.png /<B> /bj /baijiu --can.png /<U> /qsh /soda --watermelon.png /<W> /xigua /watermelon --rain.png /<!!> /xy /rain --cloudy.png /<~> /duoy /cloudy --snowman.png /<Z> /xr /snowman --star.png /<*> /xixing /star --girl.png /<00> /nv /woman --boy.png /<11> /nan /man --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --laugh.png *JOKINGLY* --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kissed.png *KISSED* --stop.png *STOP* --kiss.png :-{} :-* --kissing.png *KISSING* --victory.png *YAHOO* --silly.png %) --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --bomb.png @= --thinking.png :-\\ :-/ --good.png *THUMBS\ UP* --shout.png >:o >:O :-@ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --glasses-nerdy.png B) --bulgy-eyes.png %) --freaked-out.png :E --happy.png :) :-) --amorous.png :X --laugh.png :)) --mohawk.png -: --mad-tongue.png X( --messed.png X) --glasses-nerdy.png Q) --doh.png :G --pirate.png P) --shocked.png :O --sidefrown.png :{ --sinister.png :B --smirk.png :, --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/theme pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/theme ---- pidgin-2.10.7/pidgin/pixmaps/emotes/default/24/theme 2013-02-11 07:17:58.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/default/24/theme 2013-08-16 23:15:55.929941297 -0300 -@@ -28,8 +28,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -47,7 +46,7 @@ - foot-in-mouth.png :-! - shout.png >:o >:O - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - good.png :yes: - bad.png :no: -@@ -75,515 +74,3 @@ - ! skywalker.png C:-) c:-) C:) c:) - ! monkey.png :-(|) :(|) 8-|) - ! cyclops.png O-) o-) -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --shout.png >:o --excited.png :-D :D --moneymouth.png :-$ --foot-in-mouth.png :-! --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --love-over.png (U) (u) --msn.png (M) (m) --cat.png (@) --dog.png (&) --moon.png (S) --star.png (*) --film.png (~) --musical-note.png (8) --mail.png (E) (e) --rose.png (F) (f) --rose-dead.png (W) (w) --clock.png (O) (o) --kiss.png (K) (k) --present.png (G) (g) --cake.png (^) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --drink.png (D) (d) --boy.png (Z) (z) --girl.png (X) (x) --good.png (Y) (y) --bad.png (N) (n) --vampire.png :[ :-[ --goat.png (nah) --sun.png (#) --rainbow.png (R) (r) --quiet.png :-# --teeth.png 8o| --glasses-nerdy.png 8-| --sarcastic.png ^o) --secret.png :-* --sick.png +o( --snail.png (sn) --turtle.png (tu) --plate.png (pl) --bowl.png (||) --pizza.png (pi) --soccerball.png (so) --car.png (au) --airplane.png (ap) --umbrella.png (um) --island.png (ip) --computer.png (co) --mobile.png (mp) --brb.png (brb) --rain.png (st) --highfive.png (h5) --coins.png (mo) --sheep.png (bah) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) --bunny.png ('.') --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --handcuffs.png (%) --console.png (xx) (XX) --fingers-crossed.png (yn) (YN) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --curl-lip.png /:~ /pz /curl_lip --desire.png /:* /se /desire --dazed.png /:| /dazed --party.png /8-) /dy /revel --crying.png /:< /ll /cry --bashful.png /:$ /hx /bashful --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --weep.png /:'( /dk /weep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --act-up.png /:P /tp /act_up --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --doctor.png /:# /feid /SARS --silly.png /:Q /zk /crazy --sick.png /:T /tu /vomit --snicker.png /;p /tx /titter --cute.png /;-D /ka /cute --disdain.png /;d /by /disdain --arrogant.png /;o /am /arrogant --starving.png /:g /jie /starving --sleepy.png /|-) /kun /sleepy --terror.png /:! /jk /terror --hot.png /:L /sweat --smirk.png /:> /hanx /smirk --soldier.png /:; /db /soldier --struggle.png /;f /fendou /struggle --curse.png /:-S /zhm /curse --question.png /? /yiw /question --quiet.png /;x /xu /shh --hypnotized.png /;@ /yun /dizzy --excruciating.png /:8 /zhem /excrutiating --freaked-out.png /;! /shuai /freaked_out --skeleton.png /!!! /kl /skeleton --hammer.png /xx /qiao /hammer --bye.png /bye /zj /bye --go-away.png /go /shan /go --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --jump.png /jump /tiao /jump --search.png /find /zhao /search --lashes.png /& /mm /beautiful_eyebrows --pig.png /pig /zt /pig --cat.png /cat /mm /cat --dog.png /dog /xg /dog --hug-left.png /hug /yb /hug --coins.png /$ /qianc /money --lamp.png /! /dp /lightbulb --bowl.png /cup /bei /cup --cake.png /cake /dg /cake --thunder.png /li /shd /lightning --bomb.png /bome /zhd /bomb --knife.png /kn /dao /knife --soccerball.png /footb /zq /soccer --musical-note.png /music /yy /music --poop.png /shit /bb /shit --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --pill.png /pill /yw /pill --rose.png /rose /mg /rose --wilt.png /fade /dx /wilt --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --love-over.png /break /xs /broken_heart --meeting.png /meeting /hy /meeting --present.png /gift /lw /gift --phone.png /phone /dh /phone --clock.png /time /sj /time --mail.png /email /yj /email --tv.png /TV /ds /TV --sun.png /sun /ty /sun --moon.png /moon /yl /moon --good.png /strong /qiang /thumbs_up --bad.png /weak /ruo /thumbs_down --handshake.png /share /ws /handshake --victory.png /v /shl /victory --beauty.png /<J> /mn /beauty --qq.png /<QQ> /qz /qq --blowkiss.png /<L> /fw /blow_kiss --angry.png /<O> /oh /angry --liquor.png /<B> /bj /baijiu --can.png /<U> /qsh /soda --watermelon.png /<W> /xigua /watermelon --rain.png /<!!> /xy /rain --cloudy.png /<~> /duoy /cloudy --snowman.png /<Z> /xr /snowman --star.png /<*> /xixing /star --girl.png /<00> /nv /woman --boy.png /<11> /nan /man --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --laugh.png *JOKINGLY* --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kissed.png *KISSED* --stop.png *STOP* --kiss.png :-{} :-* --kissing.png *KISSING* --victory.png *YAHOO* --silly.png %) --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --bomb.png @= --thinking.png :-\\ :-/ --good.png *THUMBS\ UP* --shout.png >:o >:O :-@ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --hypnotized.png @-) --on-the-phone.png :)] --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --glasses-nerdy.png :-B :-b --quiet.png :-$ --drool.png =P~ =p~ --lying.png :^O :^o --call-me.png :-c --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --laugh.png :)) :-)) --bye.png =; --arrogant.png [-( --thinking.png :-? --waiting.png :-w :-W --at-wits-end.png ~x( ~X( --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --clown.png :o) :O) --doh.png #-o #-O --weep.png :-< --go-away.png :-h --lashes.png ;;) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --silly.png 8-} --clap.png =D> =d> --mad-tongue.png >:P >:p --time-out.png :-t :-T --hug-left.png >:D< >:d< --love-over.png =(( --hot.png #:-S #:-s --rotfl.png =)) :-j :-J --loser.png L-) l-) --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss --cowboy.png <):) --desire.png 8-> --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) -- --# Hidden Yahoo emotes --alien.png =:) >-) --beat-up.png b-( B-( --chicken.png ~:> --coffee.png ~o) ~O) --cow.png 3:-O 3:-o --dance.png \\:D/ \\:d/ --rose.png @};- --dont-know.png :-L :-l --skeleton.png 8-X 8-x --lamp.png *-:) --monkey.png :(|) --coins.png $-) --peace.png :)>- --pig.png :@) --pray.png [-o< [-O< --pumpkin.png (~~) --shame.png [-X [-x --flag.png **== --clover.png %%- --musical-note.png :-" --giggle.png ;)) --worship.png ^:)^ --star.png (*) --waving.png >:/ --talktohand.png :-@ -- --# Only available after activating the Yahoo! Fighter IMVironment --male-fighter1.png o-> O-> --male-fighter2.png o=> O=> --female-fighter.png o-+ O-+ --yin-yang.png (%) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --glasses-nerdy.png B) --bulgy-eyes.png %) --freaked-out.png :E --happy.png :) :-) --amorous.png :X --laugh.png :)) --mohawk.png -: --mad-tongue.png X( --messed.png X) --glasses-nerdy.png Q) --doh.png :G --pirate.png P) --shocked.png :O --sidefrown.png :{ --sinister.png :B --smirk.png :, --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x --! skywalker.png C:-) c:-) C:) c:) --! monkey.png :-(|) :(|) 8-|) --! cyclops.png O-) o-) -- -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/small.theme.in pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/small.theme.in ---- pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/small.theme.in 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/small.theme.in 2013-08-16 23:19:01.815778718 -0300 -@@ -22,8 +22,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -38,7 +37,7 @@ - angel.png O:-) o:-) - shut-mouth.png :-X - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - rose.png @->-- :rose: - phone.png :telephone: -@@ -53,269 +52,3 @@ - neutral.png :| :-| - - # Hidden icons from the default set. -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --excited.png :-D :D --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --star.png (*) --musical-note.png (8) --rose.png (F) (f) --kiss.png (K) (k) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --boy.png (Z) (z) --girl.png (X) (x) --sarcastic.png ^o) --sick.png +o( --plate.png (pl) --mobile.png (mp) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --console.png (xx) (XX) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --party.png /8-) /dy /revel --crying.png /:< /ll /cry --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --sick.png /:T /tu /vomit --sleepy.png /|-) /kun /sleepy --hot.png /:L /sweat --question.png /? /yiw /question --excruciating.png /:8 /zhem /excrutiating --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --search.png /find /zhao /search --hug-left.png /hug /yb /hug --lamp.png /! /dp /lightbulb --thunder.png /li /shd /lightning --musical-note.png /music /yy /music --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --rose.png /rose /mg /rose --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --meeting.png /meeting /hy /meeting --phone.png /phone /dh /phone --tv.png /TV /ds /TV --angry.png /<O> /oh /angry --girl.png /<00> /nv /woman --boy.png /<11> /nan /man -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kiss.png :-{} :-* --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --thinking.png :-\\ :-/ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --drool.png =P~ =p~ --lying.png :^O :^o --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --hot.png #:-S #:-s --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --wink.png ;) ;-) --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --party.png <:-P <:-p -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --happy.png :) :-) --amorous.png :X --pirate.png P) --shocked.png :O --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/theme pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/theme ---- pidgin-2.10.7/pidgin/pixmaps/emotes/small/16/theme 2013-02-11 07:17:58.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/emotes/small/16/theme 2013-08-16 23:17:03.828740061 -0300 -@@ -22,8 +22,7 @@ - - - [XMPP] --# Following XEP-0038 + GTalk + our default set, in default set order --# The GTalk strings come from ticket #3307. -+# Following XEP-0038 + our default set, in default set order - happy.png :) :-) =) - excited.png :-D :-d :D :d =D =d - sad.png :-( :( -@@ -38,7 +37,7 @@ - angel.png O:-) o:-) - shut-mouth.png :-X - --# Following XEP-0038 + GTalk -+# Following XEP-0038 - angry.png >:-( >:( X-( x-( - rose.png @->-- :rose: - phone.png :telephone: -@@ -53,269 +52,3 @@ - neutral.png :| :-| - - # Hidden icons from the default set. -- -- --# Following AIM 6.1 --[AIM] --happy.png :-) :) --wink.png ;-) ;) --sad.png :-( :( --tongue.png :P :p :-P :-p --shocked.png =-O --kiss.png :-* --excited.png :-D :D --embarrassed.png :-[ --angel.png O:-) --thinking.png :-\\ :-/ --crying.png :'( --shut-mouth.png :-X --glasses-cool.png 8-) -- -- --# Following Windows Live Messenger 8.1 --[MSN] --happy.png :) :-) --excited.png :D :d :-D :-d --wink.png ;) ;-) --shocked.png :-O :-o :O :o --tongue.png :-P :P :-p :p --glasses-cool.png (H) (h) --angry.png :@ :-@ --embarrassed.png :$ :-$ --confused.png :S :s :-S :-s --sad.png :( :-( --crying.png :'( --neutral.png :| :-| --devil.png (6) --angel.png (A) (a) --in_love.png (L) (l) --star.png (*) --musical-note.png (8) --rose.png (F) (f) --kiss.png (K) (k) --camera.png (P) (p) --lamp.png (I) (i) --coffee.png (C) (c) --phone.png (T) (t) --hug-left.png ({) --hug-right.png (}) --beer.png (B) (b) --boy.png (Z) (z) --girl.png (X) (x) --sarcastic.png ^o) --sick.png +o( --plate.png (pl) --mobile.png (mp) --dont-know.png :^) --thinking.png *-) --thunder.png (li) --party.png <:o) --eyeroll.png 8-) --sleepy.png |-) -- --# Hidden MSN emotes --cigarette.png (ci) (CI) --console.png (xx) (XX) -- -- --# Following QQ 2006 --[QQ] --shocked.png /:O /jy /surprised --party.png /8-) /dy /revel --crying.png /:< /ll /cry --shut-mouth.png /:X /bz /shut_mouth --sleeping.png /:Z /shui /sleep --embarrassed.png /:-| /gg /embarassed --pissed-off.png /:@ /fn /pissed_off --excited.png /:D /cy /toothy_smile --happy.png /:) /wx /small_smile --sad.png /:( /ng /sad --glasses-cool.png /:+ /kuk /cool --sick.png /:T /tu /vomit --sleepy.png /|-) /kun /sleepy --hot.png /:L /sweat --question.png /? /yiw /question --excruciating.png /:8 /zhem /excrutiating --afraid.png /shake /fad /shake --amorous.png /love /aiq /love --search.png /find /zhao /search --hug-left.png /hug /yb /hug --lamp.png /! /dp /lightbulb --thunder.png /li /shd /lightning --musical-note.png /music /yy /music --coffee.png /coffee /kf /coffee --hungry.png /eat /fan /eat --rose.png /rose /mg /rose --kiss.png /kiss /wen /kiss --in_love.png /heart /xin /heart --meeting.png /meeting /hy /meeting --phone.png /phone /dh /phone --tv.png /TV /ds /TV --angry.png /<O> /oh /angry --girl.png /<00> /nv /woman --boy.png /<11> /nan /man -- -- --# Following ICQ 6.0 --[ICQ] --happy.png :-) :) --neutral.png :-$ --sad.png :-( :( --shocked.png =-O --wink.png ;-) ;) --tongue.png :-P :P :-p :p --music.png [:-} --sleeping.png *TIRED* --crying.png :'( :'-( --sick.png :-! --kiss.png :-{} :-* --embarrassed.png :-[ --devil.png ]:-> --angel.png O:-) --rose.png @}->-- --shut-mouth.png :-X :X :-x :x --thinking.png :-\\ :-/ --beer.png *DRINK* --excited.png :-D :D --glasses-cool.png 8-) --amorous.png *IN\ LOVE* -- -- --# Following Yahoo! Messenger 8.1 --[Yahoo] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --drool.png =P~ =p~ --lying.png :^O :^o --wink.png ;) ;-) --embarrassed.png :"> --mean.png :-> :> --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --hot.png #:-S #:-s --party.png <:-P <:-p --nervous.png :-SS :-Ss :-sS :-ss -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- --# Following Yahoo! Messenger 8.1 --[Yahoo JAPAN] --happy.png :) :-) --question.png :-/ :-\\ --shocked.png :-O :O :-o :o --devil.png >:) --angel.png O:-) o:-) 0:-) --sick.png :-& --sleepy.png (:| --sad.png :( :-( --amorous.png :x :-x :X :-X --angry.png X-( x-( X( x( --crying.png :(( --wink.png ;) ;-) --thinking.png :-? --excited.png :D :-D :d :-d --tongue.png :-P :P :-p :p --glasses-cool.png B-) b-) --neutral.png :| :-| --sleeping.png I-) i-) |-) --kiss.png :-* :* --confused.png :-S :-s --sarcastic.png /:) --eyeroll.png 8-| --hug-left.png >:D< >:d< --party.png <:-P <:-p -- --# Hidden Yahoo emotes --coffee.png ~o) ~O) --rose.png @};- --dont-know.png :-L :-l --lamp.png *-:) --shame.png [-X [-x --musical-note.png :-" --star.png (*) -- -- --# Following MySpaceIM Beta 1.0.697.0 --[MySpaceIM] --excited.png :D :-D --devil.png }:) --confused.png :Z --happy.png :) :-) --amorous.png :X --pirate.png P) --shocked.png :O --neutral.png :| --tongue.png :P :p --pissed-off.png B| --wink.png ;-) ;) --sad.png :[ --kiss.png :x -- --# MXit standard emoticons --[MXit] --happy.png :-) :) --sad.png :-( :( --wink.png ;-) ;) --excited.png :-D :D :-> :> --neutral.png :-| :| --shocked.png :-O :O --tongue.png :-P :P --embarrassed.png :-$ :$ --glasses-cool.png 8-) --in_love.png (H) --rose.png (F) --### Added in v3.0 --boy.png (m) --girl.png (f) --star.png (*) --chilli.png (c) --kiss.png (x) --lamp.png (i) --pissed-off.png :e :-e --shut-mouth.png :-x :x --thunder.png (z) --coffee.png (U) --mrgreen.png (G) --### Added in v5.0 --sick.png :o( --excruciating.png :-{ :{ --amorous.png :-} :} --eyeroll.png 8-o 8o --crying.png :'( --thinking.png :-? :? --drool.png :-~ :~ --sleeping.png :-z :z --lying.png :L) --glasses-nerdy.png 8-| 8| --pirate.png P-) --### Added in v5.9.7 --bored.png :-[ :[ --cold.png :-< :< --confused.png :-, :, --hungry.png :-C :C --stressed.png :-s :s -diff -Nur pidgin-2.10.7/pidgin/pixmaps/Makefile.am pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.am ---- pidgin-2.10.7/pidgin/pixmaps/Makefile.am 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.am 2013-08-17 00:00:17.335924146 -0300 -@@ -204,37 +204,19 @@ - emotes/small/16/scalable/pidgin-emotes.svg - - PROTOCOLS_16_SCALABLE = \ -- protocols/16/scalable/aim.svg \ - protocols/16/scalable/bonjour.svg \ -- protocols/16/scalable/gadu-gadu.svg \ -- protocols/16/scalable/novell.svg \ -- protocols/16/scalable/icq.svg \ - protocols/16/scalable/irc.svg \ - protocols/16/scalable/jabber.svg \ -- protocols/16/scalable/meanwhile.svg \ -- protocols/16/scalable/msn.svg \ - protocols/16/scalable/silc.svg \ - protocols/16/scalable/simple.svg \ -- protocols/16/scalable/yahoo.svg \ - protocols/16/scalable/zephyr.svg - - PROTOCOLS_16 = \ -- protocols/16/aim.png \ - protocols/16/bonjour.png \ -- protocols/16/facebook.png \ -- protocols/16/gadu-gadu.png \ -- protocols/16/google-talk.png \ -- protocols/16/novell.png \ -- protocols/16/icq.png \ - protocols/16/irc.png \ - protocols/16/jabber.png \ -- protocols/16/meanwhile.png \ -- protocols/16/msn.png \ -- protocols/16/mxit.png \ -- protocols/16/myspace.png \ - protocols/16/silc.png \ - protocols/16/simple.png \ -- protocols/16/yahoo.png \ - protocols/16/zephyr.png - - ICONS_16_SCALABLE = \ -@@ -259,72 +241,35 @@ - ICONS_SCALABLE = icons/hicolor/scalable/apps/pidgin.svg - - PROTOCOLS_22_SCALABLE = \ -- protocols/22/scalable/aim.svg \ - protocols/22/scalable/bonjour.svg \ -- protocols/22/scalable/gadu-gadu.svg \ -- protocols/22/scalable/novell.svg \ -- protocols/22/scalable/icq.svg \ - protocols/22/scalable/irc.svg \ - protocols/22/scalable/jabber.svg \ -- protocols/22/scalable/meanwhile.svg \ -- protocols/22/scalable/msn.svg \ - protocols/22/scalable/silc.svg \ - protocols/22/scalable/simple.svg \ -- protocols/22/scalable/yahoo.svg \ - protocols/22/scalable/zephyr.svg - - PROTOCOLS_22 = \ -- protocols/22/aim.png \ - protocols/22/bonjour.png \ -- protocols/22/facebook.png \ -- protocols/22/gadu-gadu.png \ -- protocols/22/google-talk.png \ -- protocols/22/novell.png \ -- protocols/22/icq.png \ - protocols/22/irc.png \ - protocols/22/jabber.png \ -- protocols/22/meanwhile.png \ -- protocols/22/msn.png \ -- protocols/22/mxit.png \ -- protocols/22/myspace.png \ - protocols/22/silc.png \ - protocols/22/simple.png \ -- protocols/22/yahoo.png \ - protocols/22/zephyr.png - - PROTOCOLS_48 = \ -- protocols/48/aim.png \ - protocols/48/bonjour.png \ -- protocols/48/facebook.png \ -- protocols/48/gadu-gadu.png \ -- protocols/48/novell.png \ -- protocols/48/icq.png \ - protocols/48/irc.png \ - protocols/48/jabber.png \ -- protocols/48/meanwhile.png \ -- protocols/48/msn.png \ -- protocols/48/mxit.png \ -- protocols/48/myspace.png \ - protocols/48/silc.png \ - protocols/48/simple.png \ -- protocols/48/yahoo.png \ - protocols/48/zephyr.png - - PROTOCOLS_SCALABLE = \ -- protocols/scalable/aim.svg \ - protocols/scalable/bonjour.svg \ -- protocols/scalable/gadu-gadu.svg \ -- protocols/scalable/google-talk.svg \ -- protocols/scalable/novell.svg \ -- protocols/scalable/icq.svg \ - protocols/scalable/irc.svg \ - protocols/scalable/jabber.svg \ -- protocols/scalable/meanwhile.svg \ -- protocols/scalable/msn.svg \ -- protocols/scalable/mxit.svg \ - protocols/scalable/silc.svg \ - protocols/scalable/simple.svg \ -- protocols/scalable/yahoo.svg \ - protocols/scalable/zephyr.svg - - STATUS_11 = \ -diff -Nur pidgin-2.10.7/pidgin/pixmaps/Makefile.in pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.in ---- pidgin-2.10.7/pidgin/pixmaps/Makefile.in 2013-02-11 07:17:23.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/pixmaps/Makefile.in 2013-08-16 23:59:52.918508551 -0300 -@@ -240,40 +240,19 @@ - emblems/scalable/male.svg emblems/scalable/not-authorized.svg \ - emblems/scalable/secure.svg emblems/scalable/unavailable.svg \ - emblems/scalable/video.svg emblems/scalable/voice.svg \ -- protocols/16/aim.png protocols/16/bonjour.png \ -- protocols/16/facebook.png protocols/16/gadu-gadu.png \ -- protocols/16/google-talk.png protocols/16/novell.png \ -- protocols/16/icq.png protocols/16/irc.png \ -- protocols/16/jabber.png protocols/16/meanwhile.png \ -- protocols/16/msn.png protocols/16/mxit.png \ -- protocols/16/myspace.png protocols/16/silc.png \ -- protocols/16/simple.png protocols/16/yahoo.png \ -- protocols/16/zephyr.png protocols/22/aim.png \ -- protocols/22/bonjour.png protocols/22/facebook.png \ -- protocols/22/gadu-gadu.png protocols/22/google-talk.png \ -- protocols/22/novell.png protocols/22/icq.png \ -- protocols/22/irc.png protocols/22/jabber.png \ -- protocols/22/meanwhile.png protocols/22/msn.png \ -- protocols/22/mxit.png protocols/22/myspace.png \ -- protocols/22/silc.png protocols/22/simple.png \ -- protocols/22/yahoo.png protocols/22/zephyr.png \ -- protocols/48/aim.png protocols/48/bonjour.png \ -- protocols/48/facebook.png protocols/48/gadu-gadu.png \ -- protocols/48/novell.png protocols/48/icq.png \ -- protocols/48/irc.png protocols/48/jabber.png \ -- protocols/48/meanwhile.png protocols/48/msn.png \ -- protocols/48/mxit.png protocols/48/myspace.png \ -- protocols/48/silc.png protocols/48/simple.png \ -- protocols/48/yahoo.png protocols/48/zephyr.png \ -- protocols/scalable/aim.svg protocols/scalable/bonjour.svg \ -- protocols/scalable/gadu-gadu.svg \ -- protocols/scalable/google-talk.svg \ -- protocols/scalable/novell.svg protocols/scalable/icq.svg \ -- protocols/scalable/irc.svg protocols/scalable/jabber.svg \ -- protocols/scalable/meanwhile.svg protocols/scalable/msn.svg \ -- protocols/scalable/mxit.svg protocols/scalable/silc.svg \ -- protocols/scalable/simple.svg protocols/scalable/yahoo.svg \ -- protocols/scalable/zephyr.svg status/11/available.png \ -+ protocols/16/bonjour.png protocols/16/irc.png \ -+ protocols/16/jabber.png protocols/16/silc.png \ -+ protocols/16/simple.png protocols/16/zephyr.png \ -+ protocols/22/bonjour.png protocols/22/irc.png \ -+ protocols/22/jabber.png protocols/22/silc.png \ -+ protocols/22/simple.png protocols/22/zephyr.png \ -+ protocols/48/bonjour.png protocols/48/irc.png \ -+ protocols/48/jabber.png protocols/48/silc.png \ -+ protocols/48/simple.png protocols/48/zephyr.png \ -+ protocols/scalable/bonjour.svg protocols/scalable/irc.svg \ -+ protocols/scalable/jabber.svg protocols/scalable/silc.svg \ -+ protocols/scalable/simple.svg protocols/scalable/zephyr.svg \ -+ status/11/available.png \ - status/11/away.png status/11/busy.png status/11/chat.png \ - status/11/extended-away.png status/11/invisible.png \ - status/11/log-in.png status/11/log-out.png \ -@@ -443,8 +422,6 @@ - FARSTREAM_CFLAGS = @FARSTREAM_CFLAGS@ - FARSTREAM_LIBS = @FARSTREAM_LIBS@ - FGREP = @FGREP@ --GADU_CFLAGS = @GADU_CFLAGS@ --GADU_LIBS = @GADU_LIBS@ - GCONFTOOL = @GCONFTOOL@ - GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@ - GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@ -@@ -506,8 +483,6 @@ - LTLIBOBJS = @LTLIBOBJS@ - MAKEINFO = @MAKEINFO@ - MANIFEST_TOOL = @MANIFEST_TOOL@ --MEANWHILE_CFLAGS = @MEANWHILE_CFLAGS@ --MEANWHILE_LIBS = @MEANWHILE_LIBS@ - MKDIR_P = @MKDIR_P@ - MKINSTALLDIRS = @MKINSTALLDIRS@ - MONO_CFLAGS = @MONO_CFLAGS@ -@@ -850,37 +825,19 @@ - @INSTALL_PIXMAPS_TRUE@ emotes/small/16/scalable/pidgin-emotes.svg - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_16_SCALABLE = \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/aim.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/bonjour.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/gadu-gadu.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/novell.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/icq.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/irc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/jabber.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/meanwhile.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/msn.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/silc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/simple.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/yahoo.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/scalable/zephyr.svg - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_16 = \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/aim.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/bonjour.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/facebook.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/gadu-gadu.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/google-talk.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/novell.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/icq.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/irc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/jabber.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/meanwhile.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/msn.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/mxit.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/myspace.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/silc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/simple.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/16/yahoo.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/16/zephyr.png - - @INSTALL_PIXMAPS_TRUE@ICONS_16_SCALABLE = \ -@@ -899,72 +856,35 @@ - @INSTALL_PIXMAPS_TRUE@ICONS_48 = icons/hicolor/48x48/apps/pidgin.png - @INSTALL_PIXMAPS_TRUE@ICONS_SCALABLE = icons/hicolor/scalable/apps/pidgin.svg - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_22_SCALABLE = \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/aim.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/bonjour.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/gadu-gadu.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/novell.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/icq.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/irc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/jabber.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/meanwhile.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/msn.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/silc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/simple.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/yahoo.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/scalable/zephyr.svg - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_22 = \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/aim.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/bonjour.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/facebook.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/gadu-gadu.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/google-talk.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/novell.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/icq.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/irc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/jabber.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/meanwhile.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/msn.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/mxit.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/myspace.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/silc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/simple.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/22/yahoo.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/22/zephyr.png - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_48 = \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/aim.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/bonjour.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/facebook.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/gadu-gadu.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/novell.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/icq.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/irc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/jabber.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/meanwhile.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/msn.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/mxit.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/myspace.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/silc.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/simple.png \ --@INSTALL_PIXMAPS_TRUE@ protocols/48/yahoo.png \ - @INSTALL_PIXMAPS_TRUE@ protocols/48/zephyr.png - - @INSTALL_PIXMAPS_TRUE@PROTOCOLS_SCALABLE = \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/aim.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/bonjour.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/gadu-gadu.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/google-talk.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/novell.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/icq.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/irc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/jabber.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/meanwhile.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/msn.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/mxit.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/silc.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/simple.svg \ --@INSTALL_PIXMAPS_TRUE@ protocols/scalable/yahoo.svg \ - @INSTALL_PIXMAPS_TRUE@ protocols/scalable/zephyr.svg - - @INSTALL_PIXMAPS_TRUE@STATUS_11 = \ -diff -Nur pidgin-2.10.7/pidgin/plugins/disco/xmppdisco.c pidgin-2.10.7-nonprism/pidgin/plugins/disco/xmppdisco.c ---- pidgin-2.10.7/pidgin/plugins/disco/xmppdisco.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/disco/xmppdisco.c 2013-08-16 23:39:46.921427463 -0300 -@@ -250,9 +250,6 @@ - const char *from; - const char *to; - } disco_type_mappings[] = { -- { "gadu-gadu", "gadu-gadu" }, /* the prpl is prpl-gg, but list_icon returns "gadu-gadu" */ -- { "sametime", "meanwhile" }, -- { "myspaceim", "myspace" }, - { "xmpp", "jabber" }, /* prpl-jabber (mentioned in case the prpl is renamed so this line will match) */ - { NULL, NULL } - }; -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/add_buddy_dialog.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/add_buddy_dialog.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/add_buddy_dialog.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/add_buddy_dialog.c 2013-08-16 21:26:56.293625899 -0300 -@@ -288,21 +288,13 @@ - { - EContact *contact = E_CONTACT(c->data); - const char *name; -- GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells, *ggs; -+ GList *jabbers; - - name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); - -- aims = e_contact_get(contact, E_CONTACT_IM_AIM); - jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER); -- yahoos = e_contact_get(contact, E_CONTACT_IM_YAHOO); -- msns = e_contact_get(contact, E_CONTACT_IM_MSN); -- icqs = e_contact_get(contact, E_CONTACT_IM_ICQ); -- novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE); -- ggs = e_contact_get(contact, E_CONTACT_IM_GADUGADU); -- -- if (aims == NULL && jabbers == NULL && yahoos == NULL && -- msns == NULL && icqs == NULL && novells == NULL && -- ggs == NULL) -+ -+ if (jabbers == NULL) - { - GtkTreeIter iter; - -@@ -315,13 +307,7 @@ - } - else - { -- add_ims(dialog, contact, name, aims, "prpl-aim"); - add_ims(dialog, contact, name, jabbers, "prpl-jabber"); -- add_ims(dialog, contact, name, yahoos, "prpl-yahoo"); -- add_ims(dialog, contact, name, msns, "prpl-msn"); -- add_ims(dialog, contact, name, icqs, "prpl-icq"); -- add_ims(dialog, contact, name, novells, "prpl-novell"); -- add_ims(dialog, contact, name, ggs, "prpl-gg"); - } - } - -@@ -367,7 +353,7 @@ - { - EContact *contact = E_CONTACT(l->data); - const char *name; -- GList *aims, *jabbers, *yahoos, *msns, *icqs, *novells, *ggs; -+ GList *jabbers; - - name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); - -@@ -377,17 +363,9 @@ - continue; - } - -- aims = e_contact_get(contact, E_CONTACT_IM_AIM); - jabbers = e_contact_get(contact, E_CONTACT_IM_JABBER); -- yahoos = e_contact_get(contact, E_CONTACT_IM_YAHOO); -- msns = e_contact_get(contact, E_CONTACT_IM_MSN); -- icqs = e_contact_get(contact, E_CONTACT_IM_ICQ); -- novells = e_contact_get(contact, E_CONTACT_IM_GROUPWISE); -- ggs = e_contact_get(contact, E_CONTACT_IM_GADUGADU); -- -- if (aims == NULL && jabbers == NULL && yahoos == NULL && -- msns == NULL && icqs == NULL && novells == NULL && -- ggs == NULL) -+ -+ if (jabbers == NULL) - { - GtkTreeIter iter; - -@@ -400,13 +378,7 @@ - } - else - { -- add_ims(dialog, contact, name, aims, "prpl-aim"); - add_ims(dialog, contact, name, jabbers, "prpl-jabber"); -- add_ims(dialog, contact, name, yahoos, "prpl-yahoo"); -- add_ims(dialog, contact, name, msns, "prpl-msn"); -- add_ims(dialog, contact, name, icqs, "prpl-icq"); -- add_ims(dialog, contact, name, novells, "prpl-novell"); -- add_ims(dialog, contact, name, ggs, "prpl-gg"); - } - } - } -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/gevolution.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevolution.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/gevolution.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevolution.c 2013-08-16 21:14:05.483056049 -0300 -@@ -119,13 +119,7 @@ - - name = e_contact_get_const(contact, E_CONTACT_FULL_NAME); - -- update_ims_from_contact(contact, name, "prpl-aim", E_CONTACT_IM_AIM); - update_ims_from_contact(contact, name, "prpl-jabber", E_CONTACT_IM_JABBER); -- update_ims_from_contact(contact, name, "prpl-yahoo", E_CONTACT_IM_YAHOO); -- update_ims_from_contact(contact, name, "prpl-msn", E_CONTACT_IM_MSN); -- update_ims_from_contact(contact, name, "prpl-icq", E_CONTACT_IM_ICQ); -- update_ims_from_contact(contact, name, "prpl-novell", E_CONTACT_IM_GROUPWISE); -- update_ims_from_contact(contact, name, "prpl-gg", E_CONTACT_IM_GADUGADU); - } - - static void -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/gevo-util.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevo-util.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/gevo-util.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/gevo-util.c 2013-08-16 23:20:45.692374640 -0300 -@@ -99,20 +99,8 @@ - - protocol_id = purple_account_get_protocol_id(account); - -- if (!strcmp(protocol_id, "prpl-aim")) -- protocol_field = E_CONTACT_IM_AIM; -- else if (!strcmp(protocol_id, "prpl-icq")) -- protocol_field = E_CONTACT_IM_ICQ; -- else if (!strcmp(protocol_id, "prpl-msn")) -- protocol_field = E_CONTACT_IM_MSN; -- else if (!strcmp(protocol_id, "prpl-yahoo")) -- protocol_field = E_CONTACT_IM_YAHOO; -- else if (!strcmp(protocol_id, "prpl-jabber")) -+ if (!strcmp(protocol_id, "prpl-jabber")) - protocol_field = E_CONTACT_IM_JABBER; -- else if (!strcmp(protocol_id, "prpl-novell")) -- protocol_field = E_CONTACT_IM_GROUPWISE; -- else if (!strcmp(protocol_id, "prpl-gg")) -- protocol_field = E_CONTACT_IM_GADUGADU; - - return protocol_field; - } -@@ -169,18 +157,6 @@ - { - PurpleAccount *account = purple_buddy_get_account(buddy); - const char *prpl_id = purple_account_get_protocol_id(account); -- -- if (!strcmp(prpl_id, "prpl-msn")) -- { -- mail = g_strdup(purple_normalize(account, -- purple_buddy_get_name(buddy))); -- } -- else if (!strcmp(prpl_id, "prpl-yahoo")) -- { -- mail = g_strdup_printf("%s@yahoo.com", -- purple_normalize(account, -- purple_buddy_get_name(buddy))); -- } - } - - return mail; -diff -Nur pidgin-2.10.7/pidgin/plugins/gevolution/new_person_dialog.c pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/new_person_dialog.c ---- pidgin-2.10.7/pidgin/plugins/gevolution/new_person_dialog.c 2013-02-11 07:16:54.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin/plugins/gevolution/new_person_dialog.c 2013-08-16 21:23:26.207116339 -0300 -@@ -141,20 +141,8 @@ - if (*email) - e_contact_set(contact, E_CONTACT_EMAIL_1, (gpointer)email); - -- if (!strcmp(im_service, "prpl-aim")) -- field = E_CONTACT_IM_AIM; -- else if (!strcmp(im_service, "prpl-icq")) -- field = E_CONTACT_IM_ICQ; -- else if (!strcmp(im_service, "prpl-yahoo")) -- field = E_CONTACT_IM_YAHOO; -- else if (!strcmp(im_service, "prpl-jabber")) -+ if (!strcmp(im_service, "prpl-jabber")) - field = E_CONTACT_IM_JABBER; -- else if (!strcmp(im_service, "prpl-msn")) -- field = E_CONTACT_IM_MSN; -- else if (!strcmp(im_service, "prpl-novell")) -- field = E_CONTACT_IM_GROUPWISE; -- else if (!strcmp(im_service, "prpl-gg")) -- field = E_CONTACT_IM_GADUGADU; - - if (field > 0) - { -diff -Nur pidgin-2.10.7/pidgin.apspec.in pidgin-2.10.7-nonprism/pidgin.apspec.in ---- pidgin-2.10.7/pidgin.apspec.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.apspec.in 2013-08-16 20:53:14.523862926 -0300 -@@ -14,17 +14,13 @@ - - [Description] - Pidgin allows you to talk to anyone using a variety of messaging protocols, --including AIM (Oscar and TOC), ICQ, IRC, Yahoo!, MSN Messenger, XMPP, --Gadu-Gadu, and Zephyr. These protocols are implemented using a -+including IRC, XMPP and Zephyr. These protocols are implemented using a - modular, easy to use design. To use a protocol, just add an account using the - account editor. - - Pidgin supports many common features of other clients, as well as many unique - features, such as perl scripting, TCL scripting and C plugins. - --Pidgin is NOT affiliated with or endorsed by America Online, Inc., Microsoft --Corporation, Yahoo! Inc., or ICQ Inc. -- - [BuildPrepare] - APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-gtktest --disable-glibtest --disable-vv --disable-fortify - #APBUILD_STATIC="Xss startup-notification-1" prepareBuild --enable-nss --enable-gnutls --enable-binreloc --disable-perl --disable-tcl --disable-vv -diff -Nur pidgin-2.10.7/pidgin.desktop.in pidgin-2.10.7-nonprism/pidgin.desktop.in ---- pidgin-2.10.7/pidgin.desktop.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.desktop.in 2013-08-16 23:07:34.874212867 -0300 -@@ -1,7 +1,7 @@ - [Desktop Entry] - _Name=Pidgin Internet Messenger - _GenericName=Internet Messenger --_Comment=Chat over IM. Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more -+_Comment=Chat over IM. Supports IRC, Jabber/XMPP and more - Exec=pidgin - Icon=pidgin - StartupNotify=true -diff -Nur pidgin-2.10.7/pidgin.spec pidgin-2.10.7-nonprism/pidgin.spec ---- pidgin-2.10.7/pidgin.spec 2013-02-11 07:17:59.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.spec 2013-08-17 00:03:18.474815955 -0300 -@@ -34,7 +34,6 @@ - %{!?_without_startupnotification:BuildRequires: startup-notification-devel} - %{?_with_avahi:BuildRequires: avahi-glib-devel} - %{!?_without_gtkspell:BuildRequires: gtkspell-devel} --%{?_with_meanwhile:BuildRequires: meanwhile-devel} - %{?_with_mono:BuildRequires: mono-devel} - %{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2} - %{!?_without_silc:BuildRequires: /usr/include/silc/silcclient.h} -@@ -105,7 +104,6 @@ - Group: Applications/Internet - Obsoletes: gaim-silc - Obsoletes: gaim-tcl --Obsoletes: gaim-gadugadu - Obsoletes: pidgin-tcl < 2.0.0 - Obsoletes: pidgin-silc < 2.0.0 - Obsoletes: libpurple-perl < %{version} -@@ -131,13 +129,6 @@ - Requires: libpurple >= %{apiver} - %endif - --%if 0%{?_with_meanwhile:1} --%package -n libpurple-meanwhile --Summary: Lotus Sametime plugin for Pidgin using the Meanwhile library --Group: Applications/Internet --Requires: libpurple >= %{apiver} --%endif -- - %if 0%{?_with_mono:1} - %package -n libpurple-mono - Summary: Mono .NET plugin support for Pidgin -@@ -161,18 +152,14 @@ - - %description - Pidgin allows you to talk to anyone using a variety of messaging --protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu, --ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and --Zephyr. These protocols are implemented using a modular, easy to -+protocols including XMPP, Bonjour, IRC, SILC, Simple and Zephyr. -+These protocols are implemented using a modular, easy to - use design. To use a protocol, just add an account using the - account editor. - - Pidgin supports many common features of other clients, as well as many - unique features, such as perl scripting, TCL scripting and C plugins. - --Pidgin is not affiliated with or endorsed by America Online, Inc., --Microsoft Corporation, Yahoo! Inc., or ICQ Inc. -- - %description devel - The pidgin-devel package contains the header files, developer - documentation, and libraries required for development of Pidgin scripts -@@ -182,9 +169,8 @@ - libpurple contains the core IM support for IM clients such as Pidgin - and Finch. - --libpurple supports a variety of messaging protocols including AIM, MSN, --Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, --Lotus Sametime, SILC, Simple and Zephyr. -+libpurple supports a variety of messaging protocols including XMPP, -+Bonjour, IRC, SILC, Simple and Zephyr. - - %description -n libpurple-devel - The libpurple-devel package contains the header files, developer -@@ -196,11 +182,6 @@ - Bonjour plugin for Pidgin. - %endif - --%if 0%{?_with_meanwhile:1} --%description -n libpurple-meanwhile --Lotus Sametime plugin for Pidgin using the Meanwhile library. --%endif -- - %if 0%{?_with_mono:1} - %description -n libpurple-mono - Mono plugin loader for Pidgin. This package will allow you to write or -@@ -236,7 +217,6 @@ - %{!?_with_vv:--disable-vv} \ - %{!?_with_dbus:--disable-dbus} \ - %{!?_with_avahi:--disable-avahi} \ -- %{!?_with_meanwhile:--disable-meanwhile} \ - %{?_without_gstreamer:--disable-gstreamer} \ - %{?_without_gtkspell:--disable-gtkspell} \ - %{?_without_nm:--disable-nm} \ -@@ -258,9 +238,7 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/gnt/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.la --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/liboscar.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libymsg.so - rm -f $RPM_BUILD_ROOT%{_libdir}/*.la - rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod - find $RPM_BUILD_ROOT -type f -name '*.a' -exec rm -f {} ';' -@@ -271,10 +249,6 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libbonjour.so - %endif - --%if 0%{!?_with_meanwhile:1} --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsametime.so --%endif -- - %if 0%{!?_with_mono:1} - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/mono.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.dll -@@ -299,7 +273,6 @@ - find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \ - sed "s@^$RPM_BUILD_ROOT@@g" | \ - grep -v /libbonjour.so | \ -- grep -v /libsametime.so | \ - grep -v /mono.so | \ - grep -v ".dll$" > %{name}-%{version}-purpleplugins - -@@ -435,13 +408,6 @@ - %{_libdir}/purple-2/libbonjour.* - %endif - --%if 0%{?_with_meanwhile:1} --%files -n libpurple-meanwhile --%defattr(-, root, root) -- --%{_libdir}/purple-2/libsametime.* --%endif -- - %if 0%{?_with_mono:1} - %files -n libpurple-mono - %defattr(-, root, root) -@@ -492,9 +458,6 @@ - * Sat Jul 11 2009 Stu Tomlinson <stu@nosnilmot.com> - - Update to reflect changes in perl module installation directories - --* Mon May 19 2008 Stu Tomlinson <stu@nosnilmot.com> --- Fix building without meanwhile support -- - * Fri May 16 2008 Stu Tomlinson <stu@nosnilmot.com> - - Add "--without nm" support to build without NetworkManager - -@@ -586,8 +549,6 @@ - - Update to reflect renaming to pidgin/libpurple - - * Sun Oct 1 2006 Stu Tomlinson <stu@nosnilmot.com> --- We can build with internal gadu gadu again, so bring it back into the -- main package - - Deal with gconf schame uninstallation on package upgrade and removal - - * Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com> -@@ -606,19 +567,14 @@ - - Source RPM uses tar.bz2 now to save space - - Update BuildRequires for new intltool dependencies - - Add a --with perlmakehack option to allow builds to succeed on RH9 --- Add a --with gadugadu to build (separate) gaim-gadugadu package - - * Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add support for beta versions so the subsequent releases are seen as newer - by RPM --- Split of sametime support to gaim-meanwhile - - Use make DESTDIR=... instead of overloading prefix etc. when installing - - Default build to include cyrus-sasl support in Jabber - - Add --with dbus to build with DBUS support - --* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net> --- Added obsoletes gaim-meanwhile -- - * Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add separate gaim-bonjour package if built with --with-howl - - Add separate gaim-mono package if built with --with-mono -diff -Nur pidgin-2.10.7/pidgin.spec.in pidgin-2.10.7-nonprism/pidgin.spec.in ---- pidgin-2.10.7/pidgin.spec.in 2013-02-11 07:16:53.000000000 -0200 -+++ pidgin-2.10.7-nonprism/pidgin.spec.in 2013-08-17 00:07:12.251996234 -0300 -@@ -34,7 +34,6 @@ - %{!?_without_startupnotification:BuildRequires: startup-notification-devel} - %{?_with_avahi:BuildRequires: avahi-glib-devel} - %{!?_without_gtkspell:BuildRequires: gtkspell-devel} --%{?_with_meanwhile:BuildRequires: meanwhile-devel} - %{?_with_mono:BuildRequires: mono-devel} - %{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2} - %{!?_without_silc:BuildRequires: /usr/include/silc/silcclient.h} -@@ -105,7 +104,6 @@ - Group: Applications/Internet - Obsoletes: gaim-silc - Obsoletes: gaim-tcl --Obsoletes: gaim-gadugadu - Obsoletes: pidgin-tcl < 2.0.0 - Obsoletes: pidgin-silc < 2.0.0 - Obsoletes: libpurple-perl < %{version} -@@ -131,13 +129,6 @@ - Requires: libpurple >= %{apiver} - %endif - --%if 0%{?_with_meanwhile:1} --%package -n libpurple-meanwhile --Summary: Lotus Sametime plugin for Pidgin using the Meanwhile library --Group: Applications/Internet --Requires: libpurple >= %{apiver} --%endif -- - %if 0%{?_with_mono:1} - %package -n libpurple-mono - Summary: Mono .NET plugin support for Pidgin -@@ -161,18 +152,14 @@ - - %description - Pidgin allows you to talk to anyone using a variety of messaging --protocols including AIM, MSN, Yahoo!, XMPP, Bonjour, Gadu-Gadu, --ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and --Zephyr. These protocols are implemented using a modular, easy to -+protocols including XMPP, Bonjour, IRC, SILC, Simple and Zephyr. -+These protocols are implemented using a modular, easy to - use design. To use a protocol, just add an account using the - account editor. - - Pidgin supports many common features of other clients, as well as many - unique features, such as perl scripting, TCL scripting and C plugins. - --Pidgin is not affiliated with or endorsed by America Online, Inc., --Microsoft Corporation, Yahoo! Inc., or ICQ Inc. -- - %description devel - The pidgin-devel package contains the header files, developer - documentation, and libraries required for development of Pidgin scripts -@@ -182,9 +169,8 @@ - libpurple contains the core IM support for IM clients such as Pidgin - and Finch. - --libpurple supports a variety of messaging protocols including AIM, MSN, --Yahoo!, XMPP, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ, --Lotus Sametime, SILC, Simple and Zephyr. -+libpurple supports a variety of messaging protocols including XMPP, -+Bonjour, IRC, SILC, Simple and Zephyr. - - %description -n libpurple-devel - The libpurple-devel package contains the header files, developer -@@ -196,11 +182,6 @@ - Bonjour plugin for Pidgin. - %endif - --%if 0%{?_with_meanwhile:1} --%description -n libpurple-meanwhile --Lotus Sametime plugin for Pidgin using the Meanwhile library. --%endif -- - %if 0%{?_with_mono:1} - %description -n libpurple-mono - Mono plugin loader for Pidgin. This package will allow you to write or -@@ -236,7 +217,6 @@ - %{!?_with_vv:--disable-vv} \ - %{!?_with_dbus:--disable-dbus} \ - %{!?_with_avahi:--disable-avahi} \ -- %{!?_with_meanwhile:--disable-meanwhile} \ - %{?_without_gstreamer:--disable-gstreamer} \ - %{?_without_gtkspell:--disable-gtkspell} \ - %{?_without_nm:--disable-nm} \ -@@ -258,9 +238,7 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/gnt/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.la --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/liboscar.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libymsg.so - rm -f $RPM_BUILD_ROOT%{_libdir}/*.la - rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod - find $RPM_BUILD_ROOT -type f -name '*.a' -exec rm -f {} ';' -@@ -271,10 +249,6 @@ - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libbonjour.so - %endif - --%if 0%{!?_with_meanwhile:1} --rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/libsametime.so --%endif -- - %if 0%{!?_with_mono:1} - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/mono.so - rm -f $RPM_BUILD_ROOT%{_libdir}/purple-2/*.dll -@@ -299,7 +273,6 @@ - find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \ - sed "s@^$RPM_BUILD_ROOT@@g" | \ - grep -v /libbonjour.so | \ -- grep -v /libsametime.so | \ - grep -v /mono.so | \ - grep -v ".dll$" > %{name}-%{version}-purpleplugins - -@@ -435,13 +408,6 @@ - %{_libdir}/purple-2/libbonjour.* - %endif - --%if 0%{?_with_meanwhile:1} --%files -n libpurple-meanwhile --%defattr(-, root, root) -- --%{_libdir}/purple-2/libsametime.* --%endif -- - %if 0%{?_with_mono:1} - %files -n libpurple-mono - %defattr(-, root, root) -@@ -492,9 +458,6 @@ - * Sat Jul 11 2009 Stu Tomlinson <stu@nosnilmot.com> - - Update to reflect changes in perl module installation directories - --* Mon May 19 2008 Stu Tomlinson <stu@nosnilmot.com> --- Fix building without meanwhile support -- - * Fri May 16 2008 Stu Tomlinson <stu@nosnilmot.com> - - Add "--without nm" support to build without NetworkManager - -@@ -586,8 +549,6 @@ - - Update to reflect renaming to pidgin/libpurple - - * Sun Oct 1 2006 Stu Tomlinson <stu@nosnilmot.com> --- We can build with internal gadu gadu again, so bring it back into the -- main package - - Deal with gconf schame uninstallation on package upgrade and removal - - * Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com> -@@ -606,19 +567,14 @@ - - Source RPM uses tar.bz2 now to save space - - Update BuildRequires for new intltool dependencies - - Add a --with perlmakehack option to allow builds to succeed on RH9 --- Add a --with gadugadu to build (separate) gaim-gadugadu package - - * Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add support for beta versions so the subsequent releases are seen as newer - by RPM --- Split of sametime support to gaim-meanwhile - - Use make DESTDIR=... instead of overloading prefix etc. when installing - - Default build to include cyrus-sasl support in Jabber - - Add --with dbus to build with DBUS support - --* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net> --- Added obsoletes gaim-meanwhile -- - * Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com> - - Add separate gaim-bonjour package if built with --with-howl - - Add separate gaim-mono package if built with --with-mono diff --git a/pcr/gnuhealth/PKGBUILD b/pcr/gnuhealth/PKGBUILD index 3eaee88d0..76fdf442a 100644 --- a/pcr/gnuhealth/PKGBUILD +++ b/pcr/gnuhealth/PKGBUILD @@ -2,7 +2,7 @@ # Contributor: SpepS <dreamspepser at yahoo dot it> pkgname=gnuhealth -pkgver=2.0.0 +pkgver=2.2.1 pkgrel=1 pkgdesc="A free Health and Hospital Information System" arch=any @@ -27,7 +27,7 @@ depends=( trytond-stock-lot ) source=http://ftp.gnu.org/gnu/health/$pkgname-$pkgver.tar.gz -sha512sums=5d528fe4a20a2b237f32d023f44e898a012f47f9ba83611f71fba386990bf98dbbdb1fb9c5b78dd5a3b65c6fe9b2fe4e7e472fec90cab009e5b8e31b1f31ceeb +sha512sums=9a7ccc71b5cba8e71adaea1d811ef4d68d72a1b3d7493721d68b2bb04f5eb808c659bf74e4f5859c9509be4843b4cae3cc4511422fb3cdc64b5a903507ca364a package() { MODULES=( diff --git a/pcr/multipath-tools-git/PKGBUILD b/pcr/multipath-tools-git/PKGBUILD new file mode 100644 index 000000000..d1bb4ac9b --- /dev/null +++ b/pcr/multipath-tools-git/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Miguel Revilla <yo@miguelrevilla.com> +# Contributor: Alexander Rødseth <rodseth@gmail.com> +# Contributor: Timothée Ravier <tim@siosm.fr> + +pkgname=multipath-tools-git +pkgver=1295.81895af +pkgrel=1 +pkgdesc="Tools to drive the Device Mapper multipathing driver (contains kpartx)" +url="http://christophe.varoqui.free.fr/" +arch=('x86_64' 'i686') +license=('GPL2') +depends=('libaio' 'device-mapper') +makedepends=('git' 'setconf') +options=(!emptydirs) +source=("${pkgname}::git+http://git.opensvc.com/multipath-tools/.git") +md5sums=('SKIP') + +pkgver() { + cd ${pkgname} + echo $(git rev-list --count HEAD).$(git rev-parse --short HEAD) +} + +prepare() { + cd ${pkgname} + sed -i 's|/sbin|/usr/bin|g' Makefile.inc + sed -i 's|LIB=lib|LIB=usr/lib|g' Makefile.inc + sed -i 's|${prefix}/lib/udev|${prefix}/usr/lib/udev|g' Makefile.inc + sed -i 's|$(prefix)/lib/systemd/system|$(prefix)/usr/lib/systemd/system|g' Makefile.inc +} + +build() { + cd ${pkgname} + setconf Makefile.inc GZIP '/usr/bin/gzip -9 -c' + make +} + +package() { + cd ${pkgname} + make LIB="/usr/lib" DESTDIR="${pkgdir}" install + install -Dm644 COPYING "${pkgdir}"/usr/share/licenses/${pkgname}/COPYING + cd "${pkgdir}"/usr/lib + rm libmpathpersist.so + ln -s libmpathpersist.so.0 libmpathpersist.so +} diff --git a/pcr/python2-relatorio/PKGBUILD b/pcr/python2-relatorio/PKGBUILD index 3e52303b4..e70699886 100644 --- a/pcr/python2-relatorio/PKGBUILD +++ b/pcr/python2-relatorio/PKGBUILD @@ -1,11 +1,12 @@ # Contributor: Florian Walch <florian.walch@gmx.at> # Maintainer: Thomas Bahn <Thomas-Bahn@gmx.net> # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> + pkgname=python2-relatorio -pkgver=0.5.6 -pkgrel=2 +pkgver=0.6.0 +pkgrel=1 pkgdesc="A templating library able to output odt and pdf files" -arch=('any') +arch=('i686' 'x86_64' 'mips64el') url="http://relatorio.openhex.org" license=('GPL') depends=('python2-genshi>=0.7' 'python2-lxml>=3.2.1') @@ -18,5 +19,4 @@ build() { python2 setup.py install --root=$pkgdir } - -md5sums=('944fb60fadaff451ab6ee8818de516ad') +md5sums=('170eeb4102a92b9ddc554799a1503cee') diff --git a/pcr/trytond-account-invoice/PKGBUILD b/pcr/trytond-account-invoice/PKGBUILD index 5488733bf..880c1dff9 100644 --- a/pcr/trytond-account-invoice/PKGBUILD +++ b/pcr/trytond-account-invoice/PKGBUILD @@ -2,7 +2,7 @@ # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> pkgname=trytond-account-invoice _pkgname=trytond_account_invoice -pkgver=2.8.1 +pkgver=2.8.3 _pkgdir=2.8 pkgrel=1 pkgdesc="The account_invoice module of the Tryton application platform" @@ -13,7 +13,7 @@ groups=('trytond-modules') depends=('trytond>=2.8' 'trytond-account>=2.8' 'trytond-account-product>=2.8' 'trytond-company>=2.8' 'trytond-currency>=2.8' 'trytond-party>=2.8' 'trytond-product>=2.8') makedepends=('python2-distribute') source=("http://downloads.tryton.org/$_pkgdir/$_pkgname-$pkgver.tar.gz") -md5sums=("0f61e65c235f5b09df1be72851a4f0d4") +md5sums=("5c3dda771139e55d1f445f07922028a3") package() { cd $srcdir/$_pkgname-$pkgver diff --git a/pcr/trytond/PKGBUILD b/pcr/trytond/PKGBUILD index 8a39f898a..d041fabbe 100644 --- a/pcr/trytond/PKGBUILD +++ b/pcr/trytond/PKGBUILD @@ -2,14 +2,14 @@ # Maintainer: Robin Baumgartner <robin@baumgartners.ch> # Maintainer (Parabola): André Silva <emulatorman@lavabit.com> pkgname=trytond -pkgver=2.8.1 +pkgver=2.8.3 _pkgdir=2.8 pkgrel=1 pkgdesc="A three-tiers high-level general purpose application platform (server application)" arch=('any') url="http://www.tryton.org/" license=('GPL3') -depends=('python2>=2.7' 'python2-lxml' 'python2-relatorio>=0.5.6' 'python2-genshi>=0.7' 'python2-polib') +depends=('python2>=2.7' 'python2-lxml' 'python2-relatorio>=0.6.0' 'python2-genshi>=0.7' 'python2-polib') optdepends=('python2-psycopg2: support for PostgreSQL database' 'python-pywebdav: support for WebDAV feature' 'pydot: support for displaying workflow graphs' @@ -20,7 +20,7 @@ install="trytond.install" source=("http://downloads.tryton.org/$_pkgdir/$pkgname-$pkgver.tar.gz" 'trytond.install' 'trytond.service') -md5sums=('622094022c570d3a0c9aa9e786542d55' +md5sums=('db714e83e4b09213a6027911af0ad75e' '768e68c01cb5913e36ea89c67fc98038' 'b1535a8528dfd8f655624bf6faea6985') diff --git a/pcr/youtube-dl-current/PKGBUILD b/pcr/youtube-dl-current/PKGBUILD index 3d2d5c90f..22cd86750 100644 --- a/pcr/youtube-dl-current/PKGBUILD +++ b/pcr/youtube-dl-current/PKGBUILD @@ -5,7 +5,7 @@ pkgname=youtube-dl-current _pkgname=youtube-dl provides=(youtube-dl) -pkgver=2013.10.07 +pkgver=2013.10.09 pkgrel=1 pkgdesc="A small command-line program to download videos from YouTube.com and a few more sites" arch=('any') @@ -27,5 +27,5 @@ package() { "${pkgdir}/usr/share/bash-completion/completions/youtube-dl" install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${_pkgname}/LICENSE" } -md5sums=('8fcf8c27dc2444f78c0413f9ddee383a' +md5sums=('ddbefc30e4efefe29a2fe89ed6f4bccc' 'SKIP') |