From 087ef5e029fa9762e63c32f9cdb29c25b43b06b1 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Thu, 22 Oct 2020 12:57:35 +0000 Subject: [PATCH] community/sensors-applet to 3.0.0+13+g0728426-4 --- community/sensors-applet/PKGBUILD | 12 +- .../fix-crash-destroying-active-sensor.patch | 56 ++ .../port-to-libgnome-panel.patch | 685 ++++++++++++++++++ 3 files changed, 750 insertions(+), 3 deletions(-) create mode 100644 community/sensors-applet/fix-crash-destroying-active-sensor.patch create mode 100644 community/sensors-applet/port-to-libgnome-panel.patch diff --git a/community/sensors-applet/PKGBUILD b/community/sensors-applet/PKGBUILD index f98ac3574..0df063a94 100644 --- a/community/sensors-applet/PKGBUILD +++ b/community/sensors-applet/PKGBUILD @@ -5,7 +5,7 @@ pkgname=sensors-applet pkgver=3.0.0+13+g0728426 -pkgrel=3 +pkgrel=4 pkgdesc="Applet for GNOME Panel to display readings from hardware sensors, including CPU temperature, fan speeds and voltage readings" arch=('x86_64') url="http://sensors-applet.sourceforge.net/" @@ -14,8 +14,12 @@ depends=('gnome-panel' 'libatasmart' 'lm_sensors') makedepends=('git' 'gnome-common' 'intltool' 'yelp-tools') optdepends=('hddtemp: get HDD temperatures') _commit=07284262768e3a7066da09845370d78526be6bc1 # master -source=("$pkgname::git+https://git.code.sf.net/p/sensors-applet/code#commit=$_commit") -sha256sums=('SKIP') +source=("$pkgname::git+https://git.code.sf.net/p/sensors-applet/code#commit=$_commit" + fix-crash-destroying-active-sensor.patch + port-to-libgnome-panel.patch) +sha256sums=('SKIP' + '9c4cc2accf326c44cb625f5db0b82a782351cdf8829f1a4067a30f287b6b7156' + 'cb0e35e0d6e6568f14836da7e5b78154bd4d9a4127f0f6dd476e4f7c9d62339d') pkgver() { cd $pkgname @@ -24,6 +28,8 @@ pkgver() { prepare() { cd $pkgname + patch -Np1 -i ../port-to-libgnome-panel.patch + patch -Np1 -i ../fix-crash-destroying-active-sensor.patch NOCONFIGURE=1 ./autogen.sh } diff --git a/community/sensors-applet/fix-crash-destroying-active-sensor.patch b/community/sensors-applet/fix-crash-destroying-active-sensor.patch new file mode 100644 index 000000000..0beec62ac --- /dev/null +++ b/community/sensors-applet/fix-crash-destroying-active-sensor.patch @@ -0,0 +1,56 @@ +From: Alberts Muktupāvels +Date: Sat, 28 Mar 2020 19:38:07 +0200 +Subject: fix crash destroying active sensor + +--- + sensors-applet/active-sensor.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/sensors-applet/active-sensor.c b/sensors-applet/active-sensor.c +index 725e050..9fe4718 100644 +--- a/sensors-applet/active-sensor.c ++++ b/sensors-applet/active-sensor.c +@@ -347,17 +347,17 @@ static void active_sensor_update_graph(ActiveSensor *as) { + + void active_sensor_destroy(ActiveSensor *active_sensor) { + g_debug("-- destroying active sensor label..."); +- gtk_widget_destroy(active_sensor->label); ++ g_object_unref(active_sensor->label); + + g_debug("-- destroying active sensor icon.."); +- gtk_widget_destroy(active_sensor->icon); ++ g_object_unref(active_sensor->icon); + + g_debug("-- destroying active sensor value..."); +- gtk_widget_destroy(active_sensor->value); ++ g_object_unref(active_sensor->value); + + g_debug("-- destroying active sensor graph and frame..."); +- gtk_widget_destroy(active_sensor->graph); +- gtk_widget_destroy(active_sensor->graph_frame); ++ g_object_unref(active_sensor->graph); ++ g_object_unref(active_sensor->graph_frame); + + g_debug("-- destroying active sensor values..."); + g_free(active_sensor->sensor_values); +@@ -450,11 +450,20 @@ ActiveSensor *active_sensor_new(SensorsApplet *sensors_applet, + } + + active_sensor->label = gtk_label_new(""); ++ g_object_ref_sink (active_sensor->label); ++ + active_sensor->value = gtk_label_new(""); ++ g_object_ref_sink (active_sensor->value); ++ + active_sensor->icon = gtk_image_new(); ++ g_object_ref_sink (active_sensor->icon); + + active_sensor->graph = gtk_drawing_area_new(); ++ g_object_ref_sink (active_sensor->graph); ++ + active_sensor->graph_frame = gtk_frame_new(NULL); ++ g_object_ref_sink (active_sensor->graph_frame); ++ + gtk_frame_set_shadow_type(GTK_FRAME(active_sensor->graph_frame), + GTK_SHADOW_IN); + gtk_container_add(GTK_CONTAINER(active_sensor->graph_frame), diff --git a/community/sensors-applet/port-to-libgnome-panel.patch b/community/sensors-applet/port-to-libgnome-panel.patch new file mode 100644 index 000000000..04f053610 --- /dev/null +++ b/community/sensors-applet/port-to-libgnome-panel.patch @@ -0,0 +1,685 @@ +From: Alberts Muktupāvels +Date: Thu, 26 Mar 2020 18:33:32 +0200 +Subject: port to libgnome-panel + +--- + Makefile.am | 20 --- + SensorsApplet.xml | 32 ++-- + configure.ac | 10 +- + org.gnome.applets.SensorsApplet.panel-applet.in.in | 17 --- + po/POTFILES.in | 1 + + po/POTFILES.skip | 1 - + sensors-applet/Makefile.am | 8 +- + sensors-applet/active-sensor.c | 9 +- + sensors-applet/main.c | 45 ------ + sensors-applet/sensors-applet.c | 164 ++++++++++----------- + sensors-applet/sensors-applet.h | 11 +- + sensors-applet/sensors-module.c | 62 ++++++++ + 12 files changed, 179 insertions(+), 201 deletions(-) + delete mode 100644 org.gnome.applets.SensorsApplet.panel-applet.in.in + delete mode 100644 sensors-applet/main.c + create mode 100644 sensors-applet/sensors-module.c + +diff --git a/Makefile.am b/Makefile.am +index 2ff4740..fa8686b 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2,30 +2,10 @@ ACLOCAL_AMFLAGS=-I m4 + + SUBDIRS = sensors-applet lib plugins pixmaps po help + +-appletdir = $(LIBPANEL_APPLET_DIR) +-applet_in_files = org.gnome.applets.SensorsApplet.panel-applet.in +-applet_DATA = $(applet_in_files:.panel-applet.in=.panel-applet) +- +-APPLET_LOCATION=$(pkglibdir)/$(LIBPANEL_APPLET_API_VERSION)/libsensors-applet.so +- +-$(applet_in_files): $(applet_in_files).in Makefile +- $(AM_V_GEN)sed \ +- -e "s|\@APPLET_LOCATION\@|$(APPLET_LOCATION)|" \ +- -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \ +- $< > $@ +- +-@INTLTOOL_SERVER_RULE@ +- + uidir = $(pkgdatadir)/ui + ui_DATA = SensorsApplet.xml + +-%.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 +- +-CLEANFILES = $(applet_DATA) $(applet_DATA).in $(schemas_DATA) +- + EXTRA_DIST = $(ui_DATA) \ +- $(applet_in_files:.panel-applet.in=.panel-applet.in.in) \ +- $(service_in_files) \ + intltool-merge.in intltool-extract.in intltool-update.in + + DISTCLEANFILES = intltool-extract \ +diff --git a/SensorsApplet.xml b/SensorsApplet.xml +index 41e1d1f..d90309c 100644 +--- a/SensorsApplet.xml ++++ b/SensorsApplet.xml +@@ -1,14 +1,18 @@ +-
+- +- _Preferences +- sensorsapplet.preferences +- +- +- _Help +- sensorsapplet.help +- +- +- _About +- sensorsapplet.about +- +-
++ ++ ++
++ ++ _Preferences ++ sensorsapplet.preferences ++ ++ ++ _Help ++ sensorsapplet.help ++ ++ ++ _About ++ sensorsapplet.about ++ ++
++
++
+diff --git a/configure.ac b/configure.ac +index 332faf1..d89a029 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5,7 +5,7 @@ + AC_INIT([GNOME Sensors Applet], [3.0.0], [murray.alex@gmail.com], + [sensors-applet]) + +-AC_CONFIG_SRCDIR([sensors-applet/main.c]) ++AC_CONFIG_SRCDIR([sensors-applet/sensors-module.c]) + AM_CONFIG_HEADER([sensors-applet/config.h]) + AC_CONFIG_MACRO_DIRS([m4]) + AM_INIT_AUTOMAKE([ -Wno-portability]) +@@ -52,7 +52,7 @@ AC_CHECK_HEADERS( + + GLIB_REQUIRED=2.22.0 + GTK_REQUIRED=3.4.0 +-LIBPANEL_REQUIRED=3.0.0 ++LIBGNOME_PANEL_REQUIRED=3.36.0 + LIBNOTIFY_REQUIRED=0.3.0 + LIBCAIRO_REQUIRED=1.0.4 + LIBDBUSGLIB_REQUIRED=0.80 +@@ -66,12 +66,12 @@ PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED) + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + +-PKG_CHECK_MODULES(GNOME, libpanel-applet >= $LIBPANEL_REQUIRED) ++PKG_CHECK_MODULES(GNOME, libgnome-panel >= $LIBGNOME_PANEL_REQUIRED) + AC_SUBST(GNOME_CFLAGS) + AC_SUBST(GNOME_LIBS) + +-LIBPANEL_APPLET_DIR=`$PKG_CONFIG --variable=libpanel_applet_dir libpanel-applet` +-AC_SUBST(LIBPANEL_APPLET_DIR) ++LIBGNOME_PANEL_MODULES_DIR=`$PKG_CONFIG --variable=modulesdir libgnome-panel` ++AC_SUBST([LIBGNOME_PANEL_MODULES_DIR], [$LIBGNOME_PANEL_MODULES_DIR]) + + PKG_CHECK_MODULES(CAIRO, cairo >= $LIBCAIRO_REQUIRED) + AC_SUBST(CAIRO_CFLAGS) +diff --git a/org.gnome.applets.SensorsApplet.panel-applet.in.in b/org.gnome.applets.SensorsApplet.panel-applet.in.in +deleted file mode 100644 +index 0c101ae..0000000 +--- a/org.gnome.applets.SensorsApplet.panel-applet.in.in ++++ /dev/null +@@ -1,17 +0,0 @@ +-[Applet Factory] +-Id=SensorsAppletFactory +-Location=@APPLET_LOCATION@ +-InProcess=true +-_Name=Sensors Applet Factory +-_Description=Sensors Applet Factory +- +-[SensorsApplet] +-_Name=Hardware Sensors Monitor +-_Description=Displays temperature, fan speed and voltage sensor readings +-Icon=sensors-applet +-BonoboId=OAFIID:GNOME_SensorsApplet +-X-GNOME-Bugzilla-Bugzilla=GNOME +-X-GNOME-Bugzilla-Product=gnome-applets +-X-GNOME-Bugzilla-Component=geyes +-X-GNOME-Bugzilla-Version=@VERSION@ +-X-GNOME-Bugzilla-OtherBinaries=sensors-appet +diff --git a/po/POTFILES.in b/po/POTFILES.in +index a0843b0..84a930e 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -17,4 +17,5 @@ sensors-applet/about-dialog.c + sensors-applet/sensor-config-dialog.c + sensors-applet/sensors-applet.c + sensors-applet/sensors-applet-conf.c ++sensors-applet/sensors-module.c + [type: gettext/glade]SensorsApplet.xml +diff --git a/po/POTFILES.skip b/po/POTFILES.skip +index f23af73..e69de29 100644 +--- a/po/POTFILES.skip ++++ b/po/POTFILES.skip +@@ -1 +0,0 @@ +-SensorsApplet.server.in +diff --git a/sensors-applet/Makefile.am b/sensors-applet/Makefile.am +index c5712ee..ca52205 100644 +--- a/sensors-applet/Makefile.am ++++ b/sensors-applet/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to produce Makefile.in + +-sensors_applet_libdir=${pkglibdir}/${LIBPANEL_APPLET_API_VERSION} ++sensors_applet_libdir=$(LIBGNOME_PANEL_MODULES_DIR) + sensors_applet_lib_LTLIBRARIES=libsensors-applet.la + + libsensors_applet_la_CPPFLAGS = \ +@@ -29,7 +29,7 @@ else + libnotify_SRC = + endif + +-libsensors_applet_la_SOURCES = main.c \ ++libsensors_applet_la_SOURCES = \ + about-dialog.c \ + about-dialog.h \ + active-sensor.c \ +@@ -45,6 +45,7 @@ libsensors_applet_la_SOURCES = main.c \ + sensors-applet-plugins.h \ + sensors-applet-conf.c \ + sensors-applet-conf.h \ ++ sensors-module.c \ + $(libnotify_SRC) + + libsensors_applet_la_LIBADD = \ +@@ -54,6 +55,9 @@ libsensors_applet_la_LIBADD = \ + $(CAIRO_LIBS) \ + $(LIBNOTIFY_LIBS) -ldl + ++libsensors_applet_la_LDFLAGS = \ ++ -module -avoid-version ++ + # install headers for plugins to use + INST_H_FILES = sensors-applet-plugin.h sensors-applet-sensor.h + +diff --git a/sensors-applet/active-sensor.c b/sensors-applet/active-sensor.c +index 8afb224..725e050 100644 +--- a/sensors-applet/active-sensor.c ++++ b/sensors-applet/active-sensor.c +@@ -429,7 +429,7 @@ void active_sensor_update_graph_dimensions(ActiveSensor *as, + ActiveSensor *active_sensor_new(SensorsApplet *sensors_applet, + GtkTreeRowReference *sensor_row) { + ActiveSensor *active_sensor; +- PanelAppletOrient orient; ++ GtkOrientation orient; + gint graph_size; + gboolean horizontal; + +@@ -440,7 +440,7 @@ ActiveSensor *active_sensor_new(SensorsApplet *sensors_applet, + + active_sensor = g_new0(ActiveSensor, 1); + active_sensor->sensors_applet = sensors_applet; +- active_sensor->sensors_applet->settings = panel_applet_settings_new (sensors_applet->applet, SENSORS_APPLET_SCHEMA); ++ active_sensor->sensors_applet->settings = gp_applet_settings_new (GP_APPLET(sensors_applet), SENSORS_APPLET_SCHEMA); + + active_sensor->sensor_row = sensor_row; + +@@ -463,12 +463,11 @@ ActiveSensor *active_sensor_new(SensorsApplet *sensors_applet, + GDK_ALL_EVENTS_MASK); + + /* need to set size according to orientation */ +- orient = panel_applet_get_orient(active_sensor->sensors_applet->applet); ++ orient = gp_applet_get_orientation(GP_APPLET(active_sensor->sensors_applet)); + graph_size = g_settings_get_double(active_sensor->sensors_applet->settings, + GRAPH_SIZE); + +- horizontal = ((orient == PANEL_APPLET_ORIENT_UP) || +- (orient == PANEL_APPLET_ORIENT_DOWN)); ++ horizontal = (orient == GTK_ORIENTATION_HORIZONTAL); + + active_sensor_set_graph_dimensions(active_sensor, + (horizontal ? graph_size : sensors_applet->size), +diff --git a/sensors-applet/main.c b/sensors-applet/main.c +deleted file mode 100644 +index b898fd7..0000000 +--- a/sensors-applet/main.c ++++ /dev/null +@@ -1,45 +0,0 @@ +-/* +- * Copyright (C) 2005-2009 Alex Murray +- * +- * 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, Fifth Floor, Boston, MA 02110-1301 USA. +- */ +- +-#ifdef HAVE_CONFIG_H +-#include "config.h" +-#endif /* HAVE_CONFIG_H */ +- +-#include +-#include +-#include "sensors-applet.h" +- +-static gboolean sensors_applet_fill(PanelApplet *applet, +- const gchar *iid, +- gpointer data) { +- SensorsApplet *sensors_applet; +- gboolean retval = FALSE; +- +- if (strcmp(iid, "SensorsApplet") == 0) { +- sensors_applet = g_new0(SensorsApplet, 1); +- sensors_applet->applet = applet; +- sensors_applet_init(sensors_applet); +- retval = TRUE; +- } +- return retval; +-} +- +-PANEL_APPLET_IN_PROCESS_FACTORY ("SensorsAppletFactory", +- PANEL_TYPE_APPLET, +- sensors_applet_fill, +- NULL); +diff --git a/sensors-applet/sensors-applet.c b/sensors-applet/sensors-applet.c +index e96a4ef..d197a9c 100644 +--- a/sensors-applet/sensors-applet.c ++++ b/sensors-applet/sensors-applet.c +@@ -51,6 +51,8 @@ + #define COLUMN_SPACING 2 + #define ROW_SPACING 1 + ++G_DEFINE_TYPE (SensorsApplet, sensors_applet, GP_TYPE_APPLET) ++ + /* callbacks for panel menu */ + static void prefs_cb(GSimpleAction *action, + GVariant *parameter, +@@ -90,56 +92,23 @@ static void help_cb(GSimpleAction *action, + } + } + +-static void destroy_cb(GtkWidget *widget, gpointer data) { +- SensorsApplet *sensors_applet; +- sensors_applet = (SensorsApplet *)data; +- +- /* destory dialogs, remove timeout and clear sensors tree and finally +- * the applet */ +- if (sensors_applet->prefs_dialog != NULL) { +- // destroy's dialog too +- prefs_dialog_close(sensors_applet); +- } +- +- if (sensors_applet->timeout_id) { +- g_source_remove(sensors_applet->timeout_id); +- } +- +- // destroy all active sensors +- g_list_foreach(sensors_applet->active_sensors, +- (GFunc)active_sensor_destroy, +- NULL); +- +- if (sensors_applet->sensors != NULL) { +- gtk_tree_store_clear(sensors_applet->sensors); +- } +- +- gtk_widget_destroy(GTK_WIDGET(sensors_applet->applet)); +- +- g_free(sensors_applet); +- return; +-} +- +-static void change_orient_cb (PanelApplet *applet, +- PanelAppletOrient orient, +- gpointer data) { +- SensorsApplet *sensors_applet; +- sensors_applet = (SensorsApplet *)data; +- ++static void placement_changed_cb (GpApplet *applet, ++ GtkOrientation orientation, ++ GtkPositionType position, ++ SensorsApplet *sensors_applet) { + sensors_applet_display_layout_changed(sensors_applet); + } + +-static void size_allocate_cb(PanelApplet *applet, ++static void size_allocate_cb(GtkWidget *widget, + GtkAllocation *allocation, + gpointer data) { + SensorsApplet *sensors_applet; +- PanelAppletOrient orient; ++ GtkOrientation orient; + + sensors_applet = (SensorsApplet *)data; +- orient = panel_applet_get_orient(sensors_applet->applet); ++ orient = gp_applet_get_orientation(GP_APPLET(sensors_applet)); + +- if ((orient == PANEL_APPLET_ORIENT_LEFT) || +- (orient == PANEL_APPLET_ORIENT_RIGHT)) { ++ if (orient == GTK_ORIENTATION_VERTICAL) { + if (sensors_applet->size == allocation->width) + return; + sensors_applet->size = allocation->width; +@@ -214,7 +183,8 @@ static void style_set_cb(GtkWidget *widget, + static const GActionEntry sensors_applet_menu_actions[] = { + { "preferences", prefs_cb, NULL, NULL, NULL }, + { "help", help_cb, NULL, NULL, NULL }, +- { "about", about_cb, NULL, NULL, NULL } ++ { "about", about_cb, NULL, NULL, NULL }, ++ { NULL } + }; + + #ifdef HAVE_LIBNOTIFY +@@ -523,7 +493,7 @@ static void sensors_applet_pack_display(SensorsApplet *sensors_applet) { + gtk_grid_set_column_spacing(GTK_GRID(sensors_applet->table), COLUMN_SPACING); + gtk_grid_set_row_spacing(GTK_GRID(sensors_applet->table), ROW_SPACING); + /* add table to applet */ +- gtk_container_add(GTK_CONTAINER(sensors_applet->applet), sensors_applet->table); ++ gtk_container_add(GTK_CONTAINER(sensors_applet), sensors_applet->table); + + } else { + /* destroy existing widgets - could be an +@@ -545,7 +515,7 @@ static void sensors_applet_pack_display(SensorsApplet *sensors_applet) { + "vexpand", TRUE, + "hexpand", TRUE, + NULL); +- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet)); ++ gtk_widget_show_all(GTK_WIDGET(sensors_applet)); + return; + + } +@@ -558,8 +528,7 @@ static void sensors_applet_pack_display(SensorsApplet *sensors_applet) { + LAYOUT_MODE); + + +- horizontal = (((panel_applet_get_orient(sensors_applet->applet) == PANEL_APPLET_ORIENT_UP) || +- (panel_applet_get_orient(sensors_applet->applet) == PANEL_APPLET_ORIENT_DOWN))); ++ horizontal = (gp_applet_get_orientation(GP_APPLET (sensors_applet)) == GTK_ORIENTATION_HORIZONTAL); + + /* figure out num rows / cols by how high / wide sensors + * labels / icons are and how much size we have to put them +@@ -736,7 +705,7 @@ static void sensors_applet_pack_display(SensorsApplet *sensors_applet) { + sensors_applet->table = gtk_grid_new(); + gtk_grid_set_column_spacing(GTK_GRID(sensors_applet->table), COLUMN_SPACING); + gtk_grid_set_row_spacing(GTK_GRID(sensors_applet->table), ROW_SPACING); +- gtk_container_add(GTK_CONTAINER(sensors_applet->applet), sensors_applet->table); ++ gtk_container_add(GTK_CONTAINER(sensors_applet), sensors_applet->table); + } else { + /* remove all children if table already exists so we can start + * again */ +@@ -914,7 +883,7 @@ static void sensors_applet_pack_display(SensorsApplet *sensors_applet) { + old_table_children); + g_list_free(old_table_children); + } +- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet)); ++ gtk_widget_show_all(GTK_WIDGET(sensors_applet)); + + } + +@@ -1294,10 +1263,8 @@ void sensors_applet_graph_size_changed(SensorsApplet *sensors_applet) { + + graph_size = g_settings_get_int(sensors_applet->settings, + GRAPH_SIZE); +- if (panel_applet_get_orient(sensors_applet->applet) == +- PANEL_APPLET_ORIENT_UP || +- panel_applet_get_orient(sensors_applet->applet) == +- PANEL_APPLET_ORIENT_DOWN) { ++ if (gp_applet_get_orientation(GP_APPLET (sensors_applet)) == ++ GTK_ORIENTATION_HORIZONTAL) { + /* is horizontal so set graph_size as width */ + dimensions[0] = graph_size; + dimensions[1] = sensors_applet->size; +@@ -1359,15 +1326,14 @@ gdouble sensors_applet_convert_temperature(gdouble value, + return value; + } + +-void sensors_applet_init(SensorsApplet *sensors_applet) { +- +- GSimpleActionGroup *action_group; ++static void ++sensors_applet_setup (SensorsApplet *sensors_applet) ++{ + gchar *ui_path; + + g_assert(sensors_applet); +- g_assert(sensors_applet->applet); + +- sensors_applet->settings = panel_applet_settings_new (sensors_applet->applet, SENSORS_APPLET_SCHEMA); ++ sensors_applet->settings = gp_applet_settings_new (GP_APPLET (sensors_applet), SENSORS_APPLET_SCHEMA); + + /* plugin functions are stored as name -> get_value_function pairs so + * use standard string functions on hash table */ +@@ -1379,12 +1345,7 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { + /* initialise size */ + sensors_applet->size = DEFAULT_APPLET_SIZE; + +- panel_applet_set_flags(sensors_applet->applet, +- PANEL_APPLET_EXPAND_MINOR); +- +- g_signal_connect(sensors_applet->applet, "destroy", +- G_CALLBACK(destroy_cb), sensors_applet); +- ++ gp_applet_set_flags (GP_APPLET (sensors_applet), GP_APPLET_FLAGS_EXPAND_MINOR); + + /* if not setup, write defaults to configuration backend */ + sensors_applet_conf_setup(sensors_applet); +@@ -1397,38 +1358,23 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { + if (NULL == sensors_applet->sensors) { + GtkWidget *label; + label = gtk_label_new(_("No sensors found!")); +- gtk_container_add(GTK_CONTAINER(sensors_applet->applet), label); +- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet)); ++ gtk_container_add(GTK_CONTAINER(sensors_applet), label); ++ gtk_widget_show_all(GTK_WIDGET(sensors_applet)); + return; + } + + /* only do menu and signal connections if sensors are found */ +- action_group = g_simple_action_group_new (); +- g_action_map_add_action_entries (G_ACTION_MAP (action_group), +- sensors_applet_menu_actions, +- G_N_ELEMENTS (sensors_applet_menu_actions), +- sensors_applet); + ui_path = g_build_filename (UIDIR, SENSORS_APPLET_MENU_FILE, NULL); +- panel_applet_setup_menu_from_file (sensors_applet->applet, ui_path, action_group, +- GETTEXT_PACKAGE); ++ gp_applet_setup_menu_from_file (GP_APPLET (sensors_applet), ui_path, sensors_applet_menu_actions); + g_free (ui_path); + +- gtk_widget_insert_action_group (GTK_WIDGET (sensors_applet->applet), "sensorsapplet", +- G_ACTION_GROUP (action_group)); +- +-// action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "dialog"); +- // g_object_bind_property (applet, "locked-down", action, "enabled", +-// + G_BINDING_DEFAULT|G_BINDING_INVERT_BOOLEAN|G_BINDING_SYNC_CREATE); +- +- g_object_unref (action_group); +- +- g_signal_connect(sensors_applet->applet, "style-set", ++ g_signal_connect(sensors_applet, "style-set", + G_CALLBACK(style_set_cb), sensors_applet); + +- g_signal_connect(G_OBJECT(sensors_applet->applet), "change_orient", +- G_CALLBACK(change_orient_cb), sensors_applet); ++ g_signal_connect(G_OBJECT(sensors_applet), "placement-changed", ++ G_CALLBACK(placement_changed_cb), sensors_applet); + +- g_signal_connect(G_OBJECT(sensors_applet->applet), "size_allocate", ++ g_signal_connect(G_OBJECT(sensors_applet), "size_allocate", + G_CALLBACK(size_allocate_cb), sensors_applet); + + sensors_applet_update_active_sensors(sensors_applet); +@@ -1438,6 +1384,52 @@ void sensors_applet_init(SensorsApplet *sensors_applet) { + g_settings_get_int(sensors_applet->settings, TIMEOUT) / 1000, + (GSourceFunc)sensors_applet_update_active_sensors, + sensors_applet); +- gtk_widget_show_all(GTK_WIDGET(sensors_applet->applet)); ++ gtk_widget_show_all(GTK_WIDGET(sensors_applet)); ++} ++ ++static void ++sensors_applet_constructed (GObject *object) ++{ ++ G_OBJECT_CLASS (sensors_applet_parent_class)->constructed (object); ++ sensors_applet_setup (SENSORS_APPLET (object)); + } + ++static void ++sensors_applet_finalize (GObject *object) ++{ ++ SensorsApplet *self; ++ ++ self = SENSORS_APPLET (object); ++ ++ /* destory dialogs, remove timeout and clear sensors tree */ ++ ++ if (self->prefs_dialog != NULL) ++ prefs_dialog_close (self); ++ ++ if (self->timeout_id) ++ g_source_remove (self->timeout_id); ++ ++ // destroy all active sensors ++ g_list_foreach (self->active_sensors, (GFunc) active_sensor_destroy, NULL); ++ ++ if (self->sensors != NULL) ++ gtk_tree_store_clear (self->sensors); ++ ++ G_OBJECT_CLASS (sensors_applet_parent_class)->finalize (object); ++} ++ ++static void ++sensors_applet_class_init (SensorsAppletClass *self_class) ++{ ++ GObjectClass *object_class; ++ ++ object_class = G_OBJECT_CLASS (self_class); ++ ++ object_class->constructed = sensors_applet_constructed; ++ object_class->finalize = sensors_applet_finalize; ++} ++ ++static void ++sensors_applet_init (SensorsApplet *self) ++{ ++} +diff --git a/sensors-applet/sensors-applet.h b/sensors-applet/sensors-applet.h +index e740a42..2c218f4 100644 +--- a/sensors-applet/sensors-applet.h ++++ b/sensors-applet/sensors-applet.h +@@ -20,7 +20,7 @@ + #define SENSORS_APPLET_H + + #include +-#include ++#include + #include "sensors-applet-sensor.h" + + #ifdef HAVE_CONFIG_H +@@ -118,9 +118,11 @@ typedef enum { + /* only always two type of alarms - may have more notif types */ + #define NUM_ALARMS 2 + ++#define SENSORS_TYPE_APPLET (sensors_applet_get_type ()) ++G_DECLARE_FINAL_TYPE (SensorsApplet, sensors_applet, SENSORS, APPLET, GpApplet) ++ + struct _SensorsApplet { +- /* the actual applet for this instance */ +- PanelApplet* applet; ++ GpApplet parent; + gint size; + + GtkTreeStore *sensors; +@@ -143,10 +145,7 @@ struct _SensorsApplet { + #endif // HAVE_LIBNOTIFY + }; + +- +- + /* non-static function prototypes */ +-void sensors_applet_init(SensorsApplet *sensors_applet); + void sensors_applet_sensor_enabled(SensorsApplet *sensors_applet, + GtkTreePath *path); + void sensors_applet_sensor_disabled(SensorsApplet *sensors_applet, +diff --git a/sensors-applet/sensors-module.c b/sensors-applet/sensors-module.c +new file mode 100644 +index 0000000..ab6283d +--- /dev/null ++++ b/sensors-applet/sensors-module.c +@@ -0,0 +1,62 @@ ++/* ++ * Copyright (C) 2005-2009 Alex Murray ++ * ++ * 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, Fifth Floor, Boston, MA 02110-1301 USA. ++ */ ++ ++#include "config.h" ++ ++#include "config.h" ++ ++#include ++#include ++ ++#include "sensors-applet.h" ++ ++static GpAppletInfo * ++get_applet_info (const gchar *id) ++{ ++ return gp_applet_info_new (sensors_applet_get_type, ++ _("Hardware Sensors Monitor"), ++ _("Displays temperature, fan speed and voltage sensor readings"), ++ "sensors-applet"); ++} ++ ++static const gchar * ++get_applet_id_from_iid (const gchar *iid) ++{ ++ if (g_strcmp0 (iid, "SensorsAppletFactory::SensorsApplet") == 0) ++ return "sensorsapplet"; ++ ++ return NULL; ++} ++ ++void ++gp_module_load (GpModule *module) ++{ ++ bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); ++ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); ++ gp_module_set_gettext_domain (module, GETTEXT_PACKAGE); ++ ++ gp_module_set_abi_version (module, GP_MODULE_ABI_VERSION); ++ ++ gp_module_set_id (module, "net.sourceforge.sensors-applet"); ++ gp_module_set_version (module, PACKAGE_VERSION); ++ ++ gp_module_set_applet_ids (module, "sensorsapplet", NULL); ++ ++ gp_module_set_get_applet_info (module, get_applet_info); ++ gp_module_set_compatibility (module, get_applet_id_from_iid); ++}