/*
* ion/ioncore/ioncore.c
*
- * Copyright (c) Tuomo Valkonen 1999-2007.
+ * Copyright (c) Tuomo Valkonen 1999-2008.
*
- * Ion 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.
+ * See the included file LICENSE for details.
*/
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
+#include <strings.h>
#include <errno.h>
#include <sys/types.h>
#include <ctype.h>
#ifndef CF_NO_LOCALE
#include <locale.h>
#include <langinfo.h>
+#endif
+#ifndef CF_NO_GETTEXT
#include <libintl.h>
#endif
#include "group-cw.h"
#include "group-ws.h"
#include "llist.h"
+#include "exec.h"
+#include "screen-notify.h"
+#include "key.h"
+
#include "../version.h"
#include "exports.h"
static const char *progname="ion";
static const char ioncore_copy[]=
- "Ion " ION_VERSION ", copyright (c) Tuomo Valkonen 1999-2007.";
+ "Ion " ION_VERSION ", copyright (c) Tuomo Valkonen 1999-2008.";
static const char ioncore_license[]=DUMMY_TR(
- "This program is free software; you can redistribute it and/or\n"
- "modify it under the terms of the GNU Lesser General Public\n"
- "License as published by the Free Software Foundation; either\n"
- "version 2.1 of the License, or (at your option) any later version.\n"
+ "This software is licensed under the GNU Lesser General Public License\n"
+ "(LGPL), version 2.1, extended with terms applying to the use of the name\n"
+ "of the project, Ion(tm), unless otherwise indicated in components taken\n"
+ "from elsewhere. For details, see the file LICENSE that you should have\n"
+ "received with this software.\n"
"\n"
"This program is distributed in the hope that it will be useful,\n"
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- "Lesser General Public License for more details.\n");
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
static const char *ioncore_about=NULL;
void ioncore_warn_nolog(const char *str)
{
- fprintf(stderr, "%s: %s\n", prog_execname(), str);
+ fprintf(stderr, "%s: %s\n", libtu_progname(), str);
}
return FALSE;
}
+#endif
+
+#ifndef CF_NO_GETTEXT
+
#define TEXTDOMAIN "ion3"
static bool init_messages(const char *localedir)
#define INIT_HOOK_(NM) \
NM=mainloop_register_hook(#NM, create_hook()); \
- if(NM==NULL) return FALSE;
+ if(NM==NULL) return FALSE
-#define INIT_HOOK(NM, DFLT) \
- INIT_HOOK_(NM) \
- if(!hook_add(NM, (void (*)())DFLT)) return FALSE;
+#define ADD_HOOK_(NM, FN) \
+ if(!hook_add(NM, (void (*)())FN)) return FALSE
+#define INIT_HOOK(NM, DFLT) INIT_HOOK_(NM); ADD_HOOK_(NM, DFLT)
static bool init_hooks()
{
INIT_HOOK_(clientwin_mapped_hook);
INIT_HOOK_(clientwin_unmapped_hook);
INIT_HOOK_(clientwin_property_change_hook);
+ INIT_HOOK_(ioncore_submap_ungrab_hook);
+
+ INIT_HOOK_(region_notify_hook);
+ ADD_HOOK_(region_notify_hook, ioncore_screen_activity_notify);
- INIT_HOOK(region_notify_hook, ioncore_frame_quasiactivation_notify);
INIT_HOOK(clientwin_do_manage_alt, clientwin_do_manage_default);
INIT_HOOK(ioncore_handle_event_alt, ioncore_handle_event);
INIT_HOOK(region_do_warp_alt, region_do_warp_default);
-
+ INIT_HOOK(ioncore_exec_environ_hook, ioncore_setup_environ);
+
mainloop_sigchld_hook=mainloop_register_hook("ioncore_sigchld_hook",
create_hook());
mainloop_sigusr2_hook=mainloop_register_hook("ioncore_sigusr2_hook",
ioncore_g.screens=NULL;
ioncore_g.focus_next=NULL;
ioncore_g.warp_next=FALSE;
+ ioncore_g.focus_next_source=IONCORE_FOCUSNEXT_OTHER;
ioncore_g.focus_current=NULL;
ioncore_g.opaque_resize=0;
ioncore_g.warp_enabled=TRUE;
ioncore_g.switchto_new=TRUE;
+ ioncore_g.no_mousefocus=FALSE;
+ ioncore_g.unsqueeze_enabled=TRUE;
+ ioncore_g.autoraise=TRUE;
ioncore_g.enc_utf8=FALSE;
ioncore_g.enc_sb=TRUE;
INITSTR(pseudoinactivated);
INITSTR(tag);
INITSTR(deinit);
+ INITSTR(map);
+ INITSTR(unmap);
return TRUE;
}
#ifndef CF_NO_LOCALE
init_locale();
+#endif
+#ifndef CF_NO_GETTEXT
init_messages(localedir);
#endif
ioncore_g.atom_wm_window_role=XInternAtom(dpy, "WM_WINDOW_ROLE", False);
ioncore_g.atom_checkcode=XInternAtom(dpy, "_ION_CWIN_RESTART_CHECKCODE", False);
ioncore_g.atom_selection=XInternAtom(dpy, "_ION_SELECTION_STRING", False);
+ ioncore_g.atom_dockapp_hack=XInternAtom(dpy, "_ION_DOCKAPP_HACK", False);
ioncore_g.atom_mwm_hints=XInternAtom(dpy, "_MOTIF_WM_HINTS", False);
ioncore_init_xim();