Take screenshot and save it to the journal (<alt>1).

This commit is contained in:
Tomeu Vizoso 2007-06-04 18:35:05 +01:00
parent 283a3f4c97
commit a9600516fb
3 changed files with 39 additions and 2 deletions

View File

@ -14,15 +14,22 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
from gettext import gettext as _
from sets import Set
import logging
import tempfile
import os
import time
import gobject
import gtk
import wnck
from sugar.activity.activityhandle import ActivityHandle
from sugar.graphics.popupcontext import PopupContext
from sugar.activity import activityfactory
from sugar.datastore import datastore
from sugar import profile
import sugar
from view.ActivityHost import ActivityHost
@ -196,3 +203,27 @@ class Shell(gobject.GObject):
if not is_visible:
self._frame.do_slide_in()
act.chat_show(is_visible)
def take_screenshot(self):
file_path = os.path.join(tempfile.gettempdir(), '%i' % time.time())
window = gtk.gdk.get_default_root_window()
width, height = window.get_size();
x_orig, y_orig = window.get_origin();
screenshot = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, has_alpha=False,
bits_per_sample=8, width=width, height=height)
screenshot.get_from_drawable(window, window.get_colormap(), x_orig, y_orig, 0, 0,
width, height);
screenshot.save(file_path, "png")
jobject = datastore.create()
jobject.metadata['title'] = _('Screenshot')
jobject.metadata['keep'] = '0'
jobject.metadata['buddies'] = ''
jobject.metadata['preview'] = ''
jobject.metadata['icon-color'] = profile.get_color().to_string()
jobject.metadata['mime-type'] = 'image/png'
jobject.file_path = file_path
datastore.write(jobject)

View File

@ -25,6 +25,7 @@ _actions_table = {
'F10' : 'volume_2',
'F11' : 'volume_3',
'F12' : 'volume_4',
'<alt>1' : 'screenshot',
'<alt>F8' : 'color_mode',
'<alt>F5' : 'b_and_w_mode',
'<alt>equal' : 'console',
@ -114,6 +115,9 @@ class KeyHandler(object):
def handle_color_mode(self):
self._set_display_mode(hardwaremanager.COLOR_MODE)
def handle_screenshot(self):
self._shell.take_screenshot()
def handle_b_and_w_mode(self):
self._set_display_mode(hardwaremanager.B_AND_W_MODE)

View File

@ -20,9 +20,11 @@ activity must do to participate in the Sugar desktop.
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
from gettext import gettext as _
import logging
import os
import time
import tempfile
import gtk, gobject
@ -208,7 +210,7 @@ class Activity(Window, gtk.Container):
elif create_jobject:
logging.debug('Creating a jobject.')
self._jobject = datastore.create()
self._jobject.metadata['title'] = '%s %s' % (get_bundle_name(), 'Activity')
self._jobject.metadata['title'] = _('%s Activity') % get_bundle_name()
self._jobject.metadata['activity'] = self.get_service_name()
self._jobject.metadata['keep'] = '0'
self._jobject.metadata['buddies'] = ''
@ -275,7 +277,7 @@ class Activity(Window, gtk.Container):
def save(self):
"""Request that the activity is saved to the Journal."""
try:
file_path = os.path.join('/tmp', '%i' % time.time())
file_path = os.path.join(tempfile.gettempdir(), '%i' % time.time())
self.write_file(file_path)
self._jobject.file_path = file_path
except NotImplementedError: