Empty changelog
parent
b6dd14b1ba
commit
fe553c035a
|
@ -77,6 +77,8 @@ struct _MooAppPrivate {
|
|||
guint quit_handler_id;
|
||||
gboolean use_editor;
|
||||
gboolean use_terminal;
|
||||
|
||||
char *tmpdir;
|
||||
};
|
||||
|
||||
|
||||
|
@ -738,7 +740,6 @@ void moo_app_hide_python_console (G_GNUC_UNUSED MooApp *app)
|
|||
g_return_if_fail (moo_app_python != NULL);
|
||||
gtk_widget_hide (GTK_WIDGET (moo_app_python->console));
|
||||
}
|
||||
#endif /* !MOO_USE_PYTHON */
|
||||
|
||||
|
||||
static guint strv_length (char **argv)
|
||||
|
@ -754,6 +755,7 @@ static guint strv_length (char **argv)
|
|||
|
||||
return len;
|
||||
}
|
||||
#endif /* !MOO_USE_PYTHON */
|
||||
|
||||
|
||||
MooEditor *moo_app_get_editor (MooApp *app)
|
||||
|
@ -779,36 +781,6 @@ moo_app_init_real (MooApp *app)
|
|||
MooUIXML *ui_xml;
|
||||
GError *error = NULL;
|
||||
|
||||
#if 0
|
||||
if (app->priv->enable_options)
|
||||
{
|
||||
int argc = strv_length (app->priv->argv);
|
||||
|
||||
g_option_context_add_group (app->priv->option_ctx,
|
||||
gtk_get_option_group (TRUE));
|
||||
g_option_context_parse (app->priv->option_ctx, &argc,
|
||||
&app->priv->argv, &error);
|
||||
|
||||
if (error || argc > 1)
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
g_print ("%s\n", error->message);
|
||||
g_error_free (error);
|
||||
error = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_print ("Unknown option %s\n", app->priv->argv[1]);
|
||||
}
|
||||
|
||||
g_print ("Type '%s --help' for usage\n", g_get_prgname ());
|
||||
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __WIN32__
|
||||
app_dir = moo_app_get_application_dir (app);
|
||||
#endif
|
||||
|
@ -950,6 +922,17 @@ start_io (MooApp *app)
|
|||
}
|
||||
|
||||
|
||||
gboolean
|
||||
moo_app_send_msg (MooApp *app,
|
||||
const char *data,
|
||||
int len)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_APP (app), FALSE);
|
||||
g_return_val_if_fail (data != NULL, FALSE);
|
||||
return _moo_app_input_send_msg (app->priv->info->short_name, data, len);
|
||||
}
|
||||
|
||||
|
||||
static gboolean on_gtk_main_quit (MooApp *app)
|
||||
{
|
||||
app->priv->quit_handler_id = 0;
|
||||
|
@ -982,6 +965,9 @@ static gboolean moo_app_try_quit_real (MooApp *app)
|
|||
if (!app->priv->running)
|
||||
return FALSE;
|
||||
|
||||
if (!moo_editor_close_all (app->priv->editor))
|
||||
return TRUE;
|
||||
|
||||
list = g_slist_copy (app->priv->terminals);
|
||||
for (l = list; l != NULL; l = l->next)
|
||||
{
|
||||
|
@ -993,9 +979,6 @@ static gboolean moo_app_try_quit_real (MooApp *app)
|
|||
}
|
||||
g_slist_free (list);
|
||||
|
||||
if (!moo_editor_close_all (app->priv->editor))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -1059,6 +1042,13 @@ static void moo_app_quit_real (MooApp *app)
|
|||
gtk_quit_remove (app->priv->quit_handler_id);
|
||||
|
||||
gtk_main_quit ();
|
||||
|
||||
if (app->priv->tmpdir)
|
||||
{
|
||||
moo_rmdir (app->priv->tmpdir, TRUE);
|
||||
g_free (app->priv->tmpdir);
|
||||
app->priv->tmpdir = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1211,6 +1201,10 @@ static void terminal_destroyed (MooTermWindow *term,
|
|||
app->priv->terminals = g_slist_remove (app->priv->terminals,
|
||||
term);
|
||||
|
||||
if (app->priv->term_window == term)
|
||||
app->priv->term_window = app->priv->terminals ?
|
||||
app->priv->terminals->data : NULL;
|
||||
|
||||
policy = app->priv->window_policy;
|
||||
quit = (policy & MOO_APP_QUIT_ON_CLOSE_ALL_TERMINALS) ||
|
||||
((policy & MOO_APP_QUIT_ON_CLOSE_ALL_WINDOWS) &&
|
||||
|
@ -1230,6 +1224,9 @@ static MooTermWindow *new_terminal (MooApp *app)
|
|||
NULL);
|
||||
app->priv->terminals = g_slist_append (app->priv->terminals, term);
|
||||
|
||||
if (!app->priv->term_window)
|
||||
app->priv->term_window = term;
|
||||
|
||||
g_signal_connect (term, "destroy",
|
||||
G_CALLBACK (terminal_destroyed), app);
|
||||
|
||||
|
@ -1614,3 +1611,54 @@ moo_app_exec_cmd_real (MooApp *app,
|
|||
g_warning ("%s: got unknown command %d", G_STRLOC, cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
char*
|
||||
moo_app_tempnam (MooApp *app)
|
||||
{
|
||||
int i;
|
||||
char *basename;
|
||||
char *filename;
|
||||
|
||||
g_return_val_if_fail (MOO_IS_APP (app), NULL);
|
||||
|
||||
if (!app->priv->tmpdir)
|
||||
{
|
||||
char *dirname = NULL;
|
||||
|
||||
for (i = 0; i < 1000; ++i)
|
||||
{
|
||||
basename = g_strdup_printf ("%08x", g_random_int ());
|
||||
dirname = g_build_filename (g_get_tmp_dir (), basename, NULL);
|
||||
g_free (basename);
|
||||
|
||||
if (moo_mkdir (dirname))
|
||||
{
|
||||
g_free (dirname);
|
||||
dirname = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_return_val_if_fail (dirname != NULL, NULL);
|
||||
app->priv->tmpdir = dirname;
|
||||
}
|
||||
|
||||
for (i = 0; i < 1000; ++i)
|
||||
{
|
||||
basename = g_strdup_printf ("%08x", g_random_int ());
|
||||
filename = g_build_filename (app->priv->tmpdir, basename, NULL);
|
||||
g_free (basename);
|
||||
|
||||
if (g_file_test (filename, G_FILE_TEST_EXISTS))
|
||||
g_free (filename);
|
||||
else
|
||||
return filename;
|
||||
}
|
||||
|
||||
g_warning ("%s: could not generate temp file name", G_STRLOC);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -115,6 +115,12 @@ MooUIXML *moo_app_get_ui_xml (MooApp *app);
|
|||
void moo_app_set_ui_xml (MooApp *app,
|
||||
MooUIXML *xml);
|
||||
|
||||
char *moo_app_tempnam (MooApp *app);
|
||||
|
||||
gboolean moo_app_send_msg (MooApp *app,
|
||||
const char *data,
|
||||
int len);
|
||||
|
||||
void _moo_app_exec_cmd (MooApp *app,
|
||||
char cmd,
|
||||
const char *data,
|
||||
|
|
|
@ -26,10 +26,12 @@
|
|||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/poll.h>
|
||||
#include <signal.h>
|
||||
#endif /* !__WIN32__ */
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "mooapp/mooappinput.h"
|
||||
#include "mooapp/mooapp.h"
|
||||
|
||||
|
@ -241,6 +243,20 @@ gboolean moo_app_input_start (MooAppInput *ch)
|
|||
}
|
||||
|
||||
|
||||
gboolean
|
||||
_moo_app_input_send_msg (const char *pipe_basename,
|
||||
const char *data,
|
||||
int len)
|
||||
{
|
||||
g_return_val_if_fail (pipe_basename != NULL, FALSE);
|
||||
g_return_val_if_fail (data != NULL, FALSE);
|
||||
|
||||
#warning "Implement me"
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean read_input (GIOChannel *source,
|
||||
GIOCondition condition,
|
||||
MooAppInput *self)
|
||||
|
@ -398,13 +414,15 @@ static DWORD WINAPI listener_main (ListenerInfo *info)
|
|||
*/
|
||||
#ifndef __WIN32__
|
||||
|
||||
#define NAME_PREFIX "%s_in."
|
||||
|
||||
/* TODO: could you finally learn non-blocking io? */
|
||||
gboolean moo_app_input_start (MooAppInput *ch)
|
||||
{
|
||||
g_return_val_if_fail (!ch->ready, FALSE);
|
||||
|
||||
ch->pipe_name =
|
||||
g_strdup_printf ("%s/%s_in.%d",
|
||||
g_strdup_printf ("%s/" NAME_PREFIX "%d",
|
||||
g_get_tmp_dir(),
|
||||
ch->pipe_basename,
|
||||
getpid ());
|
||||
|
@ -442,6 +460,99 @@ gboolean moo_app_input_start (MooAppInput *ch)
|
|||
}
|
||||
|
||||
|
||||
gboolean
|
||||
_moo_app_input_send_msg (const char *pipe_basename,
|
||||
const char *data,
|
||||
gssize data_len)
|
||||
{
|
||||
const char *tmpdir_name, *entry;
|
||||
GDir *tmpdir = NULL;
|
||||
char *prefix = NULL;
|
||||
guint prefix_len;
|
||||
gboolean success = FALSE;
|
||||
|
||||
g_return_val_if_fail (pipe_basename != NULL, FALSE);
|
||||
g_return_val_if_fail (data != NULL, FALSE);
|
||||
|
||||
tmpdir_name = g_get_tmp_dir ();
|
||||
tmpdir = g_dir_open (tmpdir_name, 0, NULL);
|
||||
|
||||
if (!tmpdir)
|
||||
return FALSE;
|
||||
|
||||
prefix = g_strdup_printf (NAME_PREFIX, pipe_basename);
|
||||
prefix_len = strlen (prefix);
|
||||
|
||||
while ((entry = g_dir_read_name (tmpdir)))
|
||||
{
|
||||
const char *pid_string;
|
||||
GPid pid;
|
||||
char *filename = NULL;
|
||||
GIOChannel *chan;
|
||||
GIOStatus status;
|
||||
|
||||
if (strncmp (entry, prefix, prefix_len))
|
||||
goto cont;
|
||||
|
||||
pid_string = entry + prefix_len;
|
||||
|
||||
if (!pid_string[0])
|
||||
goto cont;
|
||||
|
||||
errno = 0;
|
||||
pid = strtol (entry + prefix_len, NULL, 10);
|
||||
|
||||
if (errno)
|
||||
goto cont;
|
||||
|
||||
filename = g_build_filename (tmpdir_name, entry, NULL);
|
||||
|
||||
if (kill (pid, 0))
|
||||
{
|
||||
/* XXX unlink should file if it's not our file, but still.. */
|
||||
unlink (filename);
|
||||
goto cont;
|
||||
}
|
||||
|
||||
chan = g_io_channel_new_file (filename, "w", NULL);
|
||||
|
||||
if (!chan)
|
||||
goto cont;
|
||||
|
||||
g_io_channel_set_encoding (chan, NULL, NULL);
|
||||
status = g_io_channel_set_flags (chan, G_IO_FLAG_NONBLOCK, NULL);
|
||||
|
||||
if (status != G_IO_STATUS_NORMAL)
|
||||
{
|
||||
g_io_channel_unref (chan);
|
||||
goto cont;
|
||||
}
|
||||
|
||||
status = g_io_channel_write_chars (chan, data, data_len, NULL, NULL);
|
||||
|
||||
if (status != G_IO_STATUS_NORMAL)
|
||||
{
|
||||
g_io_channel_unref (chan);
|
||||
goto cont;
|
||||
}
|
||||
|
||||
g_free (filename);
|
||||
g_io_channel_unref (chan);
|
||||
success = TRUE;
|
||||
goto out;
|
||||
|
||||
cont:
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
out:
|
||||
if (tmpdir)
|
||||
g_dir_close (tmpdir);
|
||||
g_free (prefix);
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
read_input (G_GNUC_UNUSED GIOChannel *source,
|
||||
GIOCondition condition,
|
||||
|
|
|
@ -36,7 +36,7 @@ typedef enum
|
|||
} MooAppCmdCode;
|
||||
|
||||
|
||||
#ifdef WANT_MOO_APP_CMD_CHARS
|
||||
#if defined(WANT_MOO_APP_CMD_STRINGS) || defined(WANT_MOO_APP_CMD_CHARS)
|
||||
|
||||
#define CMD_ZERO "\0"
|
||||
#define CMD_PYTHON_STRING "s"
|
||||
|
@ -46,6 +46,10 @@ typedef enum
|
|||
#define CMD_DIE "d"
|
||||
#define CMD_PRESENT "r"
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef WANT_MOO_APP_CMD_CHARS
|
||||
|
||||
static const char *moo_app_cmd_chars =
|
||||
CMD_ZERO
|
||||
CMD_PYTHON_STRING
|
||||
|
@ -79,16 +83,20 @@ struct _MooAppInput
|
|||
};
|
||||
|
||||
|
||||
MooAppInput *moo_app_input_new (const char *pipe_basename);
|
||||
MooAppInput *moo_app_input_new (const char *pipe_basename);
|
||||
|
||||
MooAppInput *moo_app_input_ref (MooAppInput *ch);
|
||||
void moo_app_input_unref (MooAppInput *ch);
|
||||
MooAppInput *moo_app_input_ref (MooAppInput *ch);
|
||||
void moo_app_input_unref (MooAppInput *ch);
|
||||
|
||||
gboolean moo_app_input_start (MooAppInput *ch);
|
||||
void moo_app_input_shutdown (MooAppInput *ch);
|
||||
gboolean moo_app_input_ready (MooAppInput *ch);
|
||||
gboolean moo_app_input_start (MooAppInput *ch);
|
||||
void moo_app_input_shutdown (MooAppInput *ch);
|
||||
gboolean moo_app_input_ready (MooAppInput *ch);
|
||||
|
||||
const char *moo_app_input_get_name (MooAppInput *ch);
|
||||
const char *moo_app_input_get_name (MooAppInput *ch);
|
||||
|
||||
gboolean _moo_app_input_send_msg (const char *pipe_basename,
|
||||
const char *data,
|
||||
int len);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -99,6 +99,9 @@ struct _MooEditorPrivate {
|
|||
gboolean open_single;
|
||||
gboolean allow_empty_window;
|
||||
gboolean single_window;
|
||||
|
||||
GType window_type;
|
||||
GType doc_type;
|
||||
};
|
||||
|
||||
|
||||
|
@ -332,8 +335,25 @@ moo_editor_instance (void)
|
|||
}
|
||||
|
||||
|
||||
static void set_single_window (MooEditor *editor,
|
||||
gboolean single)
|
||||
static GType
|
||||
get_window_type (MooEditor *editor)
|
||||
{
|
||||
return editor->priv->window_type ?
|
||||
editor->priv->window_type : MOO_TYPE_EDIT_WINDOW;
|
||||
}
|
||||
|
||||
|
||||
static GType
|
||||
get_doc_type (MooEditor *editor)
|
||||
{
|
||||
return editor->priv->doc_type ?
|
||||
editor->priv->doc_type : MOO_TYPE_EDIT;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_single_window (MooEditor *editor,
|
||||
gboolean single)
|
||||
{
|
||||
/* XXX */
|
||||
editor->priv->single_window = single;
|
||||
|
@ -341,7 +361,8 @@ static void set_single_window (MooEditor *editor,
|
|||
}
|
||||
|
||||
|
||||
static MooEditWindow *get_top_window (MooEditor *editor)
|
||||
static MooEditWindow*
|
||||
get_top_window (MooEditor *editor)
|
||||
{
|
||||
GSList *list = NULL, *l;
|
||||
GtkWindow *window;
|
||||
|
@ -646,9 +667,10 @@ activate_history_item (MooEditor *editor,
|
|||
|
||||
/*****************************************************************************/
|
||||
|
||||
static MooEditWindow *create_window (MooEditor *editor)
|
||||
static MooEditWindow*
|
||||
create_window (MooEditor *editor)
|
||||
{
|
||||
MooEditWindow *window = g_object_new (MOO_TYPE_EDIT_WINDOW,
|
||||
MooEditWindow *window = g_object_new (get_window_type (editor),
|
||||
"editor", editor,
|
||||
"ui-xml",
|
||||
moo_editor_get_ui_xml (editor),
|
||||
|
@ -661,11 +683,12 @@ static MooEditWindow *create_window (MooEditor *editor)
|
|||
}
|
||||
|
||||
|
||||
static void moo_editor_add_doc (MooEditor *editor,
|
||||
MooEditWindow *window,
|
||||
MooEdit *doc,
|
||||
MooEditLoader *loader,
|
||||
MooEditSaver *saver)
|
||||
static void
|
||||
moo_editor_add_doc (MooEditor *editor,
|
||||
MooEditWindow *window,
|
||||
MooEdit *doc,
|
||||
MooEditLoader *loader,
|
||||
MooEditSaver *saver)
|
||||
{
|
||||
WindowInfo *info = window_list_find (editor, window);
|
||||
|
||||
|
@ -690,7 +713,7 @@ MooEditWindow *moo_editor_new_window (MooEditor *editor)
|
|||
|
||||
if (!editor->priv->allow_empty_window)
|
||||
{
|
||||
doc = g_object_new (MOO_TYPE_EDIT, "editor", editor, NULL);
|
||||
doc = g_object_new (get_doc_type (editor), "editor", editor, NULL);
|
||||
_moo_edit_window_insert_doc (window, doc, -1);
|
||||
moo_editor_add_doc (editor, window, doc,
|
||||
moo_edit_loader_get_default (),
|
||||
|
@ -710,7 +733,7 @@ MooEdit *moo_editor_new_doc (MooEditor *editor,
|
|||
g_return_val_if_fail (MOO_IS_EDIT_WINDOW (window), NULL);
|
||||
g_return_val_if_fail (window_list_find (editor, window) != NULL, NULL);
|
||||
|
||||
doc = g_object_new (MOO_TYPE_EDIT, "editor", editor, NULL);
|
||||
doc = g_object_new (get_doc_type (editor), "editor", editor, NULL);
|
||||
_moo_edit_window_insert_doc (window, doc, -1);
|
||||
moo_editor_add_doc (editor, window, doc,
|
||||
moo_edit_loader_get_default (),
|
||||
|
@ -781,7 +804,7 @@ void moo_editor_open (MooEditor *editor,
|
|||
|
||||
if (!doc)
|
||||
{
|
||||
doc = g_object_new (MOO_TYPE_EDIT, "editor", editor, NULL);
|
||||
doc = g_object_new (get_doc_type (editor), "editor", editor, NULL);
|
||||
gtk_object_sink (g_object_ref (doc));
|
||||
new_doc = TRUE;
|
||||
}
|
||||
|
@ -826,22 +849,42 @@ void moo_editor_open (MooEditor *editor,
|
|||
}
|
||||
|
||||
|
||||
MooEdit *moo_editor_get_active_doc (MooEditor *editor)
|
||||
MooEdit*
|
||||
moo_editor_get_active_doc (MooEditor *editor)
|
||||
{
|
||||
MooEditWindow *window = moo_editor_get_active_window (editor);
|
||||
return window ? moo_edit_window_get_active_doc (window) : NULL;
|
||||
}
|
||||
|
||||
|
||||
MooEditWindow *moo_editor_get_active_window (MooEditor *editor)
|
||||
MooEditWindow*
|
||||
moo_editor_get_active_window (MooEditor *editor)
|
||||
{
|
||||
g_return_val_if_fail (MOO_IS_EDITOR (editor), NULL);
|
||||
return get_top_window (editor);
|
||||
}
|
||||
|
||||
|
||||
void moo_editor_set_active_window (MooEditor *editor,
|
||||
MooEditWindow *window)
|
||||
void
|
||||
moo_editor_present (MooEditor *editor)
|
||||
{
|
||||
MooEditWindow *window;
|
||||
|
||||
g_return_if_fail (MOO_IS_EDITOR (editor));
|
||||
|
||||
window = moo_editor_get_active_window (editor);
|
||||
|
||||
if (!window)
|
||||
window = moo_editor_new_window (editor);
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
moo_window_present (GTK_WINDOW (window));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_editor_set_active_window (MooEditor *editor,
|
||||
MooEditWindow *window)
|
||||
{
|
||||
WindowInfo *info;
|
||||
|
||||
|
@ -855,8 +898,9 @@ void moo_editor_set_active_window (MooEditor *editor,
|
|||
}
|
||||
|
||||
|
||||
void moo_editor_set_active_doc (MooEditor *editor,
|
||||
MooEdit *doc)
|
||||
void
|
||||
moo_editor_set_active_doc (MooEditor *editor,
|
||||
MooEdit *doc)
|
||||
{
|
||||
WindowInfo *info;
|
||||
|
||||
|
@ -871,8 +915,9 @@ void moo_editor_set_active_doc (MooEditor *editor,
|
|||
}
|
||||
|
||||
|
||||
gboolean moo_editor_close_window (MooEditor *editor,
|
||||
MooEditWindow *window)
|
||||
gboolean
|
||||
moo_editor_close_window (MooEditor *editor,
|
||||
MooEditWindow *window)
|
||||
{
|
||||
WindowInfo *info;
|
||||
MooEditDialogResponse response;
|
||||
|
@ -951,8 +996,9 @@ gboolean moo_editor_close_window (MooEditor *editor,
|
|||
}
|
||||
|
||||
|
||||
static void do_close_window (MooEditor *editor,
|
||||
MooEditWindow *window)
|
||||
static void
|
||||
do_close_window (MooEditor *editor,
|
||||
MooEditWindow *window)
|
||||
{
|
||||
WindowInfo *info;
|
||||
GSList *l, *list;
|
||||
|
@ -1031,7 +1077,8 @@ moo_editor_close_docs (MooEditor *editor,
|
|||
if (!moo_edit_window_num_docs (info->window) &&
|
||||
!editor->priv->allow_empty_window)
|
||||
{
|
||||
MooEdit *doc = g_object_new (MOO_TYPE_EDIT, "editor", editor, NULL);
|
||||
MooEdit *doc = g_object_new (get_doc_type (editor),
|
||||
"editor", editor, NULL);
|
||||
_moo_edit_window_insert_doc (info->window, doc, -1);
|
||||
moo_editor_add_doc (editor, info->window, doc,
|
||||
moo_edit_loader_get_default (),
|
||||
|
@ -1366,3 +1413,23 @@ moo_editor_get_lang_mgr (MooEditor *editor)
|
|||
g_return_val_if_fail (MOO_IS_EDITOR (editor), NULL);
|
||||
return editor->priv->lang_mgr;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_editor_set_window_type (MooEditor *editor,
|
||||
GType type)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_EDITOR (editor));
|
||||
g_return_if_fail (g_type_is_a (type, MOO_TYPE_EDIT_WINDOW));
|
||||
editor->priv->window_type = type;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
moo_editor_set_edit_type (MooEditor *editor,
|
||||
GType type)
|
||||
{
|
||||
g_return_if_fail (MOO_IS_EDITOR (editor));
|
||||
g_return_if_fail (g_type_is_a (type, MOO_TYPE_EDIT));
|
||||
editor->priv->doc_type = type;
|
||||
}
|
||||
|
|
|
@ -76,6 +76,8 @@ void moo_editor_set_active_window (MooEditor *editor,
|
|||
void moo_editor_set_active_doc (MooEditor *editor,
|
||||
MooEdit *doc);
|
||||
|
||||
void moo_editor_present (MooEditor *editor);
|
||||
|
||||
GSList *moo_editor_list_windows (MooEditor *editor);
|
||||
|
||||
gboolean moo_editor_close_window (MooEditor *editor,
|
||||
|
@ -100,6 +102,11 @@ MooEditor *moo_edit_window_get_editor (MooEditWindow *window);
|
|||
|
||||
MooLangMgr *moo_editor_get_lang_mgr (MooEditor *editor);
|
||||
|
||||
void moo_editor_set_window_type (MooEditor *editor,
|
||||
GType type);
|
||||
void moo_editor_set_edit_type (MooEditor *editor,
|
||||
GType type);
|
||||
|
||||
|
||||
#ifdef MOOEDIT_COMPILATION
|
||||
void _moo_edit_window_insert_doc (MooEditWindow *window,
|
||||
|
|
|
@ -189,6 +189,8 @@ moo_menu_mgr_finalize (GObject *object)
|
|||
|
||||
g_hash_table_destroy (mgr->priv->named_nodes);
|
||||
|
||||
g_free (mgr->priv);
|
||||
|
||||
G_OBJECT_CLASS(moo_menu_mgr_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,12 +19,17 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __WIN32__
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
# include <shellapi.h>
|
||||
#else
|
||||
# include <sys/wait.h>
|
||||
#endif
|
||||
|
||||
#if GLIB_CHECK_VERSION(2,6,0)
|
||||
# include <glib/gstdio.h>
|
||||
#endif
|
||||
|
@ -43,6 +48,85 @@ moo_unlink (const char *filename)
|
|||
}
|
||||
|
||||
|
||||
int
|
||||
moo_mkdir (const char *path)
|
||||
{
|
||||
g_return_val_if_fail (path != NULL, -1);
|
||||
|
||||
#if GLIB_CHECK_VERSION(2,6,0)
|
||||
return g_mkdir (path, S_IRWXU);
|
||||
#else
|
||||
return mkdir (path, S_IRWXU);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifndef __WIN32__
|
||||
static gboolean
|
||||
rm_fr (const char *path)
|
||||
{
|
||||
GError *error = NULL;
|
||||
char **argv;
|
||||
char *child_err;
|
||||
int status;
|
||||
|
||||
argv = g_new0 (char*, 5);
|
||||
argv[0] = g_strdup ("/bin/rm");
|
||||
argv[1] = g_strdup ("-fr");
|
||||
argv[2] = g_strdup ("--");
|
||||
argv[3] = g_strdup (path);
|
||||
|
||||
if (!g_spawn_sync (NULL, argv, NULL, G_SPAWN_STDOUT_TO_DEV_NULL,
|
||||
NULL, NULL, NULL, &child_err, &status, &error))
|
||||
{
|
||||
g_warning ("%s: could not run 'rm' command: %s",
|
||||
G_STRLOC, error->message);
|
||||
g_error_free (error);
|
||||
g_strfreev (argv);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_strfreev (argv);
|
||||
|
||||
if (!WIFEXITED (status) || WEXITSTATUS (status))
|
||||
{
|
||||
g_warning ("%s: 'rm' command failed: %s",
|
||||
G_STRLOC, child_err ? child_err : "");
|
||||
g_free (child_err);
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_free (child_err);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
#endif /* __WIN32__ */
|
||||
|
||||
|
||||
gboolean
|
||||
moo_rmdir (const char *path,
|
||||
gboolean recursive)
|
||||
{
|
||||
g_return_val_if_fail (path != NULL, -1);
|
||||
|
||||
if (!recursive)
|
||||
{
|
||||
#if GLIB_CHECK_VERSION(2,6,0)
|
||||
return g_rmdir (path) == 0;
|
||||
#else
|
||||
return rmdir (path) == 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef __WIN32__
|
||||
return rm_fr (path);
|
||||
#else
|
||||
#error "Implement me"
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* XXX fix this */
|
||||
gboolean
|
||||
moo_save_file_utf8 (const char *name,
|
||||
|
|
|
@ -24,6 +24,9 @@ gboolean moo_save_file_utf8 (const char *name,
|
|||
gssize len,
|
||||
GError **error);
|
||||
int moo_unlink (const char *filename);
|
||||
int moo_mkdir (const char *path);
|
||||
gboolean moo_rmdir (const char *path,
|
||||
gboolean recursive);
|
||||
|
||||
gboolean moo_open_url (const char *url);
|
||||
gboolean moo_open_email (const char *address,
|
||||
|
|
Loading…
Reference in New Issue