cairo-dock-team team mailing list archive
-
cairo-dock-team team
-
Mailing list archive
-
Message #06442
[Merge] lp:~jgonzalezdr/cairo-dock-plug-ins/suspend-workaround-applet into lp:cairo-dock-plug-ins
Jesús González has proposed merging lp:~jgonzalezdr/cairo-dock-plug-ins/suspend-workaround-applet into lp:cairo-dock-plug-ins.
Requested reviews:
Cairo-Dock Devs (cairo-dock-team)
Related bugs:
Bug #535065 in Cairo-Dock Plug-ins: "launcher icon corruption after wake-up from suspend"
https://bugs.launchpad.net/cairo-dock-plug-ins/+bug/535065
For more details, see:
https://code.launchpad.net/~jgonzalezdr/cairo-dock-plug-ins/suspend-workaround-applet/+merge/233496
Added Suspend-Workaround applet that fixes the icon corruption that happens with some graphic cards (e.g. nvidia) when suspending the computer.
Fixes bug #535065 "symptoms" with a workaround that doesn't need external scripts added and configured manually by affected users (as proposed in https://bugs.launchpad.net/cairo-dock-plug-ins/+bug/535065/comments/14), therefore it's a lot more user-friendly solution and it's more robust (the python script solution sometimes fails, maybe because dbus messages to reboot cairo-dock are lost).
To test it just install the applet in an affected computer and enable it, suspend the computer, resume, and voilà... icons aren't corrupted any more.
--
https://code.launchpad.net/~jgonzalezdr/cairo-dock-plug-ins/suspend-workaround-applet/+merge/233496
Your team Cairo-Dock Devs is requested to review the proposed merge of lp:~jgonzalezdr/cairo-dock-plug-ins/suspend-workaround-applet into lp:cairo-dock-plug-ins.
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2014-08-17 22:45:21 +0000
+++ CMakeLists.txt 2014-09-05 11:39:20 +0000
@@ -1468,6 +1468,19 @@
endif()
endif()
+############# SUSPEND-WORKAROUND #################
+set (with_suspend_workaround no)
+if (enable-suspend-workaround)
+ message (STATUS "> Suspend-Workaround:")
+ set (GETTEXT_SUSPEND_WORKAROUND ${GETTEXT_PLUGINS})
+ set (VERSION_SUSPEND_WORKAROUND "1.0.0")
+ set (PACKAGE_SUSPEND_WORKAROUND "cd-SuspendWorkaround")
+ set (with_suspend_workaround yes)
+ set (suspendworkarounddatadir "${pluginsdatadir}/Suspend-Workaround")
+ configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Suspend-Workaround/data/Suspend-Workaround.conf.in ${CMAKE_CURRENT_BINARY_DIR}/Suspend-Workaround/data/Suspend-Workaround.conf)
+ add_subdirectory (Suspend-Workaround)
+endif()
+
message ("")
message (STATUS "===============")
message (STATUS "Language build:")
@@ -1502,6 +1515,7 @@
message (STATUS " - with Terminal applet: ${with_terminal}")
message (STATUS " - with Weblets applet: ${with_weblets}")
message (STATUS " - with Xgamma applet: ${with_xgamma}")
+message (STATUS " - with Suspend-Workaround applet: ${with_suspend_workaround}")
message (STATUS "Add On:")
message (STATUS " - with Sound-Menu support: ${with_soundmenu}")
message (STATUS " - with Screen Resolution support: ${with_xrandr}")
=== added directory 'Suspend-Workaround'
=== added file 'Suspend-Workaround/CMakeLists.txt'
--- Suspend-Workaround/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/CMakeLists.txt 2014-09-05 11:39:20 +0000
@@ -0,0 +1,2 @@
+add_subdirectory(src)
+add_subdirectory(data)
=== added directory 'Suspend-Workaround/data'
=== added file 'Suspend-Workaround/data/CMakeLists.txt'
--- Suspend-Workaround/data/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/data/CMakeLists.txt 2014-09-05 11:39:20 +0000
@@ -0,0 +1,7 @@
+
+########### install files ###############
+
+install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Suspend-Workaround.conf
+ icon.png
+ DESTINATION ${suspendworkarounddatadir})
+
=== added file 'Suspend-Workaround/data/Suspend-Workaround.conf.in'
--- Suspend-Workaround/data/Suspend-Workaround.conf.in 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/data/Suspend-Workaround.conf.in 2014-09-05 11:39:20 +0000
@@ -0,0 +1,8 @@
+#@VERSION_SUSPEND_WORKAROUND@
+
+#[gtk-about]
+[Icon]
+
+#A
+handbook=Suspend-Workaround
+
=== added file 'Suspend-Workaround/data/icon.png'
Binary files Suspend-Workaround/data/icon.png 1970-01-01 00:00:00 +0000 and Suspend-Workaround/data/icon.png 2014-09-05 11:39:20 +0000 differ
=== added directory 'Suspend-Workaround/src'
=== added file 'Suspend-Workaround/src/CMakeLists.txt'
--- Suspend-Workaround/src/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/src/CMakeLists.txt 2014-09-05 11:39:20 +0000
@@ -0,0 +1,38 @@
+
+########### sources ###############
+
+SET(MODULE_SRCS
+ applet-struct.h
+ applet-init.c
+ applet-init.h
+ applet-config.h
+)
+
+add_library(${PACKAGE_SUSPEND_WORKAROUND} SHARED ${MODULE_SRCS})
+
+########### compil ###############
+add_definitions (-DMY_APPLET_SHARE_DATA_DIR="${suspendworkarounddatadir}")
+add_definitions (-DMY_APPLET_PREVIEW_FILE="icon.png")
+add_definitions (-DMY_APPLET_CONF_FILE="Suspend-Workaround.conf")
+add_definitions (-DMY_APPLET_USER_DATA_DIR="Suspend-Workaround")
+add_definitions (-DMY_APPLET_VERSION="${VERSION_SUSPEND_WORKAROUND}")
+add_definitions (-DMY_APPLET_GETTEXT_DOMAIN="${GETTEXT_SUSPEND_WORKAROUND}")
+add_definitions (-DMY_APPLET_DOCK_VERSION="${dock_version}")
+add_definitions (-DMY_APPLET_ICON_FILE="icon.png")
+### uncomment the following line to allow multi-instance applet.
+#add_definitions (-DCD_APPLET_MULTI_INSTANCE="1")
+### uncomment the following line to allow extended OpenGL drawing.
+#add_definitions (-DGL_GLEXT_PROTOTYPES="1")
+
+include_directories (
+ ${PACKAGE_INCLUDE_DIRS})
+
+link_directories (
+ ${PACKAGE_LIBRARY_DIRS})
+
+target_link_libraries (${PACKAGE_SUSPEND_WORKAROUND}
+ ${PACKAGE_LIBRARIES})
+
+########### install files ###############
+
+install(TARGETS ${PACKAGE_SUSPEND_WORKAROUND} DESTINATION ${pluginsdir})
=== added file 'Suspend-Workaround/src/applet-config.h'
--- Suspend-Workaround/src/applet-config.h 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/src/applet-config.h 2014-09-05 11:39:20 +0000
@@ -0,0 +1,30 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#ifndef __APPLET_CONFIG__
+#define __APPLET_CONFIG__
+
+#include <cairo-dock.h>
+
+
+CD_APPLET_CONFIG_H
+
+
+#endif
=== added file 'Suspend-Workaround/src/applet-init.c'
--- Suspend-Workaround/src/applet-init.c 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/src/applet-init.c 2014-09-05 11:39:20 +0000
@@ -0,0 +1,157 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "stdlib.h"
+
+#include "applet-config.h"
+#include "applet-struct.h"
+#include "applet-init.h"
+
+#define SIGNAL_TYPE_LOGIN1 0
+#define SIGNAL_TYPE_UPOWER 1
+
+#define APPLET_NAME "Suspend-Workaround"
+#define APPLET_LOG APPLET_NAME " > "
+
+CD_APPLET_DEFINE_BEGIN( APPLET_NAME,
+ 1, 0, 0,
+ CAIRO_DOCK_CATEGORY_APPLET_SYSTEM,
+ N_("This plug-in is a workaround that fixes the icon corruption that "
+ "happens with some graphic cards (e.g. nvidia) when suspending the computer"),
+ "Jesús González" )
+ pInterface->initModule = CD_APPLET_INIT_FUNC;
+ pInterface->stopModule = CD_APPLET_STOP_FUNC;
+ CD_APPLET_SET_CONTAINER_TYPE( CAIRO_DOCK_MODULE_IS_PLUGIN );
+ CD_APPLET_REDEFINE_TITLE (N_("Corruption-on-Suspend workaround"))
+CD_APPLET_DEFINE_END
+
+#define DBUS_POWER_OBJECT_INFO_SIZE 2
+
+struct _dbus_power_object_info dbus_power_object_info[DBUS_POWER_OBJECT_INFO_SIZE] =
+{
+ {
+ "org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", "PrepareForSleep", G_TYPE_BOOLEAN,
+ },
+ {
+ "org.freedesktop.UPower", "/org/freedesktop/UPower", "org.freedesktop.UPower", "Resuming", G_TYPE_NONE,
+ }
+};
+
+static void _on_resuming(void)
+{
+ cd_message( APPLET_LOG "Resuming from sleep" );
+ cairo_dock_load_current_theme();
+}
+
+static void _on_prepare_for_sleep( DBusGProxy* proxy, gboolean going_to_sleep, gpointer userData )
+{
+ if( going_to_sleep )
+ {
+ cd_message( APPLET_LOG "Going to sleep" );
+ }
+ else
+ {
+ _on_resuming();
+ }
+}
+
+CD_APPLET_INIT_BEGIN
+
+ myDataPtr->power_object_info = NULL;
+
+ DBusGProxy *pMainProxy = cairo_dock_get_main_system_proxy();
+ if( pMainProxy == NULL )
+ {
+ cd_warning( APPLET_LOG "Can't get main system dbus proxy" );
+ return;
+ }
+
+ int pwrobj_index = 0;
+ gboolean pwrobj_found = FALSE;
+ while( (pwrobj_index < DBUS_POWER_OBJECT_INFO_SIZE) ) {
+ org_freedesktop_DBus_name_has_owner( pMainProxy, dbus_power_object_info[pwrobj_index].name, &pwrobj_found, NULL );
+ if( pwrobj_found )
+ {
+ break;
+ }
+ pwrobj_index++;
+ }
+
+ if( !pwrobj_found )
+ {
+ cd_warning( APPLET_LOG "Power management object not available on dbus" );
+ return;
+ }
+
+ myDataPtr->power_object_info = &dbus_power_object_info[pwrobj_index];
+
+ cd_message( APPLET_LOG "Power management object used is %s", myDataPtr->power_object_info->name );
+
+ myDataPtr->pProxy = cairo_dock_create_new_system_proxy( myDataPtr->power_object_info->name, myDataPtr->power_object_info->path, myDataPtr->power_object_info->interface );
+ if( myDataPtr->pProxy == NULL )
+ {
+ cd_warning( APPLET_LOG "Error accessing power management object on dbus" );
+ return;
+ }
+
+ if( myDataPtr->power_object_info->signal_type == SIGNAL_TYPE_UPOWER )
+ {
+ dbus_g_object_register_marshaller (
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_add_signal( myDataPtr->pProxy, myDataPtr->power_object_info->resume_signal, G_TYPE_INVALID );
+ dbus_g_proxy_connect_signal( myDataPtr->pProxy, myDataPtr->power_object_info->resume_signal, G_CALLBACK( _on_resuming ), NULL, NULL );
+ }
+ else
+ {
+ dbus_g_object_register_marshaller (
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE,
+ G_TYPE_BOOLEAN,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_add_signal( myDataPtr->pProxy, myDataPtr->power_object_info->resume_signal, G_TYPE_BOOLEAN, G_TYPE_INVALID );
+ dbus_g_proxy_connect_signal( myDataPtr->pProxy, myDataPtr->power_object_info->resume_signal, G_CALLBACK( _on_prepare_for_sleep ), NULL, NULL );
+ }
+
+ cd_message( APPLET_LOG "Listening for power management events..." );
+
+CD_APPLET_INIT_END
+
+
+CD_APPLET_STOP_BEGIN
+
+ if( myDataPtr->pProxy != NULL )
+ {
+ if( myDataPtr->power_object_info->signal_type == SIGNAL_TYPE_UPOWER )
+ {
+ dbus_g_proxy_disconnect_signal( myDataPtr->pProxy, myDataPtr->power_object_info->resume_signal, G_CALLBACK( _on_resuming ), NULL);
+ }
+ else
+ {
+ dbus_g_proxy_disconnect_signal( myDataPtr->pProxy, myDataPtr->power_object_info->resume_signal, G_CALLBACK( _on_prepare_for_sleep ), NULL);
+ }
+ g_object_unref( myDataPtr->pProxy );
+ }
+
+ cd_message( APPLET_LOG "Stopped listening for power management events" );
+
+CD_APPLET_STOP_END
=== added file 'Suspend-Workaround/src/applet-init.h'
--- Suspend-Workaround/src/applet-init.h 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/src/applet-init.h 2014-09-05 11:39:20 +0000
@@ -0,0 +1,31 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#ifndef __APPLET_INIT__
+#define __APPLET_INIT__
+
+
+#include <cairo-dock.h>
+
+
+CD_APPLET_H
+
+
+#endif
=== added file 'Suspend-Workaround/src/applet-struct.h'
--- Suspend-Workaround/src/applet-struct.h 1970-01-01 00:00:00 +0000
+++ Suspend-Workaround/src/applet-struct.h 2014-09-05 11:39:20 +0000
@@ -0,0 +1,47 @@
+/**
+* This file is a part of the Cairo-Dock project
+*
+* Copyright : (C) see the 'copyright' file.
+* E-mail : see the 'copyright' file.
+*
+* 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 3
+* 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, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#ifndef __CD_APPLET_STRUCT__
+#define __CD_APPLET_STRUCT__
+
+#include <cairo-dock.h>
+
+#include <dbus/dbus-glib.h>
+
+//\___________ structure containing the applet's configuration parameters.
+struct _AppletConfig {
+} ;
+
+struct _dbus_power_object_info {
+ char* name;
+ char* path;
+ char* interface;
+ char* resume_signal;
+ int signal_type;
+};
+
+//\___________ structure containing the applet's data, like surfaces, dialogs, results of calculus, etc.
+struct _AppletData {
+ DBusGProxy *pProxy;
+ struct _dbus_power_object_info *power_object_info;
+} ;
+
+
+#endif
=== modified file 'copyright' (properties changed: +x to -x)
--- copyright 2013-02-26 23:16:49 +0000
+++ copyright 2014-09-05 11:39:20 +0000
@@ -189,3 +189,10 @@
* 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
+
+Files: Suspend-Workaround/*
+Copyright: 2014 Jesús González <jgonzalez@xxxxxxxxxxxxxxxx>
+License: GPL 3+ (See /usr/share/common-licenses/GPL-3 for complete license)
+
+Icon Suspend-Workaround/data/icon.png based on the works of New Mooon
+<newmooon@xxxxxxxxx> and icons from the gnome icons theme by GNOME icon artists.
Follow ups