From 0fa16f7bd2528f059c2a6178fd2f92e9b50d1275 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Mon, 9 Jul 2007 01:18:04 +0000 Subject: [PATCH] * src/DbManager.py: Add support for Thunar, which stores the DND information in a different area (and probably a more correct area) than Nautilus. 2007-07-08 Don Allingham svn: r8709 --- ChangeLog | 5 +++++ src/DbManager.py | 48 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index be8e8eb3c..e22383daf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-07-08 Don Allingham + * src/DbManager.py: Add support for Thunar, which stores the DND + information in a different area (and probably a more correct area) than + Nautilus. + 2007-07-08 Don Allingham * src/DbManager.py: handle drag-n-drop files in DbManager. Dragging an XML or GEDCOM file into the DbManager will create a new database and import diff --git a/src/DbManager.py b/src/DbManager.py index e4c1475cc..44e500d33 100644 --- a/src/DbManager.py +++ b/src/DbManager.py @@ -33,7 +33,6 @@ __revision__ = "$Revision: 8197 $" #------------------------------------------------------------------------- import os import time -import Mime import subprocess from gettext import gettext as _ @@ -70,6 +69,11 @@ import QuestionDialog import GrampsDb import GrampsDbUtils import Config +import Mime + +IMPORT_TYPES = (const.app_gramps_xml, const.app_gedcom, + const.app_gramps_package, const.app_geneweb, + const.app_gramps) #------------------------------------------------------------------------- # @@ -151,11 +155,10 @@ class DbManager: self.top.drag_dest_set( gtk.DEST_DEFAULT_ALL, - (('application/x-gramps-xml', 0, 1), - ('application/x-gedcom', 0, 2), - ('text/plain', 0, 3)), + (('text/plain', 0, 1), + ('text/uri-list', 0, 2)), ACTION_COPY) - self.top.connect('drag_data_received', self.drag_data_received) + self.top.connect('drag_data_received', self.__drag_data_received) def __button_press(self, obj, event): """ @@ -642,16 +645,44 @@ class DbManager: start_editing=True) return new_path - def drag_data_received(self, widget, context, x, y, selection, info, time): - drag_value = selection.get_text().strip() + def __drag_data_received(self, widget, context, xpos, ypos, selection, + info, rtime): + """ + Handle the reception of drag data + """ + + # The selection object contains the appropriate information. + # Unfortunately, not all file managers work the same. Nautilus + # stores the file name as the text item in selection, while + # thunar holds it in uris. + + # Check for Thunar + uris = selection.get_uris() + if uris: # Thunar + drag_value = uris[0] + elif selection.get_text(): # Nautilus + drag_value = selection.get_text().strip() + else: + return True + + # we are only interested in this if it is a file:// URL. if drag_value[0:7] == "file://": + + # deterimine the mime type. If it is one that we are interested in, + # we process it filetype = Mime.get_type(drag_value) - if filetype in (const.app_gramps_xml, const.app_gedcom): + if filetype in IMPORT_TYPES: + + # get the name of the database from the filename of the file (name, ext) = os.path.splitext(os.path.basename(drag_value)) + + # create the database new_path = self.__create_new_db(name) trans = Config.TRANSACTIONS dbtype = 'x-directory/normal' + # get the import function using the filetype, but create a db + # based on the DBDir self.__start_cursor(_("Importing data...")) dbase = GrampsDb.gramps_db_factory(dbtype)(trans) dbase.load(new_path, None) @@ -659,6 +690,7 @@ class DbManager: rdr = GrampsDbUtils.gramps_db_reader_factory(filetype) rdr(dbase, drag_value[7:], None) + # finish up self.__end_cursor() dbase.close()