Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--activities/web/webactivity.py28
-rw-r--r--configure.ac2
-rw-r--r--lib/python/_sugar.defs18
-rw-r--r--lib/python/_sugar.override2
-rw-r--r--lib/src/Makefile.am4
-rw-r--r--lib/src/SugarContentHandler.cpp3
-rw-r--r--lib/src/SugarDownload.cpp54
-rw-r--r--lib/src/sugar-browser-chandler.c56
-rw-r--r--lib/src/sugar-browser-chandler.h39
-rw-r--r--lib/src/sugar-browser.cpp2
-rw-r--r--lib/src/sugar-download-manager.c121
-rw-r--r--lib/src/sugar-download-manager.h55
-rw-r--r--lib/src/sugar-marshal.list2
-rw-r--r--services/Makefile.am2
-rw-r--r--services/clipboard/ClipboardService.py76
-rw-r--r--services/clipboard/Makefile.am15
-rw-r--r--services/clipboard/__init__.py0
-rw-r--r--services/clipboard/org.laptop.Clipboard.service.in4
-rwxr-xr-xservices/clipboard/sugar-clipboard44
-rw-r--r--shell/view/ClipboardIcon.py37
-rw-r--r--shell/view/ClipboardMenu.py74
-rw-r--r--shell/view/Makefile.am2
-rw-r--r--shell/view/frame/ClipboardBox.py42
-rw-r--r--shell/view/frame/Frame.py6
-rw-r--r--shell/view/frame/Makefile.am1
-rwxr-xr-xsugar-emulator6
-rw-r--r--sugar/Makefile.am2
-rw-r--r--sugar/clipboard/ClipboardService.py73
-rw-r--r--sugar/clipboard/Makefile.am5
-rw-r--r--sugar/clipboard/__init__.py0
-rw-r--r--sugar/graphics/ClipboardBubble.py133
-rw-r--r--sugar/graphics/Makefile.am1
-rw-r--r--sugar/graphics/menu.py8
34 files changed, 138 insertions, 780 deletions
diff --git a/.gitignore b/.gitignore
index edc5592..0748927 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,4 +53,3 @@ lib/src/sugar-marshal.c
lib/src/sugar-marshal.h
lib/src/stamp-sugar-marshal.c
lib/src/stamp-sugar-marshal.h
-services/clipboard/org.laptop.Clipboard.service
diff --git a/activities/web/webactivity.py b/activities/web/webactivity.py
index 6fc0fac..200bd39 100644
--- a/activities/web/webactivity.py
+++ b/activities/web/webactivity.py
@@ -18,12 +18,10 @@ from gettext import gettext as _
import gtk
import gtkmozembed
import logging
-import dbus
import _sugar
from sugar.activity import ActivityFactory
from sugar.activity.Activity import Activity
-from sugar.clipboard import ClipboardService
from sugar import env
from sugar.graphics import style
import web.stylesheet
@@ -106,28 +104,12 @@ def start():
style.load_stylesheet(web.stylesheet)
- download_manager = _sugar.get_download_manager()
- download_manager.connect('download-started', download_started_cb)
- download_manager.connect('download-completed', download_completed_cb)
- download_manager.connect('download-cancelled', download_started_cb)
- download_manager.connect('download-progress', download_progress_cb)
+ chandler = _sugar.get_browser_chandler()
+ chandler.connect('handle-content', handle_content_cb)
def stop():
gtkmozembed.pop_startup()
-def download_started_cb(download_manager, url, mimeType, tmpFileName):
- cbService = ClipboardService.get_instance()
- cbService.add_object(mimeType, tmpFileName)
-
-def download_completed_cb(download_manager, tmpFileName):
- cbService = ClipboardService.get_instance()
- cbService.update_object_state(tmpFileName, 100)
-
-def download_cancelled_cb(download_manager, tmpFileName):
- cbService = ClipboardService.get_instance()
- #FIXME: Needs to update the state of the object to 'download stopped'
- #cbService.update_object_state(tmpFileName, 100)
-
-def download_progress_cb(download_manager, tmpFileName, progress):
- cbService = ClipboardService.get_instance()
- cbService.update_object_state(tmpFileName, progress)
+def handle_content_cb(chandler, url, mimeType, tmpFileName):
+ activity = ActivityFactory.create("org.laptop.sugar.Xbook")
+ activity.execute("open_document", [tmpFileName])
diff --git a/configure.ac b/configure.ac
index 52320d1..6c904de 100644
--- a/configure.ac
+++ b/configure.ac
@@ -65,7 +65,6 @@ lib/threadframe/Makefile
services/Makefile
services/presence/Makefile
services/nm/Makefile
-services/clipboard/Makefile
shell/Makefile
shell/conf/Makefile
shell/data/Makefile
@@ -78,7 +77,6 @@ sugar/__installed__.py
sugar/activity/Makefile
sugar/chat/Makefile
sugar/chat/sketchpad/Makefile
-sugar/clipboard/Makefile
sugar/graphics/Makefile
sugar/p2p/Makefile
sugar/presence/Makefile
diff --git a/lib/python/_sugar.defs b/lib/python/_sugar.defs
index 6a42d96..5a31c91 100644
--- a/lib/python/_sugar.defs
+++ b/lib/python/_sugar.defs
@@ -35,11 +35,11 @@
(gtype-id "SUGAR_TYPE_PUSH_SCROLLER")
)
-(define-object DownloadManager
+(define-object BrowserChandler
(in-module "Sugar")
(parent "GObject")
- (c-name "SugarDownloadManager")
- (gtype-id "SUGAR_TYPE_DOWNLOAD_MANAGER")
+ (c-name "SugarBrowserChandler")
+ (gtype-id "SUGAR_TYPE_BROWSER_CHANDLER")
)
;; Enumerations and flags ...
@@ -181,14 +181,14 @@
)
)
-;; From sugar-download-manager.h
+;; From sugar-browser-chandler.h
-(define-function sugar_download_manager_get_type
- (c-name "sugar_download_manager_get_type")
+(define-function sugar_browser_chandler_get_type
+ (c-name "sugar_browser_chandler_get_type")
(return-type "GType")
)
-(define-function get_download_manager
- (c-name "sugar_get_download_manager")
- (return-type "SugarDownloadManager*")
+(define-function get_browser_chandler
+ (c-name "sugar_get_browser_chandler")
+ (return-type "SugarBrowserChandler*")
)
diff --git a/lib/python/_sugar.override b/lib/python/_sugar.override
index f1f5cd7..9d27bbe 100644
--- a/lib/python/_sugar.override
+++ b/lib/python/_sugar.override
@@ -9,7 +9,7 @@ headers
#include "sugar-address-entry.h"
#include "sugar-tray-manager.h"
#include "sugar-push-scroller.h"
-#include "sugar-download-manager.h"
+#include "sugar-browser-chandler.h"
%%
modulename gecko
diff --git a/lib/src/Makefile.am b/lib/src/Makefile.am
index 7416f83..0224885 100644
--- a/lib/src/Makefile.am
+++ b/lib/src/Makefile.am
@@ -19,8 +19,8 @@ libsugarprivate_la_SOURCES = \
sugar-address-entry.c \
sugar-browser.h \
sugar-browser.cpp \
- sugar-download-manager.h \
- sugar-download-manager.c \
+ sugar-browser-chandler.h \
+ sugar-browser-chandler.c \
SugarContentHandler.h \
SugarContentHandler.cpp \
SugarDownload.h \
diff --git a/lib/src/SugarContentHandler.cpp b/lib/src/SugarContentHandler.cpp
index de30aec..b39b20b 100644
--- a/lib/src/SugarContentHandler.cpp
+++ b/lib/src/SugarContentHandler.cpp
@@ -1,6 +1,9 @@
#include <nsCExternalHandlerService.h>
#include <nsIFile.h>
+#include "sugar-browser-chandler.h"
+#include "SugarDownload.h"
+
#include "SugarContentHandler.h"
GSugarContentHandler::GSugarContentHandler()
diff --git a/lib/src/SugarDownload.cpp b/lib/src/SugarDownload.cpp
index b087670..9c68b8f 100644
--- a/lib/src/SugarDownload.cpp
+++ b/lib/src/SugarDownload.cpp
@@ -1,4 +1,4 @@
-#include "sugar-download-manager.h"
+#include "sugar-browser-chandler.h"
#include "SugarDownload.h"
@@ -35,39 +35,27 @@ GSugarDownload::Init (nsIURI *aSource,
NS_IMETHODIMP
GSugarDownload::OnStateChange (nsIWebProgress *aWebProgress, nsIRequest *aRequest,
PRUint32 aStateFlags, nsresult aStatus)
-{
- SugarDownloadManager *download_manager = sugar_get_download_manager();
-
- if (((aStateFlags & STATE_IS_REQUEST) &&
- (aStateFlags & STATE_IS_NETWORK) &&
- (aStateFlags & STATE_START)) ||
- aStateFlags == STATE_START) {
+{
+ nsCString url;
+ nsCString mimeType;
+ nsCString targetURI;
- nsCString url;
- nsCString mimeType;
+ if ((((aStateFlags & STATE_IS_REQUEST) &&
+ (aStateFlags & STATE_IS_NETWORK) &&
+ (aStateFlags & STATE_STOP)) ||
+ aStateFlags == STATE_STOP) &&
+ NS_SUCCEEDED (aStatus)) {
mMIMEInfo->GetMIMEType(mimeType);
mSource->GetSpec(url);
- sugar_download_manager_download_started(download_manager,
- url.get(),
- mimeType.get(),
- mTargetFileName.get());
-
- } else if (((aStateFlags & STATE_IS_REQUEST) &&
- (aStateFlags & STATE_IS_NETWORK) &&
- (aStateFlags & STATE_STOP)) ||
- aStateFlags == STATE_STOP) {
-
- if (NS_SUCCEEDED (aStatus)) {
- sugar_download_manager_download_completed(download_manager,
- mTargetFileName.get());
- } else {
- sugar_download_manager_download_cancelled(download_manager,
- mTargetFileName.get());
- }
+ SugarBrowserChandler *browser_chandler = sugar_get_browser_chandler();
+ sugar_browser_chandler_handle_content(browser_chandler,
+ url.get(),
+ mimeType.get(),
+ mTargetFileName.get());
}
-
+
return NS_OK;
}
@@ -91,15 +79,7 @@ GSugarDownload::OnProgressChange64 (nsIWebProgress *aWebProgress,
PRInt64 aMaxSelfProgress,
PRInt64 aCurTotalProgress,
PRInt64 aMaxTotalProgress)
-{
- SugarDownloadManager *download_manager = sugar_get_download_manager();
- PRInt32 percentComplete =
- (PRInt32)(((float)aCurSelfProgress / (float)aMaxSelfProgress) * 100.0);
-
- sugar_download_manager_update_progress(download_manager,
- mTargetFileName.get(),
- percentComplete);
-
+{
return NS_OK;
}
diff --git a/lib/src/sugar-browser-chandler.c b/lib/src/sugar-browser-chandler.c
new file mode 100644
index 0000000..a65519a
--- /dev/null
+++ b/lib/src/sugar-browser-chandler.c
@@ -0,0 +1,56 @@
+#include "sugar-marshal.h"
+#include "sugar-browser-chandler.h"
+
+enum {
+ HANDLE_CONTENT,
+ LAST_SIGNAL
+};
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE(SugarBrowserChandler, sugar_browser_chandler, G_TYPE_OBJECT)
+
+SugarBrowserChandler *browserChandler = NULL;
+
+static void
+sugar_browser_chandler_init(SugarBrowserChandler *browserChandler)
+{
+}
+
+static void
+sugar_browser_chandler_class_init(SugarBrowserChandlerClass *browser_chandler_class)
+{
+ signals[HANDLE_CONTENT] =
+ g_signal_new ("handle-content",
+ G_OBJECT_CLASS_TYPE (browser_chandler_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (SugarBrowserChandlerClass, handle_content),
+ NULL, NULL,
+ sugar_marshal_VOID__STRING_STRING_STRING,
+ G_TYPE_NONE, 3,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+}
+
+SugarBrowserChandler *
+sugar_get_browser_chandler()
+{
+ if(browserChandler == NULL)
+ browserChandler = g_object_new(SUGAR_TYPE_BROWSER_CHANDLER, NULL);
+
+ return browserChandler;
+}
+
+void
+sugar_browser_chandler_handle_content (SugarBrowserChandler *browser_chandler,
+ const char *url,
+ const char *mime_type,
+ const char *tmp_file_name)
+{
+ g_signal_emit(browser_chandler,
+ signals[HANDLE_CONTENT],
+ 0 /* details */,
+ url,
+ mime_type,
+ tmp_file_name);
+}
diff --git a/lib/src/sugar-browser-chandler.h b/lib/src/sugar-browser-chandler.h
new file mode 100644
index 0000000..cccd983
--- /dev/null
+++ b/lib/src/sugar-browser-chandler.h
@@ -0,0 +1,39 @@
+#ifndef __SUGAR_BROWSER_CHANDLER_H__
+#define __SUGAR_BROWSER_CHANDLER_H__
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SugarBrowserChandler SugarBrowserChandler;
+typedef struct _SugarBrowserChandlerClass SugarBrowserChandlerClass;
+
+#define SUGAR_TYPE_BROWSER_CHANDLER (sugar_browser_chandler_get_type())
+#define SUGAR_BROWSER_CHANDLER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), SUGAR_TYPE_BROWSER_CHANDLER, SugarBrowserChandler))
+#define SUGAR_BROWSER_CHANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SUGAR_TYPE_BROWSER_CHANDLER, SugarBrowserChandlerClass))
+#define SUGAR_IS_BROWSER_CHANDLER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), SUGAR_TYPE_BROWSER_CHANDLER))
+#define SUGAR_IS_BROWSER_CHANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SUGAR_TYPE_BROWSER_CHANDLER))
+#define SUGAR_BROWSER_CHANDLER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), SUGAR_TYPE_BROWSER_CHANDLER, SugarBrowserChandlerClass))
+
+struct _SugarBrowserChandler {
+ GObject base_instance;
+};
+
+struct _SugarBrowserChandlerClass {
+ GObjectClass base_class;
+
+ void (* handle_content) (char *url, char *tmp_file_name);
+
+};
+
+GType sugar_browser_chandler_get_type (void);
+SugarBrowserChandler *sugar_get_browser_chandler (void);
+void sugar_browser_chandler_handle_content (SugarBrowserChandler *chandler,
+ const char *url,
+ const char *mime_type,
+ const char *tmp_file_name);
+
+G_END_DECLS
+
+#endif
diff --git a/lib/src/sugar-browser.cpp b/lib/src/sugar-browser.cpp
index f787f19..d2ffb8a 100644
--- a/lib/src/sugar-browser.cpp
+++ b/lib/src/sugar-browser.cpp
@@ -78,7 +78,7 @@ sugar_browser_startup(void)
PR_TRUE, getter_AddRefs(file));
NS_ENSURE_TRUE(file, FALSE);
- rv = prefService->ReadUserPrefs (file);
+ rv = prefService->ReadUserPrefs (file);
if (NS_FAILED(rv)) {
g_warning ("failed to read default preferences, error: %x", rv);
return FALSE;
diff --git a/lib/src/sugar-download-manager.c b/lib/src/sugar-download-manager.c
deleted file mode 100644
index c3ffcf2..0000000
--- a/lib/src/sugar-download-manager.c
+++ /dev/null
@@ -1,121 +0,0 @@
-#include "sugar-marshal.h"
-#include "sugar-download-manager.h"
-
-enum {
- DOWNLOAD_STARTED,
- DOWNLOAD_COMPLETED,
- DOWNLOAD_CANCELLED,
- DOWNLOAD_PROGRESS,
- LAST_SIGNAL
-};
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE(SugarDownloadManager, sugar_download_manager, G_TYPE_OBJECT)
-
-SugarDownloadManager *DownloadManager = NULL;
-
-static void
-sugar_download_manager_init(SugarDownloadManager *DownloadManager)
-{
-}
-
-static void
-sugar_download_manager_class_init(SugarDownloadManagerClass *download_manager_class)
-{
- signals[DOWNLOAD_STARTED] =
- g_signal_new ("download-started",
- G_OBJECT_CLASS_TYPE (download_manager_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content),
- NULL, NULL,
- sugar_marshal_VOID__STRING_STRING_STRING,
- G_TYPE_NONE, 3,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- signals[DOWNLOAD_COMPLETED] =
- g_signal_new ("download-completed",
- G_OBJECT_CLASS_TYPE (download_manager_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content),
- NULL, NULL,
- sugar_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[DOWNLOAD_CANCELLED] =
- g_signal_new ("download-cancelled",
- G_OBJECT_CLASS_TYPE (download_manager_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content),
- NULL, NULL,
- sugar_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-
- signals[DOWNLOAD_PROGRESS] =
- g_signal_new ("download-progress",
- G_OBJECT_CLASS_TYPE (download_manager_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content),
- NULL, NULL,
- sugar_marshal_VOID__STRING_INT,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
- G_TYPE_INT);
-}
-
-SugarDownloadManager *
-sugar_get_download_manager()
-{
- if(DownloadManager == NULL)
- DownloadManager = g_object_new(SUGAR_TYPE_DOWNLOAD_MANAGER, NULL);
-
- return DownloadManager;
-}
-
-void
-sugar_download_manager_download_started (SugarDownloadManager *download_manager,
- const char *url,
- const char *mime_type,
- const char *tmp_file_name)
-{
- g_signal_emit(download_manager,
- signals[DOWNLOAD_STARTED],
- 0 /* details */,
- url,
- mime_type,
- tmp_file_name);
-}
-
-void
-sugar_download_manager_download_completed (SugarDownloadManager *download_manager,
- const char *tmp_file_name)
-{
- g_signal_emit(download_manager,
- signals[DOWNLOAD_COMPLETED],
- 0 /* details */,
- tmp_file_name);
-}
-
-void sugar_download_manager_download_cancelled (SugarDownloadManager *download_manager,
- const char *tmp_file_name)
-{
- g_signal_emit(download_manager,
- signals[DOWNLOAD_CANCELLED],
- 0 /* details */,
- tmp_file_name);
-}
-
-void
-sugar_download_manager_update_progress (SugarDownloadManager *download_manager,
- const char *tmp_file_name,
- const int percent)
-{
- g_signal_emit(download_manager,
- signals[DOWNLOAD_PROGRESS],
- 0 /* details */,
- tmp_file_name,
- percent);
-}
diff --git a/lib/src/sugar-download-manager.h b/lib/src/sugar-download-manager.h
deleted file mode 100644
index 2d112d8..0000000
--- a/lib/src/sugar-download-manager.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef __SUGAR_DOWNLOAD_MANAGER_H__
-#define __SUGAR_DOWNLOAD_MANAGER_H__
-
-#include <glib-object.h>
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _SugarDownloadManager SugarDownloadManager;
-typedef struct _SugarDownloadManagerClass SugarDownloadManagerClass;
-
-#define SUGAR_TYPE_DOWNLOAD_MANAGER (sugar_download_manager_get_type())
-#define SUGAR_DOWNLOAD_MANAGER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), SUGAR_TYPE_DOWNLOAD_MANAGER, SugarDownloadManager))
-#define SUGAR_DOWNLOAD_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SUGAR_TYPE_DOWNLOAD_MANAGER, SugarDownloadManagerClass))
-#define SUGAR_IS_DOWNLOAD_MANAGER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), SUGAR_TYPE_DOWNLOAD_MANAGER))
-#define SUGAR_IS_DOWNLOAD_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SUGAR_TYPE_DOWNLOAD_MANAGER))
-#define SUGAR_DOWNLOAD_MANAGER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), SUGAR_TYPE_DOWNLOAD_MANAGER, SugarDownloadManagerClass))
-
-struct _SugarDownloadManager {
- GObject base_instance;
-};
-
-struct _SugarDownloadManagerClass {
- GObjectClass base_class;
-
- void (* handle_content) (char *url, char *tmp_file_name);
-
-};
-
-GType sugar_download_manager_get_type(void);
-
-SugarDownloadManager *sugar_get_download_manager(void);
-
-void sugar_download_manager_download_started(
- SugarDownloadManager *download_manager,
- const char *url,
- const char *mime_type,
- const char *tmp_file_name);
-
-void sugar_download_manager_download_completed(
- SugarDownloadManager *download_manager,
- const char *tmp_file_name);
-
-void sugar_download_manager_download_cancelled(
- SugarDownloadManager *download_manager,
- const char *tmp_file_name);
-
-void sugar_download_manager_update_progress(
- SugarDownloadManager *download_manager,
- const char *tmp_file_name,
- const int percent);
-
-G_END_DECLS
-
-#endif
diff --git a/lib/src/sugar-marshal.list b/lib/src/sugar-marshal.list
index 4d987f8..5a0120f 100644
--- a/lib/src/sugar-marshal.list
+++ b/lib/src/sugar-marshal.list
@@ -1,5 +1,3 @@
VOID:OBJECT,STRING,LONG,LONG
VOID:OBJECT,LONG
VOID:STRING,STRING,STRING
-VOID:STRING,INT
-VOID:STRING
diff --git a/services/Makefile.am b/services/Makefile.am
index 2a0fe5a..1bae7e7 100644
--- a/services/Makefile.am
+++ b/services/Makefile.am
@@ -1 +1 @@
-SUBDIRS = presence nm clipboard
+SUBDIRS = presence nm
diff --git a/services/clipboard/ClipboardService.py b/services/clipboard/ClipboardService.py
deleted file mode 100644
index 9ed9217..0000000
--- a/services/clipboard/ClipboardService.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# vi: ts=4 ai noet
-#
-# Copyright (C) 2006, 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 St, Fifth Floor, Boston, MA 02110-1301 USA
-
-import logging
-import gobject
-import dbus
-import dbus.service
-from sugar import env
-
-class ClipboardDBusServiceHelper(dbus.service.Object):
-
- _CLIPBOARD_DBUS_INTERFACE = "org.laptop.Clipboard"
- _CLIPBOARD_OBJECT_PATH = "/org/laptop/Clipboard"
-
- def __init__(self, parent):
- self._parent = parent
-
- bus = dbus.SessionBus()
- bus_name = dbus.service.BusName(self._CLIPBOARD_DBUS_INTERFACE, bus=bus)
- dbus.service.Object.__init__(self, bus_name, self._CLIPBOARD_OBJECT_PATH)
-
- @dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
- in_signature="ss", out_signature="")
- def add_object(self, mimeType, fileName):
- self.object_added(mimeType, fileName)
- logging.debug('Added object of type ' + mimeType + ' with path at ' + fileName)
-
- @dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
- in_signature="s", out_signature="")
- def delete_object(self, fileName):
- self.object_deleted(fileName)
- logging.debug('Deleted object with path at ' + fileName)
-
- @dbus.service.method(_CLIPBOARD_DBUS_INTERFACE,
- in_signature="si", out_signature="")
- def update_object_state(self, fileName, percent):
- logging.debug('Updated object with path at ' + fileName + ' with percent ' + str(percent))
- self.object_state_updated(fileName, percent)
-
- @dbus.service.signal(_CLIPBOARD_DBUS_INTERFACE, signature="ss")
- def object_added(self, mimeType, fileName):
- pass
-
- @dbus.service.signal(_CLIPBOARD_DBUS_INTERFACE, signature="s")
- def object_deleted(self, fileName):
- pass
-
- @dbus.service.signal(_CLIPBOARD_DBUS_INTERFACE, signature="si")
- def object_state_updated(self, fileName, percent):
- pass
-
-class ClipboardService(object):
- def __init__(self):
- self._dbus_helper = ClipboardDBusServiceHelper(self)
-
- def run(self):
- loop = gobject.MainLoop()
- try:
- loop.run()
- except KeyboardInterrupt:
- print 'Ctrl+C pressed, exiting...'
diff --git a/services/clipboard/Makefile.am b/services/clipboard/Makefile.am
deleted file mode 100644
index ccc54f2..0000000
--- a/services/clipboard/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-servicedir = $(datadir)/sugar/services
-service_in_files = org.laptop.Clipboard.service.in
-service_DATA = $(service_in_files:.service.in=.service)
-
-$(service_DATA): $(service_in_files) Makefile
- @sed -e "s|\@bindir\@|$(bindir)|" $< > $@
-
-sugardir = $(pkgdatadir)/services/clipboard
-sugar_PYTHON = \
- __init__.py \
- ClipboardService.py
-
-bin_SCRIPTS = sugar-clipboard
-
-EXTRA_DIST = $(service_in_files) $(bin_SCRIPTS)
diff --git a/services/clipboard/__init__.py b/services/clipboard/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/services/clipboard/__init__.py
+++ /dev/null
diff --git a/services/clipboard/org.laptop.Clipboard.service.in b/services/clipboard/org.laptop.Clipboard.service.in
deleted file mode 100644
index b38bf2b..0000000
--- a/services/clipboard/org.laptop.Clipboard.service.in
+++ /dev/null
@@ -1,4 +0,0 @@
-[D-BUS Service]
-Name = org.laptop.Clipboard
-Exec = @bindir@/sugar-clipboard
-
diff --git a/services/clipboard/sugar-clipboard b/services/clipboard/sugar-clipboard
deleted file mode 100755
index bcbd280..0000000
--- a/services/clipboard/sugar-clipboard
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/python
-# vi: ts=4 ai noet
-#
-# Copyright (C) 2006, 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 St, Fifth Floor, Boston, MA 02110-1301 USA
-
-import sys
-import logging
-
-from sugar import logger
-logger.start('clipboard')
-
-import gobject
-import pygtk
-pygtk.require('2.0')
-
-import dbus.glib
-
-from sugar import env
-
-sys.path.insert(0, env.get_services_dir())
-
-from clipboard.ClipboardService import ClipboardService
-
-logging.info('Starting clipboard service.')
-
-gobject.threads_init()
-dbus.glib.threads_init()
-
-app = ClipboardService()
-app.run()
diff --git a/shell/view/ClipboardIcon.py b/shell/view/ClipboardIcon.py
deleted file mode 100644
index db23353..0000000
--- a/shell/view/ClipboardIcon.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from sugar.graphics.menuicon import MenuIcon
-from view.ClipboardMenu import ClipboardMenu
-from sugar.activity import ActivityFactory
-from sugar.clipboard import ClipboardService
-
-class ClipboardIcon(MenuIcon):
-
- def __init__(self, menu_shell, file_name):
- MenuIcon.__init__(self, menu_shell, icon_name='activity-xbook')
- self._file_name = file_name
- self._percent = 0
- self.connect('activated', self._icon_activated_cb)
- self._menu = None
-
- def create_menu(self):
- self._menu = ClipboardMenu(self._file_name, self._percent)
- self._menu.connect('action', self._popup_action_cb)
- return self._menu
-
- def set_percent(self, percent):
- self._percent = percent
- if self._menu:
- self._menu.set_percent(percent)
-
- def _icon_activated_cb(self, icon):
- if self._percent == 100:
- activity = ActivityFactory.create("org.laptop.sugar.Xbook")
- activity.execute("open_document", [self._file_name])
-
- def _popup_action_cb(self, popup, action):
- self.popdown()
-
- if action == ClipboardMenu.ACTION_STOP_DOWNLOAD:
- raise "Stopping downloads still not implemented."
- elif action == ClipboardMenu.ACTION_DELETE:
- cb_service = ClipboardService.get_instance()
- cb_service.delete_object(self._file_name)
diff --git a/shell/view/ClipboardMenu.py b/shell/view/ClipboardMenu.py
deleted file mode 100644
index 0964fc3..0000000
--- a/shell/view/ClipboardMenu.py
+++ /dev/null
@@ -1,74 +0,0 @@
-import gtk
-import gobject
-import hippo
-
-from sugar.graphics.menu import Menu
-from sugar.graphics.canvasicon import CanvasIcon
-from sugar.graphics.ClipboardBubble import ClipboardBubble
-from sugar.graphics import style
-
-clipboard_bubble = {
- 'fill-color' : 0x646464FF,
- 'stroke-color' : 0x646464FF,
- 'progress-color': 0x333333FF,
- 'spacing' : style.space_unit,
- 'padding' : style.space_unit * 1.5
-}
-
-clipboard_menu_item_title = {
- 'xalign': hippo.ALIGNMENT_START,
- 'padding-left': 5,
- 'color' : 0xFFFFFFFF,
- 'font' : style.get_font_description('Bold', 1.2)
-}
-
-style.register_stylesheet("clipboard.Bubble", clipboard_bubble)
-style.register_stylesheet("clipboard.MenuItem.Title", clipboard_menu_item_title)
-
-class ClipboardMenuItem(ClipboardBubble):
-
- def __init__(self, percent = 0, stylesheet="clipboard.Bubble"):
- ClipboardBubble.__init__(self, percent = percent)
- style.apply_stylesheet(self, stylesheet)
-
-class ClipboardMenu(Menu):
-
- ACTION_DELETE = 0
- ACTION_SHARE = 1
- ACTION_STOP_DOWNLOAD = 2
-
- def __init__(self, file_name, percent):
- Menu.__init__(self, file_name)
-
- self._progress_bar = ClipboardMenuItem(percent)
- self._root.append(self._progress_bar)
-
- #icon = CanvasIcon(icon_name='stock-share-mesh')
- #self.add_action(icon, ClipboardMenu.ACTION_SHARE)
-
- self._remove_icon = None
- self._stop_icon = None
-
- self._create_icons(percent)
-
- def _create_icons(self, percent):
- if percent == 100:
- if not self._remove_icon:
- self._remove_icon = CanvasIcon(icon_name='stock-remove')
- self.add_action(self._remove_icon, ClipboardMenu.ACTION_DELETE)
-
- if self._stop_icon:
- self.remove_action(self._stop_icon)
- self._stop_icon = None
- else:
- if not self._stop_icon:
- self._stop_icon = CanvasIcon(icon_name='stock-close')
- self.add_action(self._stop_icon, ClipboardMenu.ACTION_STOP_DOWNLOAD)
-
- if self._remove_icon:
- self.remove_action(self._remove_icon)
- self._remove_icon = None
-
- def set_percent(self, percent):
- self._progress_bar.set_property('percent', percent)
- self._create_icons(percent)
diff --git a/shell/view/Makefile.am b/shell/view/Makefile.am
index bd90a2d..bf77593 100644
--- a/shell/view/Makefile.am
+++ b/shell/view/Makefile.am
@@ -7,8 +7,6 @@ sugar_PYTHON = \
FirstTimeDialog.py \
BuddyIcon.py \
BuddyMenu.py \
- ClipboardIcon.py \
- ClipboardMenu.py \
OverlayWindow.py \
Shell.py \
dconmanager.py \
diff --git a/shell/view/frame/ClipboardBox.py b/shell/view/frame/ClipboardBox.py
deleted file mode 100644
index 1ca1a8c..0000000
--- a/shell/view/frame/ClipboardBox.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import logging
-import dbus
-import hippo
-
-from sugar.graphics import style
-from view.ClipboardIcon import ClipboardIcon
-from sugar.clipboard import ClipboardService
-
-class ClipboardBox(hippo.CanvasBox):
-
- def __init__(self, frame, menu_shell):
- hippo.CanvasBox.__init__(self)
- self._frame = frame
- self._menu_shell = menu_shell
- self._icons = {}
-
- cb_service = ClipboardService.get_instance()
- cb_service.connect('object-added', self._object_added_cb)
- cb_service.connect('object-deleted', self._object_deleted_cb)
- cb_service.connect('object-state-updated', self._object_state_updated_cb)
-
- def _object_added_cb(self, cb_service, mimeType, fileName):
- icon = ClipboardIcon(self._menu_shell, fileName)
- style.apply_stylesheet(icon, 'frame.BuddyIcon')
- self.append(icon)
- self._icons[fileName] = icon
-
- if not self._frame.is_visible():
- self._frame.show_and_hide(0.1)
-
- logging.debug('ClipboardBox: ' + fileName + ' was added.')
-
- def _object_deleted_cb(self, cb_service, fileName):
- icon = self._icons[fileName]
- self.remove(icon)
- del self._icons[fileName]
- logging.debug('ClipboardBox: ' + fileName + ' was deleted.')
-
- def _object_state_updated_cb(self, cb_service, fileName, percent):
- icon = self._icons[fileName]
- icon.set_percent(percent)
- logging.debug('ClipboardBox: ' + fileName + ' state was updated.')
diff --git a/shell/view/frame/Frame.py b/shell/view/frame/Frame.py
index 4a5f31a..80fb4d1 100644
--- a/shell/view/frame/Frame.py
+++ b/shell/view/frame/Frame.py
@@ -23,7 +23,6 @@ from view.frame.ActivitiesBox import ActivitiesBox
from view.frame.ZoomBox import ZoomBox
from view.frame.overlaybox import OverlayBox
from view.frame.FriendsBox import FriendsBox
-from view.frame.ClipboardBox import ClipboardBox
from view.frame.PanelWindow import PanelWindow
from view.frame.notificationtray import NotificationTray
from sugar.graphics.timeline import Timeline
@@ -199,10 +198,7 @@ class Frame:
root.append(box)
# Left panel
- [menu_shell, root] = self._create_panel(grid, 0, 1, 1, 10)
-
- box = ClipboardBox(self, menu_shell)
- root.append(box)
+ self._create_panel(grid, 0, 1, 1, 10)
def _create_panel(self, grid, x, y, width, height):
panel = PanelWindow()
diff --git a/shell/view/frame/Makefile.am b/shell/view/frame/Makefile.am
index 23e24af..eec6d0f 100644
--- a/shell/view/frame/Makefile.am
+++ b/shell/view/frame/Makefile.am
@@ -2,7 +2,6 @@ sugardir = $(pkgdatadir)/shell/view/frame
sugar_PYTHON = \
__init__.py \
ActivitiesBox.py \
- ClipboardBox.py \
FriendsBox.py \
PanelWindow.py \
Frame.py \
diff --git a/sugar-emulator b/sugar-emulator
index a26f0f2..6635a39 100755
--- a/sugar-emulator
+++ b/sugar-emulator
@@ -40,7 +40,6 @@ if sourcedir:
bin_path = sourcedir
bin_path += ':' + os.path.join(sourcedir, 'shell')
bin_path += ':' + os.path.join(sourcedir, 'services/presence')
- bin_path += ':' + os.path.join(sourcedir, 'services/clipboard')
if os.environ.has_key('PATH'):
old_path = os.environ['PATH']
@@ -55,11 +54,6 @@ if sourcedir:
bin = os.path.join(sourcedir,
'services/presence/sugar-presence-service')
setup.write_service('org.laptop.Presence', bin,
- env.get_activity_info_dir())
-
- bin = os.path.join(sourcedir,
- 'services/clipboard/sugar-clipboard')
- setup.write_service('org.laptop.Clipboard', bin,
env.get_activity_info_dir())
from sugar.emulator import Emulator
diff --git a/sugar/Makefile.am b/sugar/Makefile.am
index 905555a..ae2e2ee 100644
--- a/sugar/Makefile.am
+++ b/sugar/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = activity chat clipboard graphics p2p presence
+SUBDIRS = activity chat graphics p2p presence
sugardir = $(pythondir)/sugar
sugar_PYTHON = \
diff --git a/sugar/clipboard/ClipboardService.py b/sugar/clipboard/ClipboardService.py
deleted file mode 100644
index e189653..0000000
--- a/sugar/clipboard/ClipboardService.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import dbus
-import gobject
-
-DBUS_SERVICE = "org.laptop.Clipboard"
-DBUS_INTERFACE = "org.laptop.Clipboard"
-DBUS_PATH = "/org/laptop/Clipboard"
-
-class ClipboardService(gobject.GObject):
-
- __gsignals__ = {
- 'object-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([str, str])),
- 'object-deleted': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([str])),
- 'object-state-updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
- ([str, int])),
- }
-
- def __init__(self):
- gobject.GObject.__init__(self)
-
- self._dbus_service = None
- bus = dbus.SessionBus()
- bus.add_signal_receiver(self._name_owner_changed_cb,
- signal_name="NameOwnerChanged",
- dbus_interface="org.freedesktop.DBus")
- # Try to register to ClipboardService, if we fail, we'll try later.
- try:
- self._connect_clipboard_signals()
- except dbus.DBusException, exception:
- pass
-
- def _connect_clipboard_signals(self):
- bus = dbus.SessionBus()
- proxy_obj = bus.get_object(DBUS_SERVICE, DBUS_PATH)
- self._dbus_service = dbus.Interface(proxy_obj, DBUS_SERVICE)
- self._dbus_service.connect_to_signal('object_added', self._object_added_cb)
- self._dbus_service.connect_to_signal('object_deleted', self._object_deleted_cb)
- self._dbus_service.connect_to_signal('object_state_updated',
- self._object_state_updated_cb)
-
- def _name_owner_changed_cb(self, name, old, new):
- if name != DBUS_SERVICE:
- return
-
- if (not old and not len(old)) and (new and len(new)):
- # ClipboardService started up
- self._connect_clipboard_signals()
-
- def _object_added_cb(self, mimeType, fileName):
- self.emit('object-added', mimeType, fileName)
-
- def _object_deleted_cb(self, fileName):
- self.emit('object-deleted', fileName)
-
- def _object_state_updated_cb(self, fileName, percent):
- self.emit('object-state-updated', fileName, percent)
-
- def add_object(self, mimeType, fileName):
- self._dbus_service.add_object(mimeType, fileName)
-
- def delete_object(self, fileName):
- self._dbus_service.delete_object(fileName)
-
- def update_object_state(self, fileName, percent):
- self._dbus_service.update_object_state(fileName, percent)
-
-_clipboard_service = None
-def get_instance():
- global _clipboard_service
- if not _clipboard_service:
- _clipboard_service = ClipboardService()
- return _clipboard_service
diff --git a/sugar/clipboard/Makefile.am b/sugar/clipboard/Makefile.am
deleted file mode 100644
index dbfabe9..0000000
--- a/sugar/clipboard/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-sugardir = $(pythondir)/sugar/clipboard
-sugar_PYTHON = \
- __init__.py \
- ClipboardService.py
-
diff --git a/sugar/clipboard/__init__.py b/sugar/clipboard/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/sugar/clipboard/__init__.py
+++ /dev/null
diff --git a/sugar/graphics/ClipboardBubble.py b/sugar/graphics/ClipboardBubble.py
deleted file mode 100644
index 4c1da58..0000000
--- a/sugar/graphics/ClipboardBubble.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# Copyright (C) 2006, Red Hat, Inc.
-#
-# 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., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-#TODO: has to be merged with all the existing bubbles in a generic progress bar widget
-
-import math
-
-import gobject
-import gtk
-import hippo
-
-class ClipboardBubble(hippo.CanvasBox, hippo.CanvasItem):
- __gtype_name__ = 'ClipboardBubble'
-
- __gproperties__ = {
- 'fill-color': (object, None, None,
- gobject.PARAM_READWRITE),
- 'stroke-color': (object, None, None,
- gobject.PARAM_READWRITE),
- 'progress-color': (object, None, None,
- gobject.PARAM_READWRITE),
- 'percent' : (object, None, None,
- gobject.PARAM_READWRITE),
- }
-
- def __init__(self, **kwargs):
- self._stroke_color = 0xFFFFFFFF
- self._fill_color = 0xFFFFFFFF
- self._progress_color = 0x000000FF
- self._percent = 0
- self._radius = 8
-
- hippo.CanvasBox.__init__(self, **kwargs)
-
- def do_set_property(self, pspec, value):
- if pspec.name == 'fill-color':
- self._fill_color = value
- self.emit_paint_needed(0, 0, -1, -1)
- elif pspec.name == 'stroke-color':
- self._stroke_color = value
- self.emit_paint_needed(0, 0, -1, -1)
- elif pspec.name == 'progress-color':
- self._progress_color = value
- self.emit_paint_needed(0, 0, -1, -1)
- elif pspec.name == 'percent':
- self._percent = value
- self.emit_paint_needed(0, 0, -1, -1)
-
- def do_get_property(self, pspec):
- if pspec.name == 'fill-color':
- return self._fill_color
- elif pspec.name == 'stroke-color':
- return self._stroke_color
- elif pspec.name == 'progress-color':
- return self._progress_color
- elif pspec.name == 'percent':
- return self._percent
-
- def _int_to_rgb(self, int_color):
- red = (int_color >> 24) & 0x000000FF
- green = (int_color >> 16) & 0x000000FF
- blue = (int_color >> 8) & 0x000000FF
- alpha = int_color & 0x000000FF
- return (red / 255.0, green / 255.0, blue / 255.0)
-
- def do_paint_below_children(self, cr, damaged_box):
- [width, height] = self.get_allocation()
-
- line_width = 3.0
- x = line_width
- y = line_width
- width -= line_width * 2
- height -= line_width * 2
-
- cr.move_to(x + self._radius, y);
- cr.arc(x + width - self._radius, y + self._radius,
- self._radius, math.pi * 1.5, math.pi * 2);
- cr.arc(x + width - self._radius, x + height - self._radius,
- self._radius, 0, math.pi * 0.5);
- cr.arc(x + self._radius, y + height - self._radius,
- self._radius, math.pi * 0.5, math.pi);
- cr.arc(x + self._radius, y + self._radius, self._radius,
- math.pi, math.pi * 1.5);
-
- color = self._int_to_rgb(self._fill_color)
- cr.set_source_rgb(*color)
- cr.fill_preserve();
-
- color = self._int_to_rgb(self._stroke_color)
- cr.set_source_rgb(*color)
- cr.set_line_width(line_width)
- cr.stroke();
-
- self._paint_progress_bar(cr, x, y, width, height, line_width)
-
- def _paint_progress_bar(self, cr, x, y, width, height, line_width):
- prog_x = x + line_width
- prog_y = y + line_width
- prog_width = (width - (line_width * 2)) * (self._percent / 100.0)
- prog_height = (height - (line_width * 2))
-
- x = prog_x
- y = prog_y
- width = prog_width
- height = prog_height
-
- cr.move_to(x + self._radius, y);
- cr.arc(x + width - self._radius, y + self._radius,
- self._radius, math.pi * 1.5, math.pi * 2);
- cr.arc(x + width - self._radius, x + height - self._radius,
- self._radius, 0, math.pi * 0.5);
- cr.arc(x + self._radius, y + height - self._radius,
- self._radius, math.pi * 0.5, math.pi);
- cr.arc(x + self._radius, y + self._radius, self._radius,
- math.pi, math.pi * 1.5);
-
- color = self._int_to_rgb(self._progress_color)
- cr.set_source_rgb(*color)
- cr.fill_preserve();
diff --git a/sugar/graphics/Makefile.am b/sugar/graphics/Makefile.am
index 9828c8c..83b0920 100644
--- a/sugar/graphics/Makefile.am
+++ b/sugar/graphics/Makefile.am
@@ -4,7 +4,6 @@ sugar_PYTHON = \
bubble.py \
canvasicon.py \
colors.py \
- ClipboardBubble.py \
grid.py \
iconcolor.py \
menu.py \
diff --git a/sugar/graphics/menu.py b/sugar/graphics/menu.py
index 9c031ba..5404cf5 100644
--- a/sugar/graphics/menu.py
+++ b/sugar/graphics/menu.py
@@ -49,7 +49,6 @@ class Menu(gtk.Window):
self._root.append(content_box)
self._action_box = None
- self._action_box_separator = None
def _create_separator(self):
separator = hippo.CanvasBox()
@@ -57,8 +56,8 @@ class Menu(gtk.Window):
return separator
def _create_action_box(self):
- self._action_box_separator = self._create_separator()
- self._root.append(self._action_box_separator)
+ separator = self._create_separator()
+ self._root.append(separator)
self._action_box = hippo.CanvasBox(
orientation=hippo.ORIENTATION_HORIZONTAL)
@@ -72,8 +71,5 @@ class Menu(gtk.Window):
icon.connect('activated', self._action_clicked_cb, action_id)
self._action_box.append(icon)
- def remove_action(self, icon):
- self._action_box.remove(icon)
-
def _action_clicked_cb(self, icon, action):
self.emit('action', action)