-rw-r--r-- | examples/opiecore/onotifydemo/onotifydemo.cpp | 50 | ||||
-rw-r--r-- | examples/opiecore/onotifydemo/onotifydemo.h | 3 | ||||
-rw-r--r-- | libopie2/opiecore/ofilenotify.cpp | 31 | ||||
-rw-r--r-- | libopie2/opiecore/ofilenotify.h | 10 |
4 files changed, 77 insertions, 17 deletions
diff --git a/examples/opiecore/onotifydemo/onotifydemo.cpp b/examples/opiecore/onotifydemo/onotifydemo.cpp index 0e84d80..2beda2a 100644 --- a/examples/opiecore/onotifydemo/onotifydemo.cpp +++ b/examples/opiecore/onotifydemo/onotifydemo.cpp | |||
@@ -11,6 +11,7 @@ using namespace Opie::Ui; | |||
11 | 11 | ||
12 | /* QT */ | 12 | /* QT */ |
13 | #include <qcheckbox.h> | 13 | #include <qcheckbox.h> |
14 | #include <qfileinfo.h> | ||
14 | #include <qvbox.h> | 15 | #include <qvbox.h> |
15 | #include <qhbox.h> | 16 | #include <qhbox.h> |
16 | #include <qhbuttongroup.h> | 17 | #include <qhbuttongroup.h> |
@@ -89,15 +90,47 @@ DemoApp::DemoApp( int argc, char** argv ) : OApplication( argc, argv, "libopie2 | |||
89 | QString filename = OFileDialog::getOpenFileName( OFileSelector::ExtendedAll ); | 90 | QString filename = OFileDialog::getOpenFileName( OFileSelector::ExtendedAll ); |
90 | if ( !filename.isEmpty() ) | 91 | if ( !filename.isEmpty() ) |
91 | { | 92 | { |
93 | bool success = true; | ||
92 | odebug << "Filename = " << filename << oendl; | 94 | odebug << "Filename = " << filename << oendl; |
93 | 95 | ||
94 | int fntype = m; | 96 | int fntype = m; |
95 | QString modifier = QString().sprintf( " = 0x%08x", fntype ); | 97 | QString modifier = QString().sprintf( " = 0x%08x", fntype ); |
96 | new OListViewItem( l, filename, multi ? "MULTI" : "SINGLE", modifier ); | 98 | |
97 | if ( !multi ) | 99 | if ( QFileInfo( filename ).isFile() ) |
98 | OFileNotification::singleShot( filename, this, SLOT( trigger() ), (OFileNotificationType) fntype ); | 100 | { |
101 | if ( !multi ) | ||
102 | { | ||
103 | success = OFileNotification::singleShot( filename, this, SLOT( unnamedTrigger() ), (OFileNotificationType) fntype ); | ||
104 | } | ||
105 | else | ||
106 | { | ||
107 | OFileNotification* fn = new OFileNotification(); | ||
108 | success = fn->watch( filename, false, (OFileNotificationType) fntype ); | ||
109 | connect( fn, SIGNAL( triggered( const QString& ) ), this, SLOT( namedTrigger( const QString& ) ) ); | ||
110 | } | ||
111 | } | ||
112 | else if ( QFileInfo( filename ).isDir() ) | ||
113 | { | ||
114 | ODirNotification* dn = new ODirNotification(); | ||
115 | success = dn->watch( filename, !multi, (OFileNotificationType) fntype ); | ||
116 | connect( dn, SIGNAL( triggered( const QString& ) ), this, SLOT( namedTrigger( const QString& ) ) ); | ||
117 | } | ||
118 | else | ||
119 | { | ||
120 | odebug << "Huh!? Neither file nor directory..." << oendl; | ||
121 | return; | ||
122 | } | ||
123 | |||
124 | /* if ( !success ) | ||
125 | { | ||
126 | QMessageBox::warning( 0, "Add Trigger", "<p>Couldn't add trigger :(</p>", "&Sorry", 0 ); | ||
127 | return; | ||
128 | } | ||
99 | else | 129 | else |
100 | odebug << "not yet implemented..." << oendl; | 130 | */ { |
131 | new OListViewItem( l, filename, multi ? "MULTI" : "SINGLE", modifier ); | ||
132 | } | ||
133 | return; | ||
101 | } | 134 | } |
102 | else | 135 | else |
103 | { | 136 | { |
@@ -124,9 +157,14 @@ DemoApp::DemoApp( int argc, char** argv ) : OApplication( argc, argv, "libopie2 | |||
124 | } | 157 | } |
125 | } | 158 | } |
126 | 159 | ||
127 | void DemoApp::trigger() | 160 | void DemoApp::unnamedTrigger() |
161 | { | ||
162 | owarn << "DemoApp::singleShotStrigger() : F I R E !!!!!" << oendl; | ||
163 | } | ||
164 | |||
165 | void DemoApp::namedTrigger( const QString& path ) | ||
128 | { | 166 | { |
129 | owarn << "FIRE!" << oendl; | 167 | owarn << "DemoApp::named trigger = " << path << " : F I R E !!!!!" << oendl; |
130 | } | 168 | } |
131 | 169 | ||
132 | int main( int argc, char** argv ) | 170 | int main( int argc, char** argv ) |
diff --git a/examples/opiecore/onotifydemo/onotifydemo.h b/examples/opiecore/onotifydemo/onotifydemo.h index c4e3456..f6ac5ea 100644 --- a/examples/opiecore/onotifydemo/onotifydemo.h +++ b/examples/opiecore/onotifydemo/onotifydemo.h | |||
@@ -19,7 +19,8 @@ public slots: | |||
19 | void addSingle(); | 19 | void addSingle(); |
20 | void addMulti(); | 20 | void addMulti(); |
21 | void delTrigger(); | 21 | void delTrigger(); |
22 | void trigger(); | 22 | void unnamedTrigger(); |
23 | void namedTrigger( const QString& name ); | ||
23 | 24 | ||
24 | private: | 25 | private: |
25 | Opie::Ui::OListView* l; | 26 | Opie::Ui::OListView* l; |
diff --git a/libopie2/opiecore/ofilenotify.cpp b/libopie2/opiecore/ofilenotify.cpp index efd041a..11d4f87 100644 --- a/libopie2/opiecore/ofilenotify.cpp +++ b/libopie2/opiecore/ofilenotify.cpp | |||
@@ -93,17 +93,17 @@ int OFileNotification::watch( const QString& path, bool sshot, OFileNotification | |||
93 | return -1; | 93 | return -1; |
94 | } | 94 | } |
95 | 95 | ||
96 | if ( notification_list.isEmpty() ) | ||
97 | { | ||
98 | OFileNotification::registerEventHandler(); | ||
99 | } | ||
100 | |||
101 | return startWatching( path, sshot, type ); | 96 | return startWatching( path, sshot, type ); |
102 | } | 97 | } |
103 | 98 | ||
104 | 99 | ||
105 | int OFileNotification::startWatching( const QString& path, bool sshot, OFileNotificationType type ) | 100 | int OFileNotification::startWatching( const QString& path, bool sshot, OFileNotificationType type ) |
106 | { | 101 | { |
102 | if ( notification_list.isEmpty() ) | ||
103 | { | ||
104 | OFileNotification::registerEventHandler(); | ||
105 | } | ||
106 | |||
107 | struct inotify_watch_request iwr; | 107 | struct inotify_watch_request iwr; |
108 | ::memset( &iwr, 0, sizeof iwr ); | 108 | ::memset( &iwr, 0, sizeof iwr ); |
109 | iwr.name = const_cast<char*>( (const char*) path ); | 109 | iwr.name = const_cast<char*>( (const char*) path ); |
@@ -255,9 +255,24 @@ ODirNotification::~ODirNotification() | |||
255 | int ODirNotification::watch( const QString& path, bool sshot, OFileNotificationType type, int recurse ) | 255 | int ODirNotification::watch( const QString& path, bool sshot, OFileNotificationType type, int recurse ) |
256 | { | 256 | { |
257 | qDebug( "ODirNotification::watch( %s, %d, 0x%08x, %d )", (const char*) path, sshot, type, recurse ); | 257 | qDebug( "ODirNotification::watch( %s, %d, 0x%08x, %d )", (const char*) path, sshot, type, recurse ); |
258 | return 0; | ||
259 | } | ||
260 | 258 | ||
259 | if ( recurse == 0 ) | ||
260 | { | ||
261 | OFileNotification* fn = new OFileNotification( this, "ODirNotification delegate" ); | ||
262 | int result = fn->startWatching( path, sshot, type ); | ||
263 | if ( result != -1 ) | ||
264 | { | ||
265 | connect( fn, SIGNAL( triggered( const QString& ) ), this, SIGNAL( triggered( const QString& ) ) ); | ||
266 | return result; | ||
267 | } | ||
268 | } | ||
269 | else | ||
270 | { | ||
271 | qDebug( "ODirNotification::watch(), recursion not yet implemented... :)" ); | ||
272 | return -1; | ||
273 | } | ||
261 | } | 274 | } |
262 | 275 | ||
263 | } \ No newline at end of file | 276 | } // namespace Ui |
277 | |||
278 | } // namespace Opie | ||
diff --git a/libopie2/opiecore/ofilenotify.h b/libopie2/opiecore/ofilenotify.h index 41ba84d..3eb917e 100644 --- a/libopie2/opiecore/ofilenotify.h +++ b/libopie2/opiecore/ofilenotify.h | |||
@@ -129,13 +129,13 @@ class OFileNotification : public QObject | |||
129 | * int main( int argc, char **argv ) | 129 | * int main( int argc, char **argv ) |
130 | * { | 130 | * { |
131 | * OApplication a( argc, argv, "File Notification Example" ); | 131 | * OApplication a( argc, argv, "File Notification Example" ); |
132 | * OFileNotification::singleShot( "/tmp/quit", &a, SLOT(quit()), Create ); | 132 | * OFileNotification::singleShot( "/tmp/quit", &a, SLOT(quit()), Access ); |
133 | * ... // create and show your widgets | 133 | * ... // create and show your widgets |
134 | * return a.exec(); | 134 | * return a.exec(); |
135 | * } | 135 | * } |
136 | * </pre> | 136 | * </pre> |
137 | * | 137 | * |
138 | * This sample program automatically terminates when the file "/tmp/quit" has been created. | 138 | * This sample program automatically terminates when the file "/tmp/quit" has been accessed. |
139 | * | 139 | * |
140 | * | 140 | * |
141 | * The @a receiver is the receiving object and the @a member is the slot. | 141 | * The @a receiver is the receiving object and the @a member is the slot. |
@@ -222,6 +222,12 @@ class ODirNotification : public QObject | |||
222 | * Set @a sshot to True if you want to be notified only once. | 222 | * Set @a sshot to True if you want to be notified only once. |
223 | **/ | 223 | **/ |
224 | int watch( const QString& path, bool sshot = false, OFileNotificationType type = Modify, int recurse = 0 ); | 224 | int watch( const QString& path, bool sshot = false, OFileNotificationType type = Modify, int recurse = 0 ); |
225 | |||
226 | signals: | ||
227 | /** | ||
228 | * This signal is emitted if an event happens of the specified type happens to the directory being watched. | ||
229 | **/ | ||
230 | void triggered( const QString& name ); | ||
225 | }; | 231 | }; |
226 | 232 | ||
227 | 233 | ||