Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jun 2009 17:16:00 GMT
From:      Jonathan Anderson <jona@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 164187 for review
Message-ID:  <200906121716.n5CHG0ps005974@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=164187

Change 164187 by jona@jona-trustedbsd-kent on 2009/06/12 17:15:39

	KDE powerboxes - 'test' requests powerboxes from kpowerboxserver using D-Bus IPC

Affected files ...

.. //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/CMakeLists.txt#3 edit
.. //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/cleanup.sh#1 add
.. //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/kpowerboxserver.cpp#2 edit
.. //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/kpowerboxserver.h#2 edit
.. //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/powerbox.h#2 edit
.. //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/test.cpp#1 add

Differences ...

==== //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/CMakeLists.txt#3 (text+ko) ====

@@ -1,16 +1,23 @@
 cmake_minimum_required(VERSION 2.6)
 
-project(kpowerboxtest)
+project(kpowerboxserver)
 
 find_package(KDE4 REQUIRED)
 find_package(Qt4 REQUIRED)
 
 include(${QT_USE_FILE})
 
-set(test_SRC kpowerboxtest.cpp kpowerboxserver.cpp)
+set(server_SRC main.cpp kpowerboxserver.cpp)
+set(server_MOC_HDRS kpowerboxserver.h)
+#qt4_wrap_cpp(server_MOC_SRC ${server_MOC_HDRS})
+#KDE4_AUTOMOC(${server_SRC})
+
+
+set(test_SRC test.cpp)
 
-qt4_automoc(${source})
+kde4_add_executable(test ${test_SRC})
+target_link_libraries(test ${QT_LIBRARIES} ${KDE4_KDEUI_LIBS})
 
-kde4_add_executable(kpowerboxtest ${test_SRC})
-target_link_libraries(kpowerboxtest ${QT_LIBRARIES} ${KDE4_KDEUI_LIBS} ${KDE4_KFILE_LIBS})
+kde4_add_executable(kpowerboxserver ${server_SRC})# ${server_MOC_SRC})
+target_link_libraries(kpowerboxserver ${QT_LIBRARIES} ${KDE4_KDEUI_LIBS} ${KDE4_KFILE_LIBS})
 

==== //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/kpowerboxserver.cpp#2 (text+ko) ====

@@ -4,12 +4,8 @@
 
 #include <iostream>
 
-#include <fcntl.h>
-#include <unistd.h>
-
 #include "powerbox.h"
-#include "kpowerboxserver.moc"
-
+#include "kpowerboxserver.h"
 
 
 KPowerBoxServer::KPowerBoxServer()
@@ -18,19 +14,11 @@
 }
 
 
-QMap<int,QString> KPowerBoxServer::showKDEPowerbox(struct capbox_options *options)
+QStringList
+KPowerBoxServer::showKDEPowerbox(int operation, QString title, QString parent,
+                QString startDir, QString filter, bool allowMultipleSelections)
 {
-	QMap<int,QString> fileDescriptors;
-
-	if(options->ui != CAPBOX_KDE)
-	{
-		fileDescriptors[-1] =
-			"Error: this is a KDE powerbox; we can only handle UI type CAPBOX_KDE";
-
-		return fileDescriptors;
-	}
-
-	if(options->mult)
+	if(allowMultipleSelections)
 	{
 		// TODO: get KDE to support WId for multi-select dialogs
 		std::cerr
@@ -38,56 +26,45 @@
 			<< " dialogs, so we can't support multiple selection (for now)"
 			<< std::endl;
 
-		options->mult = false;
+		allowMultipleSelections = false;
 	}
 
 
-	QString startDir = options->start_path;
-	QString filter = options->filter;
-	WId parent = options->parent_window;
-	QString title = options->window_title;
+	int base = 10;
+	if(parent.startsWith("0x"))
+	{
+		parent.replace("0x", "");
+		base = 16;
+	}
 
+	WId parentWId = parent.toLong(NULL, base);
 	QStringList filenames;
 
-	switch(options->operation)
+	switch(operation)
 	{
 		case OPEN_FILE:
-			if(options->mult)
+			if(allowMultipleSelections)
+				// TODO: multiple selection via WId
 				filenames =
 					KFileDialog::getOpenFileNames(startDir, filter, NULL, title);
 			else
 				filenames <<
-					KFileDialog::getOpenFileNameWId(startDir, filter, parent, title);
+					KFileDialog::getOpenFileNameWId(startDir, filter, parentWId, title);
 
 			break;
 
 		case SAVE_FILE:
 			filenames <<
-				KFileDialog::getSaveFileNameWId(startDir, filter, parent, title);
+				KFileDialog::getSaveFileNameWId(startDir, filter, parentWId, title);
 			break;
 
 		case SELECT_DIR:
+			// TODO: directory selection via WId
 			filenames <<
 				KFileDialog::getExistingDirectory(startDir, NULL, title);
 			break;
 	}
-	
 
-	for(int i = 0; i < filenames.size(); i++)
-	{
-		QString filename = filenames.at(i);
-
-		int flags = 0;
-		if((options->rights & 6) == 6) flags |= O_RDWR;
-		else if((options->rights & 6) == 4) flags |= O_RDONLY;
-		else if((options->rights & 6) == 2) flags |= O_WRONLY;
-
-//		if(options->rights & 1) flags |= O_EXEC;       TODO: no O_EXEC under Linux?
-
-		int fd = open(filename.toStdString().c_str(), flags);
-		fileDescriptors[fd] = filename;
-	}
-
-	return fileDescriptors;
+	return filenames;
 }
 

==== //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/kpowerboxserver.h#2 (text+ko) ====

@@ -1,7 +1,13 @@
-#include <QtCore/QMap>
+
+#ifndef KPOWERBOX_SERVER
+#define KPOWERBOX_SERVER
+
+#include <QtCore/QList>
 #include <QtCore/QObject>
 #include <QtCore/QString>
 
+#include <QtGui/QtGui>
+
 #include "powerbox.h"
 
 
@@ -12,6 +18,7 @@
 {
 	Q_OBJECT
 
+
 	public:
 	KPowerBoxServer();
 
@@ -20,8 +27,26 @@
 	/**
 	 * Shows a KDE-based PowerBox.
 	 *
-	 * @return  a map of file descriptors and their associated file names
+	 * This is a very long list of parameters, but we have to use Qt-friendly types
+	 * in order for Qt to do the D-Bus marshalling and unmarshalling for us.
+	 *
+	 * @param   operation      what we're doing (see powerbox.h)
+	 * @param   title          the title of the dialog box
+	 * @param   parent         ID of the parent window (to pop up in front of)
+	 * @param   startDir       where to look for files
+	 * @param   filter         selection filter (e.g. "*.cpp")
+	 * @param   allowMultipleSelections   allow multiple selection
+	 *
+	 * @return  a list of file names
 	 */
-	QMap<int,QString> showKDEPowerbox(struct capbox_options *options);
+	Q_SCRIPTABLE QStringList showKDEPowerbox(
+		int operation,
+		QString title,
+		QString parent,
+		QString startDir,
+		QString filter,
+		bool allowMultipleSelections = false);
 };
 
+#endif
+

==== //depot/projects/trustedbsd/capabilities/cap-support/kpowerboxserver/powerbox.h#2 (text+ko) ====




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906121716.n5CHG0ps005974>