medit/moo/mooutils/moofilewatch.h

95 lines
2.6 KiB
C
Raw Normal View History

2006-05-21 18:11:05 -05:00
/*
2005-08-25 09:29:01 +00:00
* moofilewatch.h
*
2016-01-17 00:04:49 -08:00
* Copyright (C) 2004-2016 by Yevgen Muntyan <emuntyan@users.sourceforge.net>
2005-08-25 09:29:01 +00:00
*
* This file is part of medit. medit is free software; you can
* redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License,
* or (at your option) any later version.
2005-08-25 09:29:01 +00:00
*
* You should have received a copy of the GNU Lesser General Public
* License along with medit. If not, see <http://www.gnu.org/licenses/>.
2005-08-25 09:29:01 +00:00
*/
2009-07-04 00:32:57 -07:00
/* Files and directory monitor. Uses stat().
2005-08-25 09:29:01 +00:00
On win32 does FindFirstChangeNotification and ReadDirectoryChangesW. */
2016-01-01 22:25:53 -08:00
#pragma once
2005-08-25 09:29:01 +00:00
2016-01-17 00:04:49 -08:00
#ifndef __cplusplus
#error "This is a C++ header"
#endif // __cplusplus
2005-08-25 09:29:01 +00:00
#include <glib-object.h>
2016-01-31 00:03:05 -08:00
#include <moocpp/moocpp.h>
2016-01-17 00:04:49 -08:00
#include <memory>
2005-08-25 09:29:01 +00:00
2016-01-02 07:09:54 -08:00
enum MooFileEventCode {
MOO_FILE_EVENT_CHANGED,
MOO_FILE_EVENT_CREATED,
MOO_FILE_EVENT_DELETED,
MOO_FILE_EVENT_ERROR
2016-01-02 07:09:54 -08:00
};
2016-01-02 07:09:54 -08:00
struct MooFileEvent {
MooFileEventCode code;
guint monitor_id;
char *filename;
GError *error;
2005-08-25 09:29:01 +00:00
};
2016-01-02 07:09:54 -08:00
class MooFileWatch;
2005-08-25 09:29:01 +00:00
2016-01-02 07:09:54 -08:00
typedef void (*MooFileWatchCallback) (MooFileWatch& watch,
MooFileEvent* event,
gpointer user_data);
2005-08-25 09:29:01 +00:00
2016-01-17 00:04:49 -08:00
using MooFileWatchPtr = moo::gref_ptr<MooFileWatch>;
2005-08-25 09:29:01 +00:00
2016-01-02 07:09:54 -08:00
class MooFileWatch
{
public:
2016-01-17 00:04:49 -08:00
~MooFileWatch();
2005-08-25 09:29:01 +00:00
2016-01-17 00:04:49 -08:00
static MooFileWatchPtr create (GError **error);
2016-01-02 13:51:52 -08:00
bool close (GError **error);
2005-08-25 09:29:01 +00:00
2016-01-02 13:51:52 -08:00
guint create_monitor (const char *filename,
MooFileWatchCallback callback,
gpointer data,
GDestroyNotify notify,
GError **error);
2005-08-25 09:29:01 +00:00
2016-01-02 13:51:52 -08:00
void cancel_monitor (guint monitor_id);
2005-08-25 09:29:01 +00:00
2016-01-02 07:09:54 -08:00
struct Impl;
2016-01-02 13:51:52 -08:00
Impl& impl () { return *m_impl; }
2005-08-25 09:29:01 +00:00
2016-01-02 13:51:52 -08:00
void ref ();
void unref ();
2015-12-30 00:12:49 -08:00
2016-01-02 07:09:54 -08:00
MooFileWatch(const MooFileWatch&) = delete;
MooFileWatch& operator=(const MooFileWatch&) = delete;
2016-01-01 22:25:53 -08:00
2016-01-02 07:09:54 -08:00
private:
2016-01-17 00:04:49 -08:00
MooFileWatch();
2015-12-30 00:12:49 -08:00
2016-01-17 00:04:49 -08:00
int m_ref;
2016-01-02 07:09:54 -08:00
std::unique_ptr<Impl> m_impl;
2015-12-30 00:12:49 -08:00
};
2016-01-17 00:04:49 -08:00
namespace moo {
template<>
class obj_ref_unref<MooFileWatch>
{
public:
static void ref(MooFileWatch* w) { w->ref(); }
static void unref(MooFileWatch* w) { w->unref(); }
};
} // namespace moo