Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2008-08-31 19:33:55 (GMT)
committer Simon Schampijer <simon@schampijer.de>2008-08-31 19:33:55 (GMT)
commit783ec6734cd16f541ba28f39bc0fe27c4dcb6d58 (patch)
tree55b9b8735c1aac89fb52493c963f9ed741627e39 /src
parente7a10be1d4acf8cae4f71d9e92bc4e929eb6a943 (diff)
parent6e503b0a24e7fca0ddb0c2d04470af2d54cbe8b0 (diff)
Merge branch 'master' of ssh+git://dev.laptop.org/git/sugar-toolkit
Diffstat (limited to 'src')
-rw-r--r--src/sugar/_sugarext.defs2
-rw-r--r--src/sugar/_sugarext.override2
-rw-r--r--src/sugar/activity/activity.py4
-rw-r--r--src/sugar/bundle/activitybundle.py11
-rw-r--r--src/sugar/sugar-preview.c24
-rw-r--r--src/sugar/sugar-preview.h2
6 files changed, 34 insertions, 11 deletions
diff --git a/src/sugar/_sugarext.defs b/src/sugar/_sugarext.defs
index 87d629f..72ff7af 100644
--- a/src/sugar/_sugarext.defs
+++ b/src/sugar/_sugarext.defs
@@ -200,7 +200,7 @@
(c-name "sugar_preview_take_screenshot")
(return-type "none")
(parameters
- '("GdkDrawable" "drawable")
+ '("GtkWidget" "widget")
)
)
diff --git a/src/sugar/_sugarext.override b/src/sugar/_sugarext.override
index b993600..a68564a 100644
--- a/src/sugar/_sugarext.override
+++ b/src/sugar/_sugarext.override
@@ -22,11 +22,11 @@ headers
modulename sugar._sugarext
%%
import gobject.GObject as PyGObject_Type
+import gtk.Widget as PyGtkWidget_Type
import gtk.Entry as PyGtkEntry_Type
import gtk.Menu as PyGtkMenu_Type
import gtk.Container as PyGtkContainer_Type
import gtk.gdk.Window as PyGdkWindow_Type
-import gtk.gdk.Drawable as PyGdkDrawable_Type
import gtk.Image as PyGtkImage_Type
%%
ignore-glob
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
index f74bb55..73eeea7 100644
--- a/src/sugar/activity/activity.py
+++ b/src/sugar/activity/activity.py
@@ -754,8 +754,8 @@ class Activity(Window, gtk.Container):
return {}
def take_screenshot(self):
- if self.canvas and self.canvas.window:
- self._preview.take_screenshot(self.canvas.window)
+ if self.canvas:
+ self._preview.take_screenshot(self.canvas)
def save(self):
"""Request that the activity is saved to the Journal.
diff --git a/src/sugar/bundle/activitybundle.py b/src/sugar/bundle/activitybundle.py
index be997cc..7097794 100644
--- a/src/sugar/bundle/activitybundle.py
+++ b/src/sugar/bundle/activitybundle.py
@@ -396,11 +396,12 @@ class ActivityBundle(Bundle):
if mime_types is not None:
installed_icons_dir = os.path.join(xdg_data_home,
'icons/sugar/scalable/mimetypes')
- for f in os.listdir(installed_icons_dir):
- path = os.path.join(installed_icons_dir, f)
- if os.path.islink(path) and \
- os.readlink(path).startswith(install_path):
- os.remove(path)
+ if os.path.isdir(installed_icons_dir):
+ for f in os.listdir(installed_icons_dir):
+ path = os.path.join(installed_icons_dir, f)
+ if os.path.islink(path) and \
+ os.readlink(path).startswith(install_path):
+ os.remove(path)
self._uninstall(install_path)
diff --git a/src/sugar/sugar-preview.c b/src/sugar/sugar-preview.c
index 42fb9d3..44b83e4 100644
--- a/src/sugar/sugar-preview.c
+++ b/src/sugar/sugar-preview.c
@@ -69,16 +69,38 @@ sugar_preview_clear(SugarPreview *preview)
}
}
+static gboolean
+widget_is_off_screen(GtkWidget *widget)
+{
+ GdkScreen *screen;
+ gint x, y, width, height;
+
+ screen = gtk_widget_get_screen(widget);
+
+ gdk_window_get_geometry(widget->window, &x, &y, &width, &height, NULL);
+
+ return (x < 0 || y < 0 ||
+ x + width > gdk_screen_get_width(screen) ||
+ y + height > gdk_screen_get_height(screen));
+}
+
void
-sugar_preview_take_screenshot(SugarPreview *preview, GdkDrawable *drawable)
+sugar_preview_take_screenshot(SugarPreview *preview, GtkWidget *widget)
{
+ GdkDrawable *drawable;
GdkScreen *screen;
GdkVisual *visual;
GdkColormap *colormap;
gint width, height;
+ if (widget->window == NULL || widget_is_off_screen(widget)) {
+ return;
+ }
+
sugar_preview_clear(preview);
+ drawable = GDK_DRAWABLE(widget->window);
+
gdk_drawable_get_size(drawable, &width, &height);
screen = gdk_drawable_get_screen(drawable);
diff --git a/src/sugar/sugar-preview.h b/src/sugar/sugar-preview.h
index 6029cc1..70ea156 100644
--- a/src/sugar/sugar-preview.h
+++ b/src/sugar/sugar-preview.h
@@ -50,7 +50,7 @@ struct _SugarPreviewClass {
GType sugar_preview_get_type (void);
void sugar_preview_take_screenshot (SugarPreview *preview,
- GdkDrawable *drawable);
+ GtkWidget *widget);
void sugar_preview_set_size (SugarPreview *preview,
int width,
int height);