diff --git a/Makefile b/Makefile index ebb8aa8..bb9a3fd 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,9 @@ dist: $(LN) -s -- . $(PACKAGE)-$(VERSION) @$(TAR) $(PACKAGE)-$(VERSION).tar.gz -- \ $(PACKAGE)-$(VERSION)/data/Makefile \ + $(PACKAGE)-$(VERSION)/data/Panel.pc.in \ $(PACKAGE)-$(VERSION)/data/panel-settings.desktop \ + $(PACKAGE)-$(VERSION)/data/pkgconfig.sh \ $(PACKAGE)-$(VERSION)/data/project.conf \ $(PACKAGE)-$(VERSION)/data/16x16/Makefile \ $(PACKAGE)-$(VERSION)/data/16x16/panel-applet-bluetooth.png \ diff --git a/data/Makefile b/data/Makefile index 810cab6..77d6da0 100644 --- a/data/Makefile +++ b/data/Makefile @@ -1,29 +1,42 @@ SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable -PREFIX = /usr/local -DESTDIR = MKDIR ?= mkdir -p INSTALL ?= install RM ?= rm -f +TARGETS = Panel.pc +PREFIX = /usr/local +DESTDIR = +RM ?= rm -f +LN ?= ln -f +MKDIR ?= mkdir -p +INSTALL ?= install -all: subdirs +all: subdirs $(TARGETS) subdirs: @for i in $(SUBDIRS); do (cd $$i && $(MAKE)) || exit; done +Panel.pc: Panel.pc.in ../config.sh + ./pkgconfig.sh -P "$(PREFIX)" -- "Panel.pc" + clean: @for i in $(SUBDIRS); do (cd $$i && $(MAKE) clean) || exit; done + $(RM) -- $(Panel.pc_OBJS) distclean: @for i in $(SUBDIRS); do (cd $$i && $(MAKE) distclean) || exit; done + $(RM) -- $(Panel.pc_OBJS) + $(RM) -- $(TARGETS) -install: +install: $(TARGETS) @for i in $(SUBDIRS); do (cd $$i && $(MAKE) install) || exit; done + ./pkgconfig.sh -P "$(DESTDIR)$(PREFIX)" -i -- "Panel.pc" $(MKDIR) $(DESTDIR)$(PREFIX)/share/applications $(INSTALL) -m 0644 -- panel-settings.desktop $(DESTDIR)$(PREFIX)/share/applications/panel-settings.desktop uninstall: @for i in $(SUBDIRS); do (cd $$i && $(MAKE) uninstall) || exit; done + ./pkgconfig.sh -P "$(DESTDIR)$(PREFIX)" -u -- "Panel.pc" $(RM) -- $(DESTDIR)$(PREFIX)/share/applications/panel-settings.desktop .PHONY: all subdirs clean distclean install uninstall diff --git a/data/Panel.pc.in b/data/Panel.pc.in new file mode 100644 index 0000000..78c5b50 --- /dev/null +++ b/data/Panel.pc.in @@ -0,0 +1,10 @@ +prefix=PREFIX +includedir=${prefix}/include +exec_prefix=${prefix} +libdir=${exec_prefix}/lib + +Name: Panel +Description: DeforaOS Desktop Panel plug-ins +Version: VERSION +Requires: gtk+-2.0 +Cflags: -I${includedir} diff --git a/data/pkgconfig.sh b/data/pkgconfig.sh new file mode 100755 index 0000000..28210bf --- /dev/null +++ b/data/pkgconfig.sh @@ -0,0 +1,109 @@ +#!/bin/sh +#$Id$ +#Copyright (c) 2011 Pierre Pronchery +#All rights reserved. +# +#Redistribution and use in source and binary forms, with or without +#modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +#AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +#IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +#FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +#DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +#SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +#CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +#OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +#OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#variables +PREFIX="/usr/local" +. "../config.sh" +DEBUG="_debug" +DEVNULL="/dev/null" +INSTALL="install -m 0644" +MKDIR="mkdir -p" +RM="rm -f" +SED="sed" + + +#functions +#debug +_debug() +{ + echo $@ + $@ +} + + +#usage +_usage() +{ + echo "Usage: pkgconfig.sh [-i|-u][-P prefix] target" 1>&2 + return 1 +} + + +#main +install=0 +uninstall=0 +while getopts iuP: name; do + case $name in + i) + uninstall=0 + install=1 + ;; + u) + install=0 + uninstall=1 + ;; + P) + PREFIX="$2" + ;; + ?) + _usage + exit $? + ;; + esac +done +shift $(($OPTIND - 1)) +if [ $# -eq 0 ]; then + _usage + exit $? +fi + +PKGCONFIG="$PREFIX/lib/pkgconfig" +while [ $# -gt 0 ]; do + target="$1" + shift + + #uninstall + if [ "$uninstall" -eq 1 ]; then + $DEBUG $RM -- "$PKGCONFIG/$target" || exit 2 + continue + fi + + #install + if [ "$install" -eq 1 ]; then + $DEBUG $MKDIR -- "$PKGCONFIG" || exit 2 + $DEBUG $INSTALL "$target" "$PKGCONFIG/$target" || exit 2 + continue + fi + + #create + $SED -e "s,PREFIX,$PREFIX," -e "s,VERSION,$VERSION," "$target.in" \ + > "$target" + if [ $? -ne 0 ]; then + $RM -- "$target" 2> "$DEVNULL" + exit 2 + fi +done diff --git a/data/project.conf b/data/project.conf index 5ecf70b..4464ef6 100644 --- a/data/project.conf +++ b/data/project.conf @@ -1,5 +1,12 @@ subdirs=16x16,22x22,24x24,32x32,48x48,scalable -dist=Makefile,panel-settings.desktop +targets=Panel.pc +dist=Makefile,Panel.pc.in,panel-settings.desktop,pkgconfig.sh + +[Panel.pc] +type=script +script=./pkgconfig.sh +depends=Panel.pc.in,../config.sh +install= [panel-settings.desktop] install=$(PREFIX)/share/applications diff --git a/include/Panel.h b/include/Panel.h index 1f582e8..53c699f 100644 --- a/include/Panel.h +++ b/include/Panel.h @@ -60,4 +60,20 @@ struct _PanelApplet void * priv; }; +typedef enum _PanelMessage +{ + PANEL_MESSAGE_SHOW = 0 +} PanelMessage; + +typedef enum _PanelMessageShow +{ + PANEL_MESSAGE_SHOW_PANEL_BOTTOM = 0x1, + PANEL_MESSAGE_SHOW_PANEL_TOP = 0x2, + PANEL_MESSAGE_SHOW_SETTINGS = 0x4 +} PanelMessageShow; + + +/* constants */ +# define PANEL_CLIENT_MESSAGE "DEFORAOS_DESKTOP_PANEL_CLIENT" + #endif /* !DESKTOP_PANEL_H */ diff --git a/src/Makefile b/src/Makefile index f355b2e..5dc2267 100644 --- a/src/Makefile +++ b/src/Makefile @@ -49,7 +49,7 @@ window.o: window.c panel.h window.h main.o: main.c panel.h ../config.h $(CC) $(panel_CFLAGS) -c main.c -panelctl.o: panelctl.c ../config.h +panelctl.o: panelctl.c ../include/Panel.h panel.h ../config.h $(CC) $(panelctl_CFLAGS) -c panelctl.c run.o: run.c diff --git a/src/panel.c b/src/panel.c index 99649eb..0f98926 100644 --- a/src/panel.c +++ b/src/panel.c @@ -406,13 +406,13 @@ static GdkFilterReturn _event_client_message(XClientMessageEvent * xevent, case PANEL_MESSAGE_SHOW: what = xevent->data.b[1]; show = xevent->data.b[2]; - if(what == PANEL_MESSAGE_SHOW_PANEL_BOTTOM + if(what & PANEL_MESSAGE_SHOW_PANEL_BOTTOM && panel->bottom != NULL) panel_window_show(panel->bottom, show); - else if(what == PANEL_MESSAGE_SHOW_PANEL_TOP + if(what & PANEL_MESSAGE_SHOW_PANEL_TOP && panel->top != NULL) panel_window_show(panel->top, show); - else if(what == PANEL_MESSAGE_SHOW_SETTINGS) + if(what & PANEL_MESSAGE_SHOW_SETTINGS) panel_show_preferences(panel, show); break; } diff --git a/src/panel.h b/src/panel.h index 227ceed..964d02e 100644 --- a/src/panel.h +++ b/src/panel.h @@ -24,18 +24,6 @@ /* Panel */ /* types */ -typedef enum _PanelMessage -{ - PANEL_MESSAGE_SHOW = 0 -} PanelMessage; - -typedef enum _PanelMessageShow -{ - PANEL_MESSAGE_SHOW_PANEL_BOTTOM = 0, - PANEL_MESSAGE_SHOW_PANEL_TOP, - PANEL_MESSAGE_SHOW_SETTINGS -} PanelMessageShow; - typedef enum _PanelPosition { PANEL_POSITION_BOTTOM = 0x1, @@ -53,8 +41,6 @@ typedef struct _PanelPrefs /* constants */ # define PANEL_BORDER_WIDTH 4 -# define PANEL_CLIENT_MESSAGE "DEFORAOS_DESKTOP_PANEL_CLIENT" - # define PANEL_CONFIG_FILE ".panel" # define PANEL_ICON_SIZE_DEFAULT "panel-large" diff --git a/src/project.conf b/src/project.conf index 03e59da..7524a06 100644 --- a/src/project.conf +++ b/src/project.conf @@ -31,7 +31,7 @@ ldflags=`pkg-config --libs gtk+-2.0` install=$(BINDIR) [panelctl.c] -depends=../config.h +depends=../include/Panel.h,panel.h,../config.h [run] type=binary diff --git a/src/window.c b/src/window.c index 7ece3aa..c69e11b 100644 --- a/src/window.c +++ b/src/window.c @@ -75,6 +75,7 @@ PanelWindow * panel_window_new(PanelPosition position, #if GTK_CHECK_VERSION(2, 6, 0) gtk_window_set_focus_on_map(GTK_WINDOW(panel->window), FALSE); #endif + gtk_window_set_keep_above(GTK_WINDOW(panel->window), FALSE); gtk_window_set_type_hint(GTK_WINDOW(panel->window), GDK_WINDOW_TYPE_HINT_DOCK); gtk_window_stick(GTK_WINDOW(panel->window));