On Thu, Jun 29, 2017 at 02:44:12PM +0300, Dmitry Shachnev wrote:
> The attached patch is based on upstream commits [2] and [3] and ports
> the code to be an in-process applet.

Really attaching the patch now.

--
Dmitry Shachnev
Description: make the panel applet build with gnome-panel 3.22
 - Convert from out-of-process applet to in-process applet.
 - Do not use panel_applet_set_background_widget() function.
 - Get the applets directory from pkg-config instead of using the
   hard-coded path (fix the existing pkg-config call).
 - Also, fix compiler warnings about implicitly declared functions.
Origin: upstream, https://github.com/rcaelers/workrave/commit/836f30cbfc5c6808
Last-Update: 2016-12-02

--- a/frontend/applets/gnome3/src/Makefile.am
+++ b/frontend/applets/gnome3/src/Makefile.am
@@ -1,5 +1,4 @@
 EXTRA_DIST 	= org.workrave.WorkraveApplet.panel-applet.in.in 		\
-		  org.gnome.panel.applet.WorkraveAppletFactory.service.in	\
 	  	  v4/WorkraveApplet.c				 		\
 	  	  v5/WorkraveApplet.c				 		\
 		  WorkraveApplet.h				 		\
@@ -8,7 +7,7 @@
 		  v5/workrave-gnome-applet-menu.xml
 
 BUILT_SOURCES   =
-CLEANFILES 	= $(applet_DATA) $(applet_DATA).in $(service_DATA) $(schemas_DATA)
+CLEANFILES 	= $(applet_DATA) $(applet_DATA).in $(schemas_DATA)
 
 MAINTAINERCLEANFILES =  Makefile.in DBusGnomeApplet.xml DBusGUI.xml
 
@@ -26,14 +25,14 @@
 xmlui_DATA  			= v4/workrave-gnome-applet-menu.xml
 applet_source 			= v4/WorkraveApplet.c
 else
-LIBPANEL_APPLET_DIR		= `$PKG_CONFIG --variable=libpanel_applet_dir libpanel-applet`
-appletdir       		= $(datadir)/gnome-panel/5.0/applets
+LIBPANEL_APPLET_DIR		= `$(PKG_CONFIG) --variable=libpanel_applet_dir libpanel-applet`
+appletdir			= $(LIBPANEL_APPLET_DIR)
 xmlui_DATA  			= v5/workrave-gnome-applet-menu.xml
 applet_source 			= v5/WorkraveApplet.c
 endif
 
-APPLET_IN_PROCESS 		= false
-APPLET_LOCATION   		= ${libdir}/gnome-applets/workrave-applet
+APPLET_IN_PROCESS 		= true
+APPLET_LOCATION   		= ${pkglibdir}/libworkrave-applet.so
 
 $(applet_in_files): $(applet_in_files).in Makefile
 	$(AM_V_GEN)sed \
@@ -44,15 +43,6 @@
 
 %.panel-applet: %.panel-applet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
 
-servicedir       		= $(datadir)/dbus-1/services
-service_in_files 		= org.gnome.panel.applet.WorkraveAppletFactory.service.in
-service_DATA     		= $(service_in_files:.service.in=.service)
-
-org.gnome.panel.applet.WorkraveAppletFactory.service: $(service_in_files)
-	$(AM_V_GEN)sed \
-	    -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
-	    $< > $@
-
 AM_CPPFLAGS 			= -I$(srcdir)
 
 FLAGS				= @GNOME3_CFLAGS@ @WR_FRONTEND_COMMON_INCLUDES@ @WR_COMMON_INCLUDES@ @WR_BACKEND_INCLUDES@ \
@@ -61,13 +51,14 @@
 	  	  		  -DWORKRAVE_UIDATADIR="\"${xmluidir}\"" \
 	 		 	  -DGNOMELOCALEDIR="\"$(datadir)/locale\"" 
 
-libappletdir = ${libdir}/gnome-applets
-libapplet_PROGRAMS 		= workrave-applet
+libapplet_libdir		= ${pkglibdir}
+libapplet_lib_LTLIBRARIES	= libworkrave-applet.la
 
-workrave_applet_SOURCES 	= ${applet_source} workrave-gnome-applet-generated.c
-workrave_applet_LDADD 		= @GNOME3_LIBS@  -L$(builddir)/../../common/src -lworkrave-private-1.0
-workrave_applet_CXXFLAGS 	= ${FLAGS}
-workrave_applet_CFLAGS 		= ${FLAGS}
+libworkrave_applet_la_SOURCES	= ${applet_source} workrave-gnome-applet-generated.c
+libworkrave_applet_la_LIBADD	= @GNOME3_LIBS@  -L$(builddir)/../../common/src -lworkrave-private-1.0
+libworkrave_applet_la_CXXFLAGS	= ${FLAGS}
+libworkrave_applet_la_CFLAGS	= ${FLAGS}
+libworkrave_applet_la_LDFLAGS	= -module -avoid-version
 
 # ------------------------------------------------------------------------
 
--- a/frontend/applets/gnome3/src/org.gnome.panel.applet.WorkraveAppletFactory.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.gnome.panel.applet.WorkraveAppletFactory
-Exec=@LOCATION@
--- a/frontend/applets/gnome3/src/v5/WorkraveApplet.c
+++ b/frontend/applets/gnome3/src/v5/WorkraveApplet.c
@@ -31,6 +31,11 @@
 #include <gtk/gtk.h>
 #include <gio/gio.h>
 
+// These two functions are implemented in applets/common/src/control.c,
+// but not defined in any header file.
+void workrave_timerbox_control_set_tray_icon_mode(WorkraveTimerboxControl *self, enum WorkraveTimerboxControlTrayIconMode mode);
+void workrave_timerbox_control_set_tray_icon_visible_when_not_running(WorkraveTimerboxControl *self, gboolean show);
+
 struct _WorkraveAppletPrivate
 {
   GSimpleActionGroup *action_group;
@@ -388,7 +393,6 @@
   panel_applet_set_flags(PANEL_APPLET(applet), PANEL_APPLET_EXPAND_MINOR);
 
   gtk_container_set_border_width(GTK_CONTAINER(applet), 0);
-  panel_applet_set_background_widget(PANEL_APPLET(applet), GTK_WIDGET(applet));
 
   gtk_widget_set_events(GTK_WIDGET(applet), gtk_widget_get_events(GTK_WIDGET(applet)) | GDK_BUTTON_PRESS_MASK);
   g_signal_connect(G_OBJECT(applet), "button_press_event", G_CALLBACK(button_pressed),  applet);
@@ -429,7 +433,7 @@
   return FALSE;
 }
 
-PANEL_APPLET_OUT_PROCESS_FACTORY("WorkraveAppletFactory",
-                                 WORKRAVE_TYPE_APPLET,
-                                 applet_factory,
-                                 NULL)
+PANEL_APPLET_IN_PROCESS_FACTORY("WorkraveAppletFactory",
+                                WORKRAVE_TYPE_APPLET,
+                                applet_factory,
+                                NULL)

Attachment: signature.asc
Description: PGP signature

Reply via email to