X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=ioncore%2Fioncore.c;h=0675d0a83c6b8bcfdfd5daa58443ecc972eadd12;hp=62f616b985135b5ccbc94fc2483fccf70cfd7ba6;hb=e3aec18706513a87eaa7839dfdaf7e0fcd0d8d2a;hpb=803afbc1cd633f6c025bcd9537e9b7e9aedadd0d diff --git a/ioncore/ioncore.c b/ioncore/ioncore.c index 62f616b..0675d0a 100644 --- a/ioncore/ioncore.c +++ b/ioncore/ioncore.c @@ -1,12 +1,9 @@ /* * ion/ioncore/ioncore.c * - * Copyright (c) Tuomo Valkonen 1999-2007. + * Copyright (c) Tuomo Valkonen 1999-2009. * - * 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 @@ -14,14 +11,18 @@ #include #include #include +#include #include #include #include #ifndef CF_NO_LOCALE #include #include +#endif +#ifndef CF_NO_GETTEXT #include #endif +#include #include #include @@ -56,6 +57,10 @@ #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" @@ -69,18 +74,18 @@ WGlobal ioncore_g; 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-2009."; 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; @@ -95,12 +100,23 @@ WHook *ioncore_deinit_hook=NULL; /*{{{ warn_nolog */ -void ioncore_warn_nolog(const char *str) +void ioncore_warn_nolog(const char *str, ...) { - fprintf(stderr, "%s: %s\n", prog_execname(), str); + va_list args; + + va_start(args, str); + + if(ioncore_g.opmode==IONCORE_OPMODE_INIT){ + fprintf(stderr, "%s: ", libtu_progname()); + vfprintf(stderr, str, args); + fprintf(stderr, "\n"); + }else{ + warn_v(str, args); + } + + va_end(args); } - /*}}}*/ @@ -179,7 +195,7 @@ static bool check_encoding() } if(mbtowc(NULL, NULL, 0)!=0){ - warn("Statefull encodings are unsupported."); + warn(TR("Statefull encodings are unsupported.")); return FALSE; } @@ -189,11 +205,11 @@ static bool check_encoding() return TRUE; integr_err: - warn("Cannot verify locale encoding setting integrity " - "(LC_CTYPE=%s, nl_langinfo(CODESET)=%s). " - "The LC_CTYPE environment variable should be of the form " - "language_REGION.encoding (e.g. en_GB.UTF-8), and encoding " - "should match the nl_langinfo value above.", ctype, langi); + warn(TR("Cannot verify locale encoding setting integrity " + "(LC_CTYPE=%s, nl_langinfo(CODESET)=%s). " + "The LC_CTYPE environment variable should be of the form " + "language_REGION.encoding (e.g. en_GB.UTF-8), and encoding " + "should match the nl_langinfo value above."), ctype, langi); return FALSE; } @@ -227,6 +243,10 @@ static bool init_locale() return FALSE; } +#endif + +#ifndef CF_NO_GETTEXT + #define TEXTDOMAIN "ion3" static bool init_messages(const char *localedir) @@ -253,12 +273,12 @@ 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() { @@ -270,12 +290,16 @@ 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", @@ -321,6 +345,7 @@ static bool init_global() 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; @@ -330,6 +355,9 @@ static bool init_global() 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; @@ -354,6 +382,8 @@ static bool init_global() INITSTR(pseudoinactivated); INITSTR(tag); INITSTR(deinit); + INITSTR(map); + INITSTR(unmap); return TRUE; } @@ -371,6 +401,8 @@ bool ioncore_init(const char *prog, int argc, char *argv[], #ifndef CF_NO_LOCALE init_locale(); +#endif +#ifndef CF_NO_GETTEXT init_messages(localedir); #endif @@ -491,6 +523,7 @@ static bool ioncore_init_x(const char *display, int stflags) 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();