X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Ficonbar.c;h=7a6e39d1ac477d9da041872a5892a931e79d52a6;hp=a9d121a027a642e7b82550ddc42d475ea57afd3f;hb=fc08ae6465b6da1d9008ce4b20b3cc2c2a5781af;hpb=3384f5c80b3e661f24bba34447b3b2126bfa8c8d diff --git a/webcit/iconbar.c b/webcit/iconbar.c index a9d121a02..7a6e39d1a 100644 --- a/webcit/iconbar.c +++ b/webcit/iconbar.c @@ -1,7 +1,21 @@ /* - * $Id$ - * * Displays and customizes the iconbar. + * + * Copyright (c) 1996-2011 by the citadel.org team + * + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "webcit.h" @@ -119,7 +133,7 @@ void LoadIconSettings(StrBuf *iconbar, long lvalue) { WCC->IBSettingsVec = (long*) malloc (nIBV * sizeof(long)); } - /** + /* * The initialized values of these variables also happen to * specify the default values for users who haven't customized * their iconbars. These should probably be set in a master @@ -199,12 +213,20 @@ void commit_iconbar(void) { } +/* + * Display the icon bar as long as we have an active session, + * and either the user is logged in or the server allows guest mode. + */ void tmplput_iconbar(StrBuf *Target, WCTemplputParams *TP) { wcsession *WCC = WC; - if ((WCC != NULL) && (WCC->logged_in)) { - DoTemplate(HKEY("iconbar"), NULL, &NoCtx); + if ( (WCC != NULL) + && ( (WCC->logged_in) + || (WCC->serv_info->serv_supports_guest) + ) + ) { + DoTemplate(HKEY("iconbar"), NULL, &NoCtx); } } @@ -236,6 +258,58 @@ ServerStartModule_ICONBAR } } + +int ConditionalWholistExpanded(StrBuf *Target, WCTemplputParams *TP) +{ + int r = 0; + if (WC) r = WC->ib_wholist_expanded; + syslog(LOG_DEBUG, "ConditionalWholistExpanded() returns %d", r); + return(r); +} + + +int ConditionalRoomlistExpanded(StrBuf *Target, WCTemplputParams *TP) +{ + if (WC) return(WC->ib_roomlist_expanded); + return(0); +} + + + +/* + * Toggle the roomlist expanded state in session memory + */ +void toggle_roomlist_expanded_state(void) { + wcsession *WCC = WC; + + if (!WCC) { + wc_printf("no session"); + return; + } + + WCC->ib_roomlist_expanded = IBSTR("wstate"); + wc_printf("%d", WCC->ib_roomlist_expanded); + syslog(LOG_DEBUG, "ib_roomlist_expanded set to %d", WCC->ib_roomlist_expanded); +} + + +/* + * Toggle the wholist expanded state in session memory + */ +void toggle_wholist_expanded_state(void) { + wcsession *WCC = WC; + + if (!WCC) { + wc_printf("no session"); + return; + } + + WCC->ib_wholist_expanded = IBSTR("wstate"); + wc_printf("%d", WCC->ib_wholist_expanded); + syslog(LOG_DEBUG, "ib_wholist_expanded set to %d", WCC->ib_wholist_expanded); +} + + void InitModule_ICONBAR (void) @@ -244,8 +318,12 @@ InitModule_ICONBAR /*WebcitAddUrlHandler(HKEY("user_iconbar"), "", 0, doUserIconStylesheet, 0); */ WebcitAddUrlHandler(HKEY("commit_iconbar"), "", 0, commit_iconbar, 0); + WebcitAddUrlHandler(HKEY("toggle_wholist_expanded_state"), "", 0, toggle_wholist_expanded_state, AJAX); + WebcitAddUrlHandler(HKEY("toggle_roomlist_expanded_state"), "", 0, toggle_roomlist_expanded_state, AJAX); RegisterConditional(HKEY("COND:ICONBAR:ACTIVE"), 3, ConditionalIsActiveStylesheet, CTX_NONE); RegisterNamespace("ICONBAR", 0, 0, tmplput_iconbar, NULL, CTX_NONE); + RegisterConditional(HKEY("COND:ICONBAR:WHOLISTEXPANDED"), 0, ConditionalWholistExpanded, CTX_NONE); + RegisterConditional(HKEY("COND:ICONBAR:ROOMLISTEXPANDED"), 0, ConditionalRoomlistExpanded, CTX_NONE); RegisterPreference("iconbar", _("Iconbar Setting"), PRF_STRING, LoadIconSettings); l = 1; @@ -267,3 +345,4 @@ SessionDestroyModule_ICONBAR if (sess->IBSettingsVec != NULL) free(sess->IBSettingsVec); } +