2008-11-03 12:08:40 +01:00
|
|
|
---
|
|
|
|
configure.ac | 1
|
|
|
|
data/gnome-settings-daemon.schemas.in | 23 ++
|
|
|
|
plugins/Makefile.am | 1
|
|
|
|
plugins/apport/Makefile.am | 32 +++
|
|
|
|
plugins/apport/apport.gnome-settings-plugin.in | 8
|
|
|
|
plugins/apport/gsd-apport-manager.c | 219 +++++++++++++++++++++++++
|
|
|
|
plugins/apport/gsd-apport-manager.h | 58 ++++++
|
|
|
|
plugins/apport/gsd-apport-plugin.c | 104 +++++++++++
|
|
|
|
plugins/apport/gsd-apport-plugin.h | 57 ++++++
|
|
|
|
9 files changed, 503 insertions(+)
|
|
|
|
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: configure.ac
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- configure.ac.orig 2010-01-13 16:44:52.000000000 +1100
|
|
|
|
+++ configure.ac 2010-01-13 16:44:52.000000000 +1100
|
|
|
|
@@ -348,6 +348,7 @@ Makefile
|
2008-11-03 12:08:40 +01:00
|
|
|
gnome-settings-daemon/Makefile
|
|
|
|
plugins/Makefile
|
|
|
|
plugins/a11y-keyboard/Makefile
|
|
|
|
+plugins/apport/Makefile
|
|
|
|
plugins/background/Makefile
|
|
|
|
plugins/clipboard/Makefile
|
|
|
|
plugins/common/Makefile
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: data/gnome-settings-daemon.schemas.in
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- data/gnome-settings-daemon.schemas.in.orig 2010-01-13 16:44:52.000000000 +1100
|
|
|
|
+++ data/gnome-settings-daemon.schemas.in 2010-01-13 16:44:52.000000000 +1100
|
2009-02-07 00:58:13 +01:00
|
|
|
@@ -26,6 +26,29 @@
|
2008-11-03 12:08:40 +01:00
|
|
|
</schema>
|
2009-02-07 00:58:13 +01:00
|
|
|
|
|
|
|
<schema>
|
2008-11-03 12:08:40 +01:00
|
|
|
+ <key>/schemas/apps/gnome_settings_daemon/plugins/apport/active</key>
|
|
|
|
+ <applyto>/apps/gnome_settings_daemon/plugins/apport/active</applyto>
|
|
|
|
+ <owner>gnome-settings-daemon</owner>
|
|
|
|
+ <type>bool</type>
|
|
|
|
+ <default>TRUE</default>
|
|
|
|
+ <locale name="C">
|
|
|
|
+ <short>Enable Apport monitoring plugin</short>
|
|
|
|
+ <long>Set to True to enable the plugin to manage Apport crash reports.</long>
|
|
|
|
+ </locale>
|
|
|
|
+ </schema>
|
|
|
|
+ <schema>
|
|
|
|
+ <key>/schemas/apps/gnome_settings_daemon/plugins/apport/priority</key>
|
|
|
|
+ <applyto>/apps/gnome_settings_daemon/plugins/apport/priority</applyto>
|
|
|
|
+ <owner>gnome-settings-daemon</owner>
|
|
|
|
+ <type>int</type>
|
|
|
|
+ <default>400</default>
|
|
|
|
+ <locale name="C">
|
|
|
|
+ <short></short>
|
|
|
|
+ <long></long>
|
|
|
|
+ </locale>
|
|
|
|
+ </schema>
|
2009-02-07 00:58:13 +01:00
|
|
|
+
|
|
|
|
+ <schema>
|
2008-11-03 12:08:40 +01:00
|
|
|
<key>/schemas/apps/gnome_settings_daemon/plugins/background/active</key>
|
2009-02-07 00:58:13 +01:00
|
|
|
<applyto>/apps/gnome_settings_daemon/plugins/background/active</applyto>
|
|
|
|
<owner>gnome-settings-daemon</owner>
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/Makefile.am
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- plugins/Makefile.am.orig 2010-01-13 16:44:52.000000000 +1100
|
|
|
|
+++ plugins/Makefile.am 2010-01-13 16:44:52.000000000 +1100
|
2008-11-03 12:08:40 +01:00
|
|
|
@@ -3,6 +3,7 @@ NULL =
|
|
|
|
SUBDIRS = \
|
|
|
|
common \
|
|
|
|
a11y-keyboard \
|
|
|
|
+ apport \
|
|
|
|
background \
|
|
|
|
clipboard \
|
|
|
|
dummy \
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/apport/Makefile.am
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
|
|
+++ plugins/apport/Makefile.am 2010-01-13 16:44:52.000000000 +1100
|
2008-11-03 12:08:40 +01:00
|
|
|
@@ -0,0 +1,32 @@
|
|
|
|
+plugin_LTLIBRARIES = libapport.la
|
|
|
|
+
|
|
|
|
+libapport_la_SOURCES = \
|
|
|
|
+ gsd-apport-manager.c \
|
|
|
|
+ gsd-apport-manager.h \
|
|
|
|
+ gsd-apport-plugin.c \
|
|
|
|
+ gsd-apport-plugin.h
|
|
|
|
+
|
|
|
|
+libapport_la_CPPFLAGS = \
|
|
|
|
+ -I$(top_srcdir)/gnome-settings-daemon \
|
|
|
|
+ -DGNOME_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \
|
|
|
|
+ $(AM_CPPFLAGS)
|
|
|
|
+
|
|
|
|
+libapport_la_CFLAGS = \
|
|
|
|
+ $(SETTINGS_PLUGIN_CFLAGS) \
|
|
|
|
+ $(AM_CFLAGS)
|
|
|
|
+
|
|
|
|
+libapport_la_LDFLAGS = $(GSD_PLUGIN_LDFLAGS)
|
|
|
|
+
|
|
|
|
+libapport_la_LIBADD = $(SETTINGS_PLUGIN_LIBS)
|
|
|
|
+
|
|
|
|
+plugin_in_files = apport.gnome-settings-plugin.in
|
|
|
|
+
|
|
|
|
+plugin_DATA = $(plugin_in_files:.gnome-settings-plugin.in=.gnome-settings-plugin)
|
|
|
|
+
|
|
|
|
+EXTRA_DIST = $(plugin_in_files)
|
|
|
|
+
|
|
|
|
+CLEANFILES = $(plugin_DATA)
|
|
|
|
+
|
|
|
|
+DISTCLEANFILES = (plugin_DATA)
|
|
|
|
+
|
|
|
|
+@GSD_INTLTOOL_PLUGIN_RULE@
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/apport/apport.gnome-settings-plugin.in
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
|
|
+++ plugins/apport/apport.gnome-settings-plugin.in 2010-01-13 16:44:52.000000000 +1100
|
2008-11-03 12:08:40 +01:00
|
|
|
@@ -0,0 +1,8 @@
|
|
|
|
+[GNOME Settings Plugin]
|
|
|
|
+Module=apport
|
|
|
|
+IAge=0
|
|
|
|
+_Name=Apport
|
|
|
|
+_Description=Checks for new Apport crash reports and launches a handling application
|
|
|
|
+Authors=Nikolay Derkach
|
|
|
|
+Copyright=Copyright © 2008 Nikolay Derkach
|
|
|
|
+Website=
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/apport/gsd-apport-manager.c
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
|
|
+++ plugins/apport/gsd-apport-manager.c 2010-01-13 16:44:52.000000000 +1100
|
2009-02-07 00:58:13 +01:00
|
|
|
@@ -0,0 +1,220 @@
|
2008-11-03 12:08:40 +01:00
|
|
|
+/*
|
|
|
|
+ * Copyright (C) 2008 Nikolay Derkach <nderkach@gmail.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 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.
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+/* Some code was taken from update-notifier */
|
|
|
|
+
|
2009-02-07 00:58:13 +01:00
|
|
|
+#include <glib/gi18n.h>
|
2008-11-03 12:08:40 +01:00
|
|
|
+#include <gio/gio.h>
|
2009-02-07 00:58:13 +01:00
|
|
|
+#include <gtk/gtk.h>
|
2008-11-03 12:08:40 +01:00
|
|
|
+#include <dbus/dbus.h>
|
|
|
|
+#include <dbus/dbus-glib-lowlevel.h>
|
|
|
|
+
|
|
|
|
+#include "gnome-settings-profile.h"
|
|
|
|
+#include "gsd-apport-manager.h"
|
|
|
|
+
|
|
|
|
+#define GSD_APPORT_MANAGER_GET_PRIVATE(o) \
|
|
|
|
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_APPORT_MANAGER, \
|
|
|
|
+ GsdApportManagerPrivate))
|
|
|
|
+
|
|
|
|
+#define CRASHREPORT_REPORT_APP "apport-gtk"
|
|
|
|
+#define CRASHREPORT_HELPER "apport-checkreports"
|
|
|
|
+
|
|
|
|
+struct GsdApportManagerPrivate {
|
|
|
|
+ GFileMonitor *monitor;
|
|
|
|
+ guint monitor_id;
|
|
|
|
+ GtkStatusIcon *ti;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void gsd_apport_manager_class_init(GsdApportManagerClass *klass);
|
|
|
|
+static void gsd_apport_manager_init(GsdApportManager *apport_manager);
|
|
|
|
+
|
|
|
|
+G_DEFINE_TYPE (GsdApportManager, gsd_apport_manager, G_TYPE_OBJECT)
|
|
|
|
+
|
|
|
|
+static gpointer manager_object = NULL;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+static gboolean
|
|
|
|
+run_apport (void)
|
|
|
|
+{
|
|
|
|
+ char *error_msg;
|
|
|
|
+
|
|
|
|
+ gnome_settings_profile_msg ("fire up the crashreport tool");
|
|
|
|
+ return g_spawn_command_line_async (CRASHREPORT_REPORT_APP, NULL);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+hide_crash_applet (GtkStatusIcon *ti)
|
|
|
|
+{
|
|
|
|
+ gtk_status_icon_set_visible (ti, FALSE);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static gboolean
|
|
|
|
+crashreport_check (GtkStatusIcon *ti)
|
|
|
|
+{
|
|
|
|
+ gboolean crashreports_found;
|
|
|
|
+ static gboolean first_run = TRUE;
|
|
|
|
+ gboolean visible;
|
|
|
|
+ int exitcode;
|
|
|
|
+
|
|
|
|
+ gnome_settings_profile_msg ("crashreport_check");
|
|
|
|
+
|
|
|
|
+ /* don't do anything if no apport-gtk is installed */
|
|
|
|
+// if (!g_file_test (CRASHREPORT_REPORT_APP, G_FILE_TEST_IS_EXECUTABLE))
|
|
|
|
+// return FALSE;
|
|
|
|
+
|
|
|
|
+ /* check for (new) reports by calling CRASHREPORT_HELPER
|
|
|
|
+ and checking the return code */
|
|
|
|
+
|
|
|
|
+ if (!g_spawn_command_line_sync (CRASHREPORT_HELPER, NULL, NULL,
|
|
|
|
+ &exitcode, NULL)) {
|
|
|
|
+ g_warning ("Can not run %s\n", CRASHREPORT_HELPER);
|
|
|
|
+ return FALSE;
|
|
|
|
+ }
|
|
|
|
+ /* exitcode == 0: reports found, else no reports */
|
|
|
|
+ crashreports_found = !exitcode ? TRUE : FALSE;
|
|
|
|
+ visible = gtk_status_icon_get_visible (ti);
|
|
|
|
+
|
|
|
|
+ if (crashreports_found && first_run) {
|
|
|
|
+ gtk_status_icon_set_tooltip (ti, _("Crash report detected"));
|
|
|
|
+ gtk_status_icon_set_blinking (ti, TRUE);
|
|
|
|
+ gtk_status_icon_set_visible (ti, TRUE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* crashreport found and already visible */
|
|
|
|
+ if (crashreports_found && !first_run) {
|
|
|
|
+ run_apport ();
|
|
|
|
+ /* we don't care anymore and hide the icon */
|
|
|
|
+ crashreports_found = FALSE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* no crashreports, but visible */
|
|
|
|
+ if (!crashreports_found && visible) {
|
|
|
|
+ hide_crash_applet (ti);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ first_run = FALSE;
|
|
|
|
+ return TRUE;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+apport_watchdir_changed (GFileMonitor *monitor,
|
|
|
|
+ GFile *file,
|
|
|
|
+ GFile *other_file,
|
|
|
|
+ GFileMonitorEvent event_type,
|
|
|
|
+ gpointer user_data)
|
|
|
|
+{
|
|
|
|
+ GtkStatusIcon *ti = (GtkStatusIcon *)user_data;
|
|
|
|
+ if (event_type == G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED) {
|
|
|
|
+ gnome_settings_profile_msg ("G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED");
|
|
|
|
+ crashreport_check (ti);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static gboolean
|
|
|
|
+button_release_cb (GtkStatusIcon *ti)
|
|
|
|
+{
|
|
|
|
+ run_apport ();
|
|
|
|
+ hide_crash_applet (ti);
|
|
|
|
+ return TRUE;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static gboolean
|
|
|
|
+trayapplet_create (GtkStatusIcon *ti, const char *name)
|
|
|
|
+{
|
|
|
|
+ /* setup widgets */
|
|
|
|
+ ti = gtk_status_icon_new_from_icon_name (name);
|
|
|
|
+ gtk_status_icon_set_visible (ti, FALSE);
|
|
|
|
+
|
|
|
|
+ g_signal_connect (ti,
|
|
|
|
+ "activate",
|
|
|
|
+ G_CALLBACK (button_release_cb),
|
|
|
|
+ ti);
|
|
|
|
+
|
|
|
|
+ /* Check for crashes for the first time */
|
|
|
|
+ crashreport_check (ti);
|
|
|
|
+ return TRUE;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+gboolean
|
|
|
|
+gsd_apport_manager_start (GsdApportManager *manager,
|
|
|
|
+ GError **error)
|
|
|
|
+{
|
|
|
|
+ GFile *file;
|
|
|
|
+ GFileMonitor *m;
|
|
|
|
+
|
|
|
|
+ gnome_settings_profile_start ("Starting apport manager");
|
|
|
|
+
|
|
|
|
+ /* crashreport detected icon */
|
|
|
|
+ trayapplet_create (manager->priv->ti, "apport");
|
|
|
|
+
|
|
|
|
+ file = g_file_new_for_path (CRASHREPORT_DIR);
|
|
|
|
+ m = g_file_monitor_directory (file, 0, NULL, NULL);
|
|
|
|
+ g_object_unref (file);
|
|
|
|
+
|
|
|
|
+ if (m) {
|
|
|
|
+ manager->priv->monitor_id = g_signal_connect (m, "changed", G_CALLBACK (apport_watchdir_changed), manager->priv->ti);
|
|
|
|
+ manager->priv->monitor = m;
|
|
|
|
+ } else
|
|
|
|
+ return FALSE;
|
|
|
|
+
|
|
|
|
+ gnome_settings_profile_end (NULL);
|
|
|
|
+ return TRUE;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+void
|
|
|
|
+gsd_apport_manager_stop (GsdApportManager *manager)
|
|
|
|
+{
|
|
|
|
+ gnome_settings_profile_start ("Stopping apport manager");
|
|
|
|
+
|
|
|
|
+ g_signal_handler_disconnect (manager->priv->monitor, manager->priv->monitor_id);
|
|
|
|
+ g_file_monitor_cancel (manager->priv->monitor);
|
|
|
|
+ g_object_unref (manager->priv->monitor);
|
|
|
|
+
|
|
|
|
+ gtk_widget_destroy ((GtkWidget *)manager->priv->ti);
|
|
|
|
+ gnome_settings_profile_end (NULL);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+gsd_apport_manager_class_init (GsdApportManagerClass *klass)
|
|
|
|
+{
|
|
|
|
+ g_type_class_add_private (klass, sizeof (GsdApportManagerPrivate));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+gsd_apport_manager_init (GsdApportManager *manager)
|
|
|
|
+{
|
|
|
|
+ manager->priv = GSD_APPORT_MANAGER_GET_PRIVATE (manager);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+GsdApportManager *
|
|
|
|
+gsd_apport_manager_new (void)
|
|
|
|
+{
|
|
|
|
+ if (manager_object != NULL) {
|
|
|
|
+ g_object_ref (manager_object);
|
|
|
|
+ } else {
|
|
|
|
+ manager_object = g_object_new (GSD_TYPE_APPORT_MANAGER, NULL);
|
|
|
|
+ g_object_add_weak_pointer (manager_object,
|
|
|
|
+ (gpointer *) &manager_object);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return GSD_APPORT_MANAGER (manager_object);
|
|
|
|
+}
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/apport/gsd-apport-manager.h
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
|
|
+++ plugins/apport/gsd-apport-manager.h 2010-01-13 16:44:52.000000000 +1100
|
2008-11-03 12:08:40 +01:00
|
|
|
@@ -0,0 +1,58 @@
|
|
|
|
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
|
|
+ *
|
|
|
|
+ * Copyright (C) 2008 Nikolay Derkach <nderkach@gmail.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 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.
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#ifndef __GSD_APPORT_MANAGER_H
|
|
|
|
+#define __GSD_APPORT_MANAGER_H
|
|
|
|
+
|
|
|
|
+#include <glib-object.h>
|
|
|
|
+#include <gtk/gtk.h>
|
|
|
|
+
|
|
|
|
+G_BEGIN_DECLS
|
|
|
|
+
|
|
|
|
+#define GSD_TYPE_APPORT_MANAGER (gsd_apport_manager_get_type ())
|
|
|
|
+#define GSD_APPORT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSD_TYPE_APPORT_MANAGER, GsdApportManager))
|
|
|
|
+#define GSD_APPORT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_APPORT_MANAGER, GsdApportManagerClass))
|
|
|
|
+#define GSD_IS_APPORT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSD_TYPE_APPORT_MANAGER))
|
|
|
|
+#define GSD_IS_APPORT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSD_TYPE_APPORT_MANAGER))
|
|
|
|
+#define GSD_APPORT_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSD_TYPE_APPORT_MANAGER, GsdApportManagerClass))
|
|
|
|
+
|
|
|
|
+#define CRASHREPORT_DIR "/var/crash/"
|
|
|
|
+
|
|
|
|
+typedef struct GsdApportManagerPrivate GsdApportManagerPrivate;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ GObject parent;
|
|
|
|
+ GsdApportManagerPrivate *priv;
|
|
|
|
+} GsdApportManager;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ GObjectClass parent_class;
|
|
|
|
+} GsdApportManagerClass;
|
|
|
|
+
|
|
|
|
+GType gsd_apport_manager_get_type (void);
|
|
|
|
+
|
|
|
|
+GsdApportManager* gsd_apport_manager_new (void);
|
|
|
|
+gboolean gsd_apport_manager_start (GsdApportManager *manager,
|
|
|
|
+ GError **error);
|
|
|
|
+void gsd_apport_manager_stop (GsdApportManager *manager);
|
|
|
|
+
|
|
|
|
+G_END_DECLS
|
|
|
|
+
|
|
|
|
+#endif /* __GSD_APPORT_MANAGER_H */
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/apport/gsd-apport-plugin.c
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
|
|
+++ plugins/apport/gsd-apport-plugin.c 2010-01-13 16:44:52.000000000 +1100
|
2008-11-03 12:08:40 +01:00
|
|
|
@@ -0,0 +1,104 @@
|
|
|
|
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
|
|
+ *
|
|
|
|
+ * Copyright (C) 2008 Nikolay Derkach <nderkach@gmail.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#include "config.h"
|
|
|
|
+
|
|
|
|
+#include <glib/gi18n-lib.h>
|
|
|
|
+#include <gmodule.h>
|
|
|
|
+
|
|
|
|
+#include "gnome-settings-plugin.h"
|
|
|
|
+#include "gsd-apport-plugin.h"
|
|
|
|
+#include "gsd-apport-manager.h"
|
|
|
|
+
|
|
|
|
+struct GsdApportPluginPrivate {
|
|
|
|
+ GsdApportManager *manager;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+#define GSD_APPORT_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), GSD_TYPE_APPORT_PLUGIN, GsdApportPluginPrivate))
|
|
|
|
+
|
|
|
|
+GNOME_SETTINGS_PLUGIN_REGISTER (GsdApportPlugin, gsd_apport_plugin)
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+gsd_apport_plugin_init (GsdApportPlugin *plugin)
|
|
|
|
+{
|
|
|
|
+ plugin->priv = GSD_APPORT_PLUGIN_GET_PRIVATE (plugin);
|
|
|
|
+
|
|
|
|
+ g_debug ("GsdApportPlugin initializing");
|
|
|
|
+
|
|
|
|
+ plugin->priv->manager = gsd_apport_manager_new ();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+gsd_apport_plugin_finalize (GObject *object)
|
|
|
|
+{
|
|
|
|
+ GsdApportPlugin *plugin;
|
|
|
|
+
|
|
|
|
+ g_return_if_fail (object != NULL);
|
|
|
|
+ g_return_if_fail (GSD_IS_APPORT_PLUGIN (object));
|
|
|
|
+
|
|
|
|
+ g_debug ("GsdApportPlugin finalizing");
|
|
|
|
+
|
|
|
|
+ plugin = GSD_APPORT_PLUGIN (object);
|
|
|
|
+
|
|
|
|
+ g_return_if_fail (plugin->priv != NULL);
|
|
|
|
+
|
|
|
|
+ if (plugin->priv->manager != NULL) {
|
|
|
|
+ g_object_unref (plugin->priv->manager);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ G_OBJECT_CLASS (gsd_apport_plugin_parent_class)->finalize (object);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+impl_activate (GnomeSettingsPlugin *plugin)
|
|
|
|
+{
|
|
|
|
+ gboolean res;
|
|
|
|
+ GError *error;
|
|
|
|
+
|
|
|
|
+ g_debug ("Activating apport plugin");
|
|
|
|
+
|
|
|
|
+ error = NULL;
|
|
|
|
+ res = gsd_apport_manager_start (GSD_APPORT_PLUGIN (plugin)->priv->manager, &error);
|
|
|
|
+ if (! res) {
|
|
|
|
+ g_warning ("Unable to start apport manager: %s", error->message);
|
|
|
|
+ g_error_free (error);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+impl_deactivate (GnomeSettingsPlugin *plugin)
|
|
|
|
+{
|
|
|
|
+ g_debug ("Deactivating apport plugin");
|
|
|
|
+ gsd_apport_manager_stop (GSD_APPORT_PLUGIN (plugin)->priv->manager);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+gsd_apport_plugin_class_init (GsdApportPluginClass *klass)
|
|
|
|
+{
|
|
|
|
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
+ GnomeSettingsPluginClass *plugin_class = GNOME_SETTINGS_PLUGIN_CLASS (klass);
|
|
|
|
+
|
|
|
|
+ object_class->finalize = gsd_apport_plugin_finalize;
|
|
|
|
+
|
|
|
|
+ plugin_class->activate = impl_activate;
|
|
|
|
+ plugin_class->deactivate = impl_deactivate;
|
|
|
|
+
|
|
|
|
+ g_type_class_add_private (klass, sizeof (GsdApportPluginPrivate));
|
|
|
|
+}
|
2010-01-18 14:20:07 +01:00
|
|
|
Index: plugins/apport/gsd-apport-plugin.h
|
2008-11-03 12:08:40 +01:00
|
|
|
===================================================================
|
2010-01-18 14:20:07 +01:00
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
|
|
+++ plugins/apport/gsd-apport-plugin.h 2010-01-13 16:44:52.000000000 +1100
|
2008-11-03 12:08:40 +01:00
|
|
|
@@ -0,0 +1,57 @@
|
|
|
|
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
|
|
|
|
+ *
|
|
|
|
+ * Copyright (C) 2008 Nikolay Derkach <nderkach@gmail.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+#ifndef __GSD_APPORT_PLUGIN_H__
|
|
|
|
+#define __GSD_APPORT_PLUGIN_H__
|
|
|
|
+
|
|
|
|
+#include <glib.h>
|
|
|
|
+#include <glib-object.h>
|
|
|
|
+#include <gmodule.h>
|
|
|
|
+
|
|
|
|
+#include "gnome-settings-plugin.h"
|
|
|
|
+
|
|
|
|
+G_BEGIN_DECLS
|
|
|
|
+
|
|
|
|
+#define GSD_TYPE_APPORT_PLUGIN (gsd_apport_plugin_get_type ())
|
|
|
|
+#define GSD_APPORT_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSD_TYPE_APPORT_PLUGIN, GsdApportPlugin))
|
|
|
|
+#define GSD_APPORT_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_TYPE_APPORT_PLUGIN, GsdApportPluginClass))
|
|
|
|
+#define GSD_IS_APPORT_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSD_TYPE_APPORT_PLUGIN))
|
|
|
|
+#define GSD_IS_APPORT_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSD_TYPE_APPORT_PLUGIN))
|
|
|
|
+#define GSD_APPORT_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSD_TYPE_APPORT_PLUGIN, GsdApportPluginClass))
|
|
|
|
+
|
|
|
|
+typedef struct GsdApportPluginPrivate GsdApportPluginPrivate;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ GnomeSettingsPlugin parent;
|
|
|
|
+ GsdApportPluginPrivate *priv;
|
|
|
|
+} GsdApportPlugin;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ GnomeSettingsPluginClass parent_class;
|
|
|
|
+} GsdApportPluginClass;
|
|
|
|
+
|
|
|
|
+GType gsd_apport_plugin_get_type (void) G_GNUC_CONST;
|
|
|
|
+
|
|
|
|
+/* All the plugins must implement this function */
|
|
|
|
+G_MODULE_EXPORT GType register_gnome_settings_plugin (GTypeModule *module);
|
|
|
|
+
|
|
|
|
+G_END_DECLS
|
|
|
|
+
|
|
|
|
+#endif /* __GSD_APPORT_PLUGIN_H__ */
|