diff --git a/moo/mooedit/Makefile.incl b/moo/mooedit/Makefile.incl index a09d16cf..e2f22903 100644 --- a/moo/mooedit/Makefile.incl +++ b/moo/mooedit/Makefile.incl @@ -49,12 +49,11 @@ mooedit_noinst_headers = \ $(mooedit)/mootextbtree.h \ $(mooedit)/mootextview-private.h -mooedit_unix_sources = $(mooedit)/moocmdview.c - mooedit_sources = \ $(mooedit_include_headers) \ $(mooedit_noinst_headers) \ $(mooedit)/gtksourceiter.c \ + $(mooedit)/moocmdview.c \ $(mooedit)/mooedit.c \ $(mooedit)/mooeditconfig.c \ $(mooedit)/mooeditdialogs.c \ @@ -125,4 +124,3 @@ $(mooedit)/mooeditsavemultiple-glade.h: $(mooedit_srcdir)/glade/mooeditsavemult. moo_sources += $(mooedit_sources) moo_built_sources += $(mooedit_built_sources) -moo_unix_sources += $(mooedit_unix_sources) diff --git a/moo/mooedit/moocmdview.c b/moo/mooedit/moocmdview.c index 42b59c07..13bf08bf 100644 --- a/moo/mooedit/moocmdview.c +++ b/moo/mooedit/moocmdview.c @@ -15,8 +15,11 @@ #include "mooedit/moocmdview.h" #include "mooutils/moomarshals.h" #include "mooutils/moocmd.h" + +#ifndef __WIN32__ #include #include +#endif /* !__WIN32__ */ struct _MooCmdViewPrivate { @@ -303,6 +306,7 @@ out: } +#ifndef __WIN32__ static gboolean moo_cmd_view_cmd_exit (MooCmdView *view, int status) @@ -376,6 +380,29 @@ moo_cmd_view_cmd_exit (MooCmdView *view, return FALSE; } +#else /* __WIN32__ */ +static gboolean +moo_cmd_view_cmd_exit (MooCmdView *view, + int status) +{ + if (!status) + { + moo_line_view_write_line (MOO_LINE_VIEW (view), + "*** Done ***", -1, + view->priv->message_tag); + } + else + { + char *msg = g_strdup_printf ("*** Exited with status %d ***", status); + moo_line_view_write_line (MOO_LINE_VIEW (view), + msg, -1, + view->priv->error_tag); + g_free (msg); + } + + return FALSE; +} +#endif /* __WIN32__ */ static gboolean diff --git a/moo/mooutils/Makefile.incl b/moo/mooutils/Makefile.incl index f092e948..0781b4fd 100644 --- a/moo/mooutils/Makefile.incl +++ b/moo/mooutils/Makefile.incl @@ -49,6 +49,7 @@ mooutils_sources = \ $(mooutils)/mooactiongroup.c \ $(mooutils)/moobigpaned.c \ $(mooutils)/mooclosure.c \ + $(mooutils)/moocmd.c \ $(mooutils)/moocombo.c \ $(mooutils)/moocompat.c \ $(mooutils)/moocompat.h \ @@ -88,9 +89,6 @@ mooutils_sources = \ $(mooutils)/stock-select-all-24.h \ $(mooutils)/stock-terminal-24.h -mooutils_unix_sources = \ - $(mooutils)/moocmd.c - nodist_mooutils_sources = \ $(mooutils)/moomarshals.c \ $(mooutils)/moomarshals.h diff --git a/moo/mooutils/moocmd.c b/moo/mooutils/moocmd.c index 249fafae..ce980478 100644 --- a/moo/mooutils/moocmd.c +++ b/moo/mooutils/moocmd.c @@ -14,8 +14,14 @@ #include "mooutils/moocmd.h" #include "mooutils/moomarshals.h" + +#ifndef __WIN32__ #include #include +#else +#define WIN32_LEAN_AND_MEAN +#include +#endif struct _MooCmdPrivate { @@ -433,6 +439,7 @@ stderr_watch_removed (MooCmd *cmd) } +#ifndef __WIN32__ static void real_child_setup (gpointer user_data) { @@ -446,6 +453,7 @@ real_child_setup (gpointer user_data) if (data->child_setup) data->child_setup (data->user_data); } +#endif static gboolean @@ -485,7 +493,11 @@ moo_cmd_run_command (MooCmd *cmd, result = g_spawn_async_with_pipes (working_dir, argv, envp, flags | G_SPAWN_DO_NOT_REAP_CHILD, +#ifndef __WIN32__ real_child_setup, &data, +#else + NULL, NULL, +#endif &cmd->priv->pid, NULL, outp, errp, error); @@ -575,7 +587,11 @@ moo_cmd_cleanup (MooCmd *cmd) if (cmd->priv->pid) { +#ifndef __WIN32__ kill (-cmd->priv->pid, SIGHUP); +#else + TerminateProcess (cmd->priv->pid, 1); +#endif g_spawn_close_pid (cmd->priv->pid); cmd->priv->pid = 0; } @@ -599,7 +615,11 @@ moo_cmd_abort_real (MooCmd *cmd) g_return_val_if_fail (cmd->priv->pid != 0, TRUE); +#ifndef __WIN32__ kill (-cmd->priv->pid, SIGHUP); +#else + TerminateProcess (cmd->priv->pid, 1); +#endif if (cmd->priv->stdout_watch) { diff --git a/moo/mooutils/moofileview/moofile.c b/moo/mooutils/moofileview/moofile.c index aa3f46b5..84702b28 100644 --- a/moo/mooutils/moofileview/moofile.c +++ b/moo/mooutils/moofileview/moofile.c @@ -1899,6 +1899,7 @@ render_icon_for_path (const char *path, GtkIconSize size) { MooIconType icon = MOO_ICON_BLANK; +#ifndef __WIN32__ const char *mime_type = xdg_mime_type_unknown; if (path) @@ -1910,6 +1911,9 @@ render_icon_for_path (const char *path, icon = MOO_ICON_MIME; } } +#else + const char *mime_type = "application/octet-stream"; +#endif return _render_icon (icon, mime_type, 0, widget, size); } @@ -2161,6 +2165,7 @@ static GdkPixbuf *_create_icon_for_mime_type (GtkIconTheme *icon_theme, if (pixbuf) return pixbuf; +#ifndef __WIN32__ parent_types = xdg_mime_list_mime_parents (mime_type); if (parent_types && parent_types[0]) @@ -2172,6 +2177,7 @@ static GdkPixbuf *_create_icon_for_mime_type (GtkIconTheme *icon_theme, if (pixbuf) return pixbuf; +#endif g_message ("%s: could not find icon for mime type '%s'", G_STRLOC, mime_type); diff --git a/moo/mooutils/mooutils-misc.c b/moo/mooutils/mooutils-misc.c index 87327ca5..53248150 100644 --- a/moo/mooutils/mooutils-misc.c +++ b/moo/mooutils/mooutils-misc.c @@ -105,11 +105,43 @@ rm_fr (const char *path) #endif /* __WIN32__ */ +#ifdef __WIN32__ +static gboolean +remove_dir_win32 (const char *path) +{ + gboolean success; + guint pathlen; + char *freeme; + + /* better fail than crash */ + SHFILEOPSTRUCTA fileop = { + NULL, /* HWND hwnd; */ + FO_DELETE, /* UINT wFunc; */ + NULL, /* LPCTSTR pFrom; */ + NULL, /* LPCTSTR pTo; */ + FOF_SILENT, /* FILEOP_FLAGS fFlags; */ + FALSE, /* BOOL fAnyOperationsAborted; */ + NULL, /* LPVOID hNameMappings; */ + NULL /* LPCTSTR lpszProgressTitle; */ + }; + + pathlen = strlen (path); + freeme = g_new0 (char, pathlen + 2); + memcpy (freeme, path, pathlen); + fileop.pFrom = freeme; + + success = SHFileOperationA (&fileop) == 0; + + g_free (freeme); + return success; +} +#endif + gboolean moo_rmdir (const char *path, gboolean recursive) { - g_return_val_if_fail (path != NULL, -1); + g_return_val_if_fail (path != NULL, FALSE); if (!recursive) { @@ -123,9 +155,7 @@ moo_rmdir (const char *path, #ifndef __WIN32__ return rm_fr (path); #else -/* XXX */ -#warning "Implement me" - return FALSE; + return remove_dir_win32 (path); #endif }