summaryrefslogtreecommitdiff
path: root/library
authorkergoth <kergoth>2002-01-28 23:28:04 (UTC)
committer kergoth <kergoth>2002-01-28 23:28:04 (UTC)
commitf7b3193e5d2d9a211ce0b963dca571d82adecb71 (patch) (side-by-side diff)
tree44f49bdc076dc299bba1a4dc8d5d517114be5701 /library
parent77d110d35f75d63f5dc66c1dd2427daf7dc2e214 (diff)
downloadopie-f7b3193e5d2d9a211ce0b963dca571d82adecb71.zip
opie-f7b3193e5d2d9a211ce0b963dca571d82adecb71.tar.gz
opie-f7b3193e5d2d9a211ce0b963dca571d82adecb71.tar.bz2
Committing in .
Modified Files: configure mkipks addressbook/Makefile.in addressbook/addressbook.pro calc2/calc.pro calc2/binary/binary.pro calc2/simple/simple.pro calculator/Makefile.in calculator/calculator.pro cardmon/Makefile.in cardmon/cardmon.pro chess/chess.pro citytime/Makefile.in citytime/citytime.pro clock/Makefile.in clock/clock.pro datebook/Makefile.in datebook/datebook.pro dictionary/dictionary.pro doc/qcop.doc doc/start.doc embeddedkonsole/Makefile.in embeddedkonsole/embeddedkonsole.pro etc/init.d/qpe example/example.pro fifteen/Makefile.in fifteen/fifteen.pro filebrowser/Makefile.in filebrowser/filebrowser.pro freetype/freetype.pro go/Makefile.in go/go.pro helpbrowser/Makefile.in helpbrowser/helpbrowser.pro inputmethods/handwriting/Makefile.in inputmethods/handwriting/handwriting.pro inputmethods/keyboard/Makefile.in inputmethods/keyboard/keyboard.pro inputmethods/pickboard/Makefile.in inputmethods/pickboard/pickboard.pro inputmethods/unikeyboard/Makefile.in inputmethods/unikeyboard/unikeyboard.pro keypebble/Makefile.in keypebble/keypebble.pro library/Makefile.in library/global.cpp library/library.pro library/qpeapplication.cpp mindbreaker/Makefile.in mindbreaker/mindbreaker.pro minesweep/Makefile.in minesweep/minesweep.pro mpegplayer/Makefile.in mpegplayer/mpegplayer.pro mpegplayer/libflash/libflash.pro mpegplayer/libmad/Makefile.in mpegplayer/libmad/libmad.pro mpegplayer/libmpeg3/Makefile.in mpegplayer/libmpeg3/libmpeg3.pro mpegplayer/libmpeg3/audio/Makefile mpegplayer/libmpeg3/video/Makefile mpegplayer/wavplugin/Makefile.in mpegplayer/wavplugin/wavplugin.pro netsetup/Makefile.in netsetup/README netsetup/netsetup.pro netsetup/dialup/Makefile.in netsetup/dialup/dialup.pro netsetup/lan/Makefile.in netsetup/lan/lan.pro parashoot/Makefile.in parashoot/parashoot.pro qasteroids/Makefile.in qasteroids/qasteroids.pro qcop/Makefile.in qcop/qcop.pro qipkg/Makefile.in qipkg/qipkg.pro scripts/q_functions settings/appearance/Makefile.in settings/appearance/appearance.pro settings/language/Makefile.in settings/language/language.pro settings/light-and-power/Makefile.in settings/light-and-power/light-and-power.pro settings/rotation/Makefile.in settings/rotation/rotation.pro settings/security/Makefile.in settings/security/security.pro settings/sound/Makefile.in settings/sound/sound.pro settings/systemtime/Makefile.in settings/systemtime/systemtime.pro showimg/Makefile.in showimg/showimg.pro single/Makefile.in single/single.pro snake/Makefile.in snake/snake.pro solitaire/Makefile.in solitaire/solitaire.pro spreadsheet/Makefile.in spreadsheet/spreadsheet.pro sysinfo/Makefile.in sysinfo/sysinfo.pro tableviewer/tableviewer.pro taskbar/Makefile.in taskbar/main.cpp taskbar/taskbar.pro taskbar/batteryapplet/Makefile.in taskbar/batteryapplet/batteryapplet.pro taskbar/clipboardapplet/clipboardapplet.pro taskbar/clockapplet/Makefile.in taskbar/clockapplet/clockapplet.pro taskbar/netmonapplet/Makefile.in taskbar/netmonapplet/netmonapplet.pro taskbar/volumeapplet/Makefile.in taskbar/volumeapplet/volumeapplet.pro tetrix/Makefile.in tetrix/tetrix.pro textedit/Makefile.in textedit/textedit.pro todo/Makefile.in todo/todo.pro tux/Makefile.in tux/tux.pro website/htdocs/build.html website/htdocs/development.html website/htdocs/refman/qcop.html website/htdocs/refman/qpeapplication.html wordgame/Makefile.in wordgame/wordgame.pro Log Message: Changed QPEDIR to OPIEDIR in .pro files, and documentation, and regenerated all Makefile.in's that were affected.
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/Makefile.in26
-rw-r--r--library/global.cpp2
-rw-r--r--library/library.pro4
-rw-r--r--library/qpeapplication.cpp4
4 files changed, 17 insertions, 19 deletions
diff --git a/library/Makefile.in b/library/Makefile.in
index c89390f..b74b818 100644
--- a/library/Makefile.in
+++ b/library/Makefile.in
@@ -1,905 +1,903 @@
#############################################################################
####### Compiler, tools and options
CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
CC = $(SYSCONF_CC) $(QT_C_MT)
CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
-INCPATH = -I$(QPEDIR)/include -Ibackend
+INCPATH = -I$(OPIEDIR)/include -Ibackend
LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
LIBS = $(SUBLIBS) -ldl -lcrypt -lm $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
MOC = $(SYSCONF_MOC)
UIC = $(SYSCONF_UIC)
####### Target
DESTDIR = $(QTDIR)/lib$(PROJMAK)/
VER_MAJ = 1
VER_MIN = 5
VER_PATCH = 0
TARGET = qpe
TARGET1 = lib$(TARGET).so.$(VER_MAJ)
####### Files
HEADERS = calendar.h \
global.h \
resource.h \
xmlreader.h \
mimetype.h \
menubutton.h \
network.h \
networkinterface.h \
proxies.h \
filemanager.h \
fontmanager.h \
qdawg.h \
datebookmonth.h \
fileselector.h \
imageedit.h \
qcopenvelope_qws.h \
qpedecoration_qws.h \
qpeapplication.h \
qpestyle.h \
qpedialog.h \
lightstyle.h \
config.h \
applnk.h \
sound.h \
tzselect.h \
qmath.h \
datebookdb.h \
alarmserver.h \
process.h \
password.h \
timestring.h \
fontfactoryinterface.h \
fontdatabase.h \
power.h \
storage.h \
qpemessagebox.h \
backend/timeconversion.h \
qpedebug.h \
qpemenubar.h \
qpetoolbar.h \
backend/categories.h \
backend/stringutil.h \
backend/palmtopuid.h \
backend/palmtoprecord.h \
backend/task.h \
backend/event.h \
backend/contact.h \
categorymenu.h \
categoryedit_p.h \
categoryselect.h \
categorywidget.h \
ir.h \
backend/vobject_p.h \
findwidget_p.h \
finddialog.h \
lnkproperties.h \
quuid.h \
qcom.h \
qlibrary.h \
qlibrary_p.h \
qprocess.h
SOURCES = calendar.cpp \
global.cpp \
xmlreader.cpp \
mimetype.cpp \
menubutton.cpp \
network.cpp \
networkinterface.cpp \
proxies.cpp \
filemanager.cpp \
fontmanager.cpp \
qdawg.cpp \
datebookmonth.cpp \
fileselector.cpp \
imageedit.cpp \
resource.cpp \
qpedecoration_qws.cpp \
qcopenvelope_qws.cpp \
qpeapplication.cpp \
qpestyle.cpp \
qpedialog.cpp \
lightstyle.cpp \
config.cpp \
applnk.cpp \
sound.cpp \
tzselect.cpp \
qmath.c \
datebookdb.cpp \
alarmserver.cpp \
password.cpp \
process.cpp \
process_unix.cpp \
timestring.cpp \
fontdatabase.cpp \
power.cpp \
storage.cpp \
qpemessagebox.cpp \
backend/timeconversion.cpp \
qpedebug.cpp \
qpemenubar.cpp \
qpetoolbar.cpp \
backend/categories.cpp \
backend/stringutil.cpp \
backend/palmtoprecord.cpp \
backend/task.cpp \
backend/event.cpp \
backend/contact.cpp \
categorymenu.cpp \
categoryedit_p.cpp \
categoryselect.cpp \
categorywidget.cpp \
ir.cpp \
backend/vcc_yacc.cpp \
backend/vobject.cpp \
findwidget_p.cpp \
finddialog.cpp \
lnkproperties.cpp \
quuid.cpp \
qlibrary.cpp \
qlibrary_unix.cpp \
qprocess.cpp \
qprocess_unix.cpp
OBJECTS = calendar.o \
global.o \
xmlreader.o \
mimetype.o \
menubutton.o \
network.o \
networkinterface.o \
proxies.o \
filemanager.o \
fontmanager.o \
qdawg.o \
datebookmonth.o \
fileselector.o \
imageedit.o \
resource.o \
qpedecoration_qws.o \
qcopenvelope_qws.o \
qpeapplication.o \
qpestyle.o \
qpedialog.o \
lightstyle.o \
config.o \
applnk.o \
sound.o \
tzselect.o \
qmath.o \
datebookdb.o \
alarmserver.o \
password.o \
process.o \
process_unix.o \
timestring.o \
fontdatabase.o \
power.o \
storage.o \
qpemessagebox.o \
backend/timeconversion.o \
qpedebug.o \
qpemenubar.o \
qpetoolbar.o \
backend/categories.o \
backend/stringutil.o \
backend/palmtoprecord.o \
backend/task.o \
backend/event.o \
backend/contact.o \
categorymenu.o \
categoryedit_p.o \
categoryselect.o \
categorywidget.o \
ir.o \
backend/vcc_yacc.o \
backend/vobject.o \
findwidget_p.o \
finddialog.o \
lnkproperties.o \
quuid.o \
qlibrary.o \
qlibrary_unix.o \
qprocess.o \
qprocess_unix.o \
passwordbase_p.o \
proxiesbase_p.o \
categoryeditbase_p.o \
findwidgetbase_p.o \
lnkpropertiesbase_p.o
INTERFACES = passwordbase_p.ui \
proxiesbase_p.ui \
categoryeditbase_p.ui \
findwidgetbase_p.ui \
lnkpropertiesbase_p.ui
UICDECLS = passwordbase_p.h \
proxiesbase_p.h \
categoryeditbase_p.h \
findwidgetbase_p.h \
lnkpropertiesbase_p.h
UICIMPLS = passwordbase_p.cpp \
proxiesbase_p.cpp \
categoryeditbase_p.cpp \
findwidgetbase_p.cpp \
lnkpropertiesbase_p.cpp
SRCMOC = moc_menubutton.cpp \
moc_proxies.cpp \
moc_datebookmonth.cpp \
moc_fileselector.cpp \
moc_imageedit.cpp \
moc_qpedecoration_qws.cpp \
moc_qpeapplication.cpp \
moc_qpedialog.cpp \
moc_tzselect.cpp \
moc_process.cpp \
moc_storage.cpp \
moc_qpemenubar.cpp \
moc_qpetoolbar.cpp \
backend/moc_categories.cpp \
moc_categorymenu.cpp \
moc_categoryedit_p.cpp \
moc_categoryselect.cpp \
moc_ir.cpp \
moc_findwidget_p.cpp \
moc_finddialog.cpp \
moc_lnkproperties.cpp \
moc_qlibrary_p.cpp \
moc_qprocess.cpp \
global.moc \
network.moc \
password.moc \
process_unix.moc \
timestring.moc \
qprocess_unix.moc \
moc_passwordbase_p.cpp \
moc_proxiesbase_p.cpp \
moc_categoryeditbase_p.cpp \
moc_findwidgetbase_p.cpp \
moc_lnkpropertiesbase_p.cpp
OBJMOC = moc_menubutton.o \
moc_proxies.o \
moc_datebookmonth.o \
moc_fileselector.o \
moc_imageedit.o \
moc_qpedecoration_qws.o \
moc_qpeapplication.o \
moc_qpedialog.o \
moc_tzselect.o \
moc_process.o \
moc_storage.o \
moc_qpemenubar.o \
moc_qpetoolbar.o \
backend/moc_categories.o \
moc_categorymenu.o \
moc_categoryedit_p.o \
moc_categoryselect.o \
moc_ir.o \
moc_findwidget_p.o \
moc_finddialog.o \
moc_lnkproperties.o \
moc_qlibrary_p.o \
moc_qprocess.o \
moc_passwordbase_p.o \
moc_proxiesbase_p.o \
moc_categoryeditbase_p.o \
moc_findwidgetbase_p.o \
moc_lnkpropertiesbase_p.o
####### Implicit rules
.SUFFIXES: .cpp .cxx .cc .C .c
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
$(SYSCONF_LINK_LIB)
moc: $(SRCMOC)
tmake:
tmake library.pro
clean:
-rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
-rm -f *~ core
-rm -f allmoc.cpp
####### Extension Modules
listpromodules:
@echo
listallmodules:
@echo
listaddonpromodules:
@echo
listaddonentmodules:
@echo
REQUIRES=
####### Sub-libraries
###### Combined headers
####### Compile
calendar.o: calendar.cpp \
calendar.h
global.o: global.cpp \
global.moc
xmlreader.o: xmlreader.cpp \
xmlreader.h
mimetype.o: mimetype.cpp \
mimetype.h \
applnk.h \
resource.h \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h
menubutton.o: menubutton.cpp \
menubutton.h
network.o: network.cpp \
network.moc
networkinterface.o: networkinterface.cpp \
networkinterface.h \
network.h \
config.h
proxies.o: proxies.cpp \
proxies.h \
config.h \
proxiesbase_p.h
filemanager.o: filemanager.cpp \
filemanager.h \
applnk.h
fontmanager.o: fontmanager.cpp \
fontmanager.h
qdawg.o: qdawg.cpp \
qdawg.h
datebookmonth.o: datebookmonth.cpp \
config.h \
datebookmonth.h \
calendar.h \
timestring.h \
datebookdb.h \
resource.h \
qpeapplication.h \
qpedecoration_qws.h
fileselector.o: fileselector.cpp \
fileselector.h \
filemanager.h \
applnk.h \
global.h \
resource.h \
config.h \
storage.h \
qpemenubar.h \
lnkproperties.h \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h \
categorymenu.h
imageedit.o: imageedit.cpp \
imageedit.h
resource.o: resource.cpp \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h \
resource.h \
inlinepics_p.h
qpedecoration_qws.o: qpedecoration_qws.cpp \
qcopenvelope_qws.h \
qpedecoration_qws.h \
qpeapplication.h \
timestring.h \
resource.h \
global.h
qcopenvelope_qws.o: qcopenvelope_qws.cpp \
qcopenvelope_qws.h \
global.h
qpeapplication.o: qpeapplication.cpp \
qcopenvelope_qws.h \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h \
qpestyle.h \
lightstyle.h \
global.h \
resource.h \
config.h \
network.h \
fontmanager.h \
power.h \
alarmserver.h \
- applnk.h
+ applnk.h \
+ qpemenubar.h
qpestyle.o: qpestyle.cpp \
qpestyle.h \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h
qpedialog.o: qpedialog.cpp \
qpedialog.h \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h
lightstyle.o: lightstyle.cpp \
lightstyle.h
config.o: config.cpp \
config.h
applnk.o: applnk.cpp \
applnk.h
sound.o: sound.cpp
tzselect.o: tzselect.cpp \
tzselect.h \
resource.h \
global.h \
config.h
qmath.o: qmath.c \
qmath.h
datebookdb.o: datebookdb.cpp \
datebookdb.h
alarmserver.o: alarmserver.cpp \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h \
global.h \
resource.h \
qcopenvelope_qws.h \
alarmserver.h
password.o: password.cpp \
password.moc \
password.h \
config.h \
global.h \
backend/contact.h \
passwordbase_p.h
process.o: process.cpp \
process.h
process_unix.o: process_unix.cpp \
process_unix.moc \
process.h
timestring.o: timestring.cpp \
timestring.moc \
timestring.h \
qpeapplication.h \
qpedecoration_qws.h \
config.h
fontdatabase.o: fontdatabase.cpp \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h \
fontfactoryinterface.h \
fontdatabase.h
power.o: power.cpp \
- power.h
+ power.h \
+ custom.h
storage.o: storage.cpp
qpemessagebox.o: qpemessagebox.cpp \
qpemessagebox.h
backend/timeconversion.o: backend/timeconversion.cpp \
backend/timeconversion.h
qpedebug.o: qpedebug.cpp \
qpedebug.h
qpemenubar.o: qpemenubar.cpp \
qpemenubar.h
qpetoolbar.o: qpetoolbar.cpp \
qpetoolbar.h \
qpemenubar.h
backend/categories.o: backend/categories.cpp \
backend/categories.h \
backend/qpcglobal.h \
backend/palmtopuidgen.h \
backend/stringutil.h
backend/stringutil.o: backend/stringutil.cpp \
backend/stringutil.h \
backend/qpcglobal.h
backend/palmtoprecord.o: backend/palmtoprecord.cpp \
backend/palmtoprecord.h \
backend/qpcglobal.h \
backend/palmtopuidgen.h \
backend/stringutil.h
backend/task.o: backend/task.cpp \
backend/vobject_p.h \
backend/timeconversion.h \
backend/qfiledirect_p.h
backend/event.o: backend/event.cpp \
backend/event.h \
backend/qfiledirect_p.h \
backend/vobject_p.h
backend/contact.o: backend/contact.cpp \
backend/contact.h \
backend/vobject_p.h \
backend/qfiledirect_p.h
categorymenu.o: categorymenu.cpp \
categorymenu.h \
backend/categories.h \
backend/qpcglobal.h \
backend/palmtopuidgen.h \
categoryselect.h
categoryedit_p.o: categoryedit_p.cpp \
categoryedit_p.h \
categoryeditbase_p.h
categoryselect.o: categoryselect.cpp \
categorywidget.h \
categoryselect.h
categorywidget.o: categorywidget.cpp \
categoryedit_p.h \
categoryeditbase_p.h \
categorywidget.h
ir.o: ir.cpp \
ir.h \
qcopenvelope_qws.h \
applnk.h
backend/vcc_yacc.o: backend/vcc_yacc.cpp \
- backend/vobject_p.h
+ backend/vobject_p.h \
+ backend/qfiledirect_p.h
backend/vobject.o: backend/vobject.cpp \
backend/vobject_p.h \
backend/qfiledirect_p.h
findwidget_p.o: findwidget_p.cpp \
findwidget_p.h \
findwidgetbase_p.h
finddialog.o: finddialog.cpp \
finddialog.h \
findwidget_p.h \
findwidgetbase_p.h
lnkproperties.o: lnkproperties.cpp \
lnkproperties.h \
lnkpropertiesbase_p.h \
ir.h
quuid.o: quuid.cpp \
quuid.h
qlibrary.o: qlibrary.cpp \
qlibrary_p.h \
qlibrary.h
qlibrary_unix.o: qlibrary_unix.cpp \
qlibrary_p.h \
qlibrary.h
qprocess.o: qprocess.cpp \
qprocess.h
qprocess_unix.o: qprocess_unix.cpp \
qprocess_unix.moc \
qprocess.h \
qcleanuphandler_p.h
passwordbase_p.h: passwordbase_p.ui
$(UIC) passwordbase_p.ui -o $(INTERFACE_DECL_PATH)/passwordbase_p.h
passwordbase_p.cpp: passwordbase_p.ui
$(UIC) passwordbase_p.ui -i passwordbase_p.h -o passwordbase_p.cpp
proxiesbase_p.h: proxiesbase_p.ui
$(UIC) proxiesbase_p.ui -o $(INTERFACE_DECL_PATH)/proxiesbase_p.h
proxiesbase_p.cpp: proxiesbase_p.ui
$(UIC) proxiesbase_p.ui -i proxiesbase_p.h -o proxiesbase_p.cpp
categoryeditbase_p.h: categoryeditbase_p.ui
$(UIC) categoryeditbase_p.ui -o $(INTERFACE_DECL_PATH)/categoryeditbase_p.h
categoryeditbase_p.cpp: categoryeditbase_p.ui
$(UIC) categoryeditbase_p.ui -i categoryeditbase_p.h -o categoryeditbase_p.cpp
findwidgetbase_p.h: findwidgetbase_p.ui
$(UIC) findwidgetbase_p.ui -o $(INTERFACE_DECL_PATH)/findwidgetbase_p.h
findwidgetbase_p.cpp: findwidgetbase_p.ui
$(UIC) findwidgetbase_p.ui -i findwidgetbase_p.h -o findwidgetbase_p.cpp
lnkpropertiesbase_p.h: lnkpropertiesbase_p.ui
$(UIC) lnkpropertiesbase_p.ui -o $(INTERFACE_DECL_PATH)/lnkpropertiesbase_p.h
lnkpropertiesbase_p.cpp: lnkpropertiesbase_p.ui
$(UIC) lnkpropertiesbase_p.ui -i lnkpropertiesbase_p.h -o lnkpropertiesbase_p.cpp
-passwordbase_p.o: passwordbase_p.cpp \
- passwordbase_p.h
+passwordbase_p.o: passwordbase_p.cpp
-proxiesbase_p.o: proxiesbase_p.cpp \
- proxiesbase_p.h
+proxiesbase_p.o: proxiesbase_p.cpp
-categoryeditbase_p.o: categoryeditbase_p.cpp \
- categoryeditbase_p.h
+categoryeditbase_p.o: categoryeditbase_p.cpp
-findwidgetbase_p.o: findwidgetbase_p.cpp \
- findwidgetbase_p.h
+findwidgetbase_p.o: findwidgetbase_p.cpp
-lnkpropertiesbase_p.o: lnkpropertiesbase_p.cpp \
- lnkpropertiesbase_p.h
+lnkpropertiesbase_p.o: lnkpropertiesbase_p.cpp
moc_menubutton.o: moc_menubutton.cpp \
menubutton.h
moc_proxies.o: moc_proxies.cpp \
proxies.h \
config.h
moc_datebookmonth.o: moc_datebookmonth.cpp \
datebookmonth.h \
calendar.h \
timestring.h
moc_fileselector.o: moc_fileselector.cpp \
fileselector.h \
filemanager.h \
applnk.h
moc_imageedit.o: moc_imageedit.cpp \
imageedit.h
moc_qpedecoration_qws.o: moc_qpedecoration_qws.cpp \
qpedecoration_qws.h
moc_qpeapplication.o: moc_qpeapplication.cpp \
qpeapplication.h \
qpedecoration_qws.h \
timestring.h
moc_qpedialog.o: moc_qpedialog.cpp \
qpedialog.h
moc_tzselect.o: moc_tzselect.cpp \
tzselect.h
moc_process.o: moc_process.cpp \
process.h
moc_storage.o: moc_storage.cpp \
storage.h
moc_qpemenubar.o: moc_qpemenubar.cpp \
qpemenubar.h
moc_qpetoolbar.o: moc_qpetoolbar.cpp \
qpetoolbar.h
backend/moc_categories.o: backend/moc_categories.cpp \
backend/categories.h \
backend/qpcglobal.h \
backend/palmtopuidgen.h
moc_categorymenu.o: moc_categorymenu.cpp \
categorymenu.h
moc_categoryedit_p.o: moc_categoryedit_p.cpp \
categoryedit_p.h \
categoryeditbase_p.h
moc_categoryselect.o: moc_categoryselect.cpp \
categoryselect.h
moc_ir.o: moc_ir.cpp \
ir.h
moc_findwidget_p.o: moc_findwidget_p.cpp \
findwidget_p.h \
findwidgetbase_p.h
moc_finddialog.o: moc_finddialog.cpp \
finddialog.h
moc_lnkproperties.o: moc_lnkproperties.cpp \
lnkproperties.h
moc_qlibrary_p.o: moc_qlibrary_p.cpp \
qlibrary_p.h \
qlibrary.h
moc_qprocess.o: moc_qprocess.cpp \
qprocess.h
moc_passwordbase_p.o: global.moc \
global.cpp
moc_proxiesbase_p.o: network.moc \
network.cpp
moc_categoryeditbase_p.o: password.moc \
password.cpp \
password.h \
config.h \
global.h \
backend/contact.h \
passwordbase_p.h
moc_findwidgetbase_p.o: process_unix.moc \
process_unix.cpp \
process.h
moc_lnkpropertiesbase_p.o: timestring.moc \
timestring.cpp \
timestring.h \
qpeapplication.h \
qpedecoration_qws.h \
config.h
moc_menubutton.cpp: menubutton.h
$(MOC) menubutton.h -o moc_menubutton.cpp
moc_proxies.cpp: proxies.h
$(MOC) proxies.h -o moc_proxies.cpp
moc_datebookmonth.cpp: datebookmonth.h
$(MOC) datebookmonth.h -o moc_datebookmonth.cpp
moc_fileselector.cpp: fileselector.h
$(MOC) fileselector.h -o moc_fileselector.cpp
moc_imageedit.cpp: imageedit.h
$(MOC) imageedit.h -o moc_imageedit.cpp
moc_qpedecoration_qws.cpp: qpedecoration_qws.h
$(MOC) qpedecoration_qws.h -o moc_qpedecoration_qws.cpp
moc_qpeapplication.cpp: qpeapplication.h
$(MOC) qpeapplication.h -o moc_qpeapplication.cpp
moc_qpedialog.cpp: qpedialog.h
$(MOC) qpedialog.h -o moc_qpedialog.cpp
moc_tzselect.cpp: tzselect.h
$(MOC) tzselect.h -o moc_tzselect.cpp
moc_process.cpp: process.h
$(MOC) process.h -o moc_process.cpp
moc_storage.cpp: storage.h
$(MOC) storage.h -o moc_storage.cpp
moc_qpemenubar.cpp: qpemenubar.h
$(MOC) qpemenubar.h -o moc_qpemenubar.cpp
moc_qpetoolbar.cpp: qpetoolbar.h
$(MOC) qpetoolbar.h -o moc_qpetoolbar.cpp
backend/moc_categories.cpp: backend/categories.h
$(MOC) backend/categories.h -o backend/moc_categories.cpp
moc_categorymenu.cpp: categorymenu.h
$(MOC) categorymenu.h -o moc_categorymenu.cpp
moc_categoryedit_p.cpp: categoryedit_p.h
$(MOC) categoryedit_p.h -o moc_categoryedit_p.cpp
moc_categoryselect.cpp: categoryselect.h
$(MOC) categoryselect.h -o moc_categoryselect.cpp
moc_ir.cpp: ir.h
$(MOC) ir.h -o moc_ir.cpp
moc_findwidget_p.cpp: findwidget_p.h
$(MOC) findwidget_p.h -o moc_findwidget_p.cpp
moc_finddialog.cpp: finddialog.h
$(MOC) finddialog.h -o moc_finddialog.cpp
moc_lnkproperties.cpp: lnkproperties.h
$(MOC) lnkproperties.h -o moc_lnkproperties.cpp
moc_qlibrary_p.cpp: qlibrary_p.h
$(MOC) qlibrary_p.h -o moc_qlibrary_p.cpp
moc_qprocess.cpp: qprocess.h
$(MOC) qprocess.h -o moc_qprocess.cpp
global.moc: global.cpp
$(MOC) global.cpp -o global.moc
network.moc: network.cpp
$(MOC) network.cpp -o network.moc
password.moc: password.cpp
$(MOC) password.cpp -o password.moc
process_unix.moc: process_unix.cpp
$(MOC) process_unix.cpp -o process_unix.moc
timestring.moc: timestring.cpp
$(MOC) timestring.cpp -o timestring.moc
qprocess_unix.moc: qprocess_unix.cpp
$(MOC) qprocess_unix.cpp -o qprocess_unix.moc
moc_passwordbase_p.cpp: passwordbase_p.h
$(MOC) passwordbase_p.h -o moc_passwordbase_p.cpp
moc_proxiesbase_p.cpp: proxiesbase_p.h
$(MOC) proxiesbase_p.h -o moc_proxiesbase_p.cpp
moc_categoryeditbase_p.cpp: categoryeditbase_p.h
$(MOC) categoryeditbase_p.h -o moc_categoryeditbase_p.cpp
moc_findwidgetbase_p.cpp: findwidgetbase_p.h
$(MOC) findwidgetbase_p.h -o moc_findwidgetbase_p.cpp
moc_lnkpropertiesbase_p.cpp: lnkpropertiesbase_p.h
$(MOC) lnkpropertiesbase_p.h -o moc_lnkpropertiesbase_p.cpp
diff --git a/library/global.cpp b/library/global.cpp
index e1bbf3e..e5fc2b3 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -1,644 +1,644 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include <qpe/qpedebug.h>
#include <qpe/global.h>
#include <qpe/qdawg.h>
#include <qpe/qpeapplication.h>
#include <qpe/resource.h>
#include <qpe/storage.h>
#include <qpe/applnk.h>
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
#include "qpe/qcopenvelope_qws.h"
#endif
#include <qfile.h>
#include <qlabel.h>
#include <qtimer.h>
#include <qmap.h>
#include <qdict.h>
#include <qdir.h>
#include <qmessagebox.h>
#include <qregexp.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <qwindowsystem_qws.h> // for qwsServer
#include <qdatetime.h>
//#include "quickexec_p.h"
class Emitter : public QObject {
Q_OBJECT
public:
Emitter( QWidget* receiver, const QString& document )
{
connect(this, SIGNAL(setDocument(const QString&)),
receiver, SLOT(setDocument(const QString&)));
emit setDocument(document);
disconnect(this, SIGNAL(setDocument(const QString&)),
receiver, SLOT(setDocument(const QString&)));
}
signals:
void setDocument(const QString&);
};
class StartingAppList : public QObject {
Q_OBJECT
public:
static void add( const QString& name );
static bool isStarting( const QString name );
private slots:
void handleNewChannel( const QString &);
private:
StartingAppList( QObject *parent=0, const char* name=0 ) ;
QDict<QTime> dict;
static StartingAppList *appl;
};
StartingAppList* StartingAppList::appl = 0;
StartingAppList::StartingAppList( QObject *parent, const char* name )
:QObject( parent, name )
{
#if QT_VERSION >= 232 && !defined(QT_NO_COP)
connect( qwsServer, SIGNAL( newChannel(const QString&)),
this, SLOT( handleNewChannel(const QString&)) );
dict.setAutoDelete( TRUE );
#endif
}
void StartingAppList::add( const QString& name )
{
#if QT_VERSION >= 232 && !defined(QT_NO_COP)
if ( !appl )
appl = new StartingAppList;
QTime *t = new QTime;
t->start();
appl->dict.insert( "QPE/Application/" + name, t );
#endif
}
bool StartingAppList::isStarting( const QString name )
{
#if QT_VERSION >= 232 && !defined(QT_NO_COP)
if ( appl ) {
QTime *t = appl->dict.find( "QPE/Application/" + name );
if ( !t )
return FALSE;
if ( t->elapsed() > 10000 ) {
// timeout in case of crash or something
appl->dict.remove( "QPE/Application/" + name );
return FALSE;
}
return TRUE;
}
#endif
return FALSE;
}
void StartingAppList::handleNewChannel( const QString & name )
{
#if QT_VERSION >= 232 && !defined(QT_NO_COP)
dict.remove( name );
#endif
}
static bool docDirCreated = FALSE;
static QDawg* fixed_dawg = 0;
static QDict<QDawg> *named_dawg = 0;
static QString qpeDir()
{
- QString dir = getenv("QPEDIR");
+ QString dir = getenv("OPIEDIR");
if ( dir.isEmpty() ) dir = "..";
return dir;
}
static QString dictDir()
{
return qpeDir() + "/etc/dict";
}
/*!
\class Global global.h
\brief The Global class collects application-wide global functions.
*/
/*!
\internal
*/
Global::Global()
{
}
/*!
Returns the unchangeable QDawg that contains general
words for the current locale.
\sa addedDawg()
*/
const QDawg& Global::fixedDawg()
{
if ( !fixed_dawg ) {
if ( !docDirCreated )
createDocDir();
fixed_dawg = new QDawg;
QString dawgfilename = dictDir() + "/dawg";
QString lang = getenv( "LANG" );
QString dawgfilename_lang = dawgfilename + "." + lang;
QString words_lang = dictDir() + "/words." + lang;
if ( QFile::exists(dawgfilename_lang) ||
QFile::exists(words_lang) )
dawgfilename = dawgfilename_lang;
QFile dawgfile(dawgfilename);
if ( !dawgfile.exists() ) {
QString fn = dictDir() + "/words";
if ( QFile::exists(words_lang) )
fn = words_lang;
QFile in(fn);
if ( in.open(IO_ReadOnly) ) {
fixed_dawg->createFromWords(&in);
dawgfile.open(IO_WriteOnly);
fixed_dawg->write(&dawgfile);
dawgfile.close();
}
} else {
fixed_dawg->readFile(dawgfilename);
}
}
return *fixed_dawg;
}
/*!
Returns the changeable QDawg that contains general
words for the current locale.
\sa fixedDawg()
*/
const QDawg& Global::addedDawg()
{
return dawg("local");
}
/*!
Returns the QDawg with the given \a name.
This is an application-specific word list.
\a name should not contain "/".
*/
const QDawg& Global::dawg(const QString& name)
{
createDocDir();
if ( !named_dawg )
named_dawg = new QDict<QDawg>;
QDawg* r = named_dawg->find(name);
if ( !r ) {
r = new QDawg;
named_dawg->insert(name,r);
QString dawgfilename = dictDir() + "/" + name + ".dawg";
QFile dawgfile(dawgfilename);
if ( dawgfile.open(IO_ReadOnly) )
r->readFile(dawgfilename);
}
return *r;
}
/*!
Adds \a wordlist to the addedDawg().
*/
void Global::addWords(const QStringList& wordlist)
{
addWords("local",wordlist);
}
/*!
Adds \a wordlist to the dawg() named \a dictname.
*/
void Global::addWords(const QString& dictname, const QStringList& wordlist)
{
QDawg& d = (QDawg&)dawg(dictname);
QStringList all = d.allWords() + wordlist;
d.createFromWords(all);
QString dawgfilename = dictDir() + "/" + dictname + ".dawg";
QFile dawgfile(dawgfilename);
if ( dawgfile.open(IO_WriteOnly) ) {
d.write(&dawgfile);
dawgfile.close();
}
// #### Re-read the dawg here if we use mmap().
// #### Signal other processes to re-read.
}
/*!
Returns a full path for the application named \a appname, with the
given \a filename or QString::null if there was a problem creating
the directory tree for \a appname.
If \a filename contains "/", it is the caller's responsibility to
ensure those directories exist.
*/
QString Global::applicationFileName(const QString& appname, const QString& filename)
{
QDir d;
QString r = getenv("HOME");
r += "/Applications/";
if ( !QFile::exists( r ) )
if ( d.mkdir(r) == false )
return QString::null;
r += appname;
if ( !QFile::exists( r ) )
if ( d.mkdir(r) == false )
return QString::null;
r += "/"; r += filename;
return r;
}
/*!
\internal
*/
void Global::createDocDir()
{
if ( !docDirCreated ) {
docDirCreated = TRUE;
mkdir( QPEApplication::documentDir().latin1(), 0755 );
}
}
/*!
Displays a status \a message to the user. This generally appears
in the taskbar for some amount of time, then disappears.
*/
void Global::statusMessage(const QString& message)
{
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopEnvelope e( "QPE/TaskBar", "message(QString)" );
e << message;
#endif
}
/*!
\internal
*/
void Global::applyStyle()
{
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel::send( "QPE/System", "applyStyle()" );
#else
((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version
#endif
}
/*!
\internal
*/
QWidget *Global::shutdown( bool )
{
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel::send( "QPE/System", "shutdown()" );
#endif
return 0;
}
/*!
\internal
*/
QWidget *Global::restart( bool )
{
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel::send( "QPE/System", "restart()" );
#endif
return 0;
}
/*!
Explicitly show the current input method.
*/
void Global::showInputMethod()
{
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel::send( "QPE/TaskBar", "showInputMethod()" );
#endif
}
/*!
Explicitly hide the current input method.
*/
void Global::hideInputMethod()
{
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" );
#endif
}
/*!
\internal
*/
bool Global::isBuiltinCommand( const QString &name )
{
if(!builtin)
return FALSE; // yes, it can happen
for (int i = 0; builtin[i].file; i++) {
if ( builtin[i].file == name ) {
return TRUE;
}
}
return FALSE;
}
Global::Command* Global::builtin=0;
QGuardedPtr<QWidget> *Global::running=0;
/*!
\class Global::Command
\brief The Global::Command class is internal.
\internal
*/
/*!
\internal
*/
void Global::setBuiltinCommands( Command* list )
{
if ( running )
delete [] running;
builtin = list;
int count = 0;
if (!builtin)
return;
while ( builtin[count].file )
count++;
running = new QGuardedPtr<QWidget> [ count ];
}
/*!
\internal
*/
void Global::setDocument( QWidget* receiver, const QString& document )
{
Emitter emitter(receiver,document);
}
/*!
\internal
*/
bool Global::terminateBuiltin( const QString& n )
{
if (!builtin)
return FALSE;
for (int i = 0; builtin[i].file; i++) {
if ( builtin[i].file == n ) {
delete running[i];
return TRUE;
}
}
return FALSE;
}
/*!
\internal
*/
void Global::terminate( const AppLnk* app )
{
//if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this
QCString channel = "QPE/Application/" + app->exec().utf8();
if ( QCopChannel::isRegistered(channel) ) {
QCopEnvelope e(channel, "quit()");
}
}
/*!
Low-level function to run command \a c. Not recommended.
*/
void Global::invoke(const QString &c)
{
// Convert the command line in to a list of arguments
QStringList list = QStringList::split(QRegExp(" *"),c);
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QString ap=list[0];
// see if the application is already running
// XXX should lock file /tmp/qcop-msg-ap
if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) {
QCopEnvelope e("QPE/System", "notBusy(QString)" );
e << ap;
return;
}
// XXX should unlock file /tmp/qcop-msg-ap
//see if it is being started
if ( StartingAppList::isStarting( ap ) ) {
QCopEnvelope e("QPE/System", "notBusy(QString)" );
e << ap;
return;
}
#endif
#ifdef QT_NO_QWS_MULTIPROCESS
QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 );
#else
QStrList slist;
unsigned int j;
for ( j = 0; j < list.count(); j++ )
slist.append( list[j].utf8() );
const char **args = new (const char *)[slist.count() + 1];
for ( j = 0; j < slist.count(); j++ )
args[j] = slist.at(j);
args[j] = NULL;
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
// an attempt to show a wait...
// more logic should be used, but this will be fine for the moment...
QCopEnvelope ( "QPE/System", "busy()" );
#endif
#ifdef HAVE_QUICKEXEC
QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so";
qDebug("libfile = %s", libexe.latin1() );
if ( QFile::exists( libexe ) ) {
qDebug("calling quickexec %s", libexe.latin1() );
quickexecv( libexe.utf8().data(), (const char **)args );
} else
#endif
{
if ( !::vfork() ) {
for ( int fd = 3; fd < 100; fd++ )
::close( fd );
::setpgid( ::getpid(), ::getppid() );
// Try bindir first, so that foo/bar works too
::execv( qpeDir()+"/bin/"+args[0], (char * const *)args );
::execvp( args[0], (char * const *)args );
exit( -1 );
}
}
StartingAppList::add( list[0] );
#endif //QT_NO_QWS_MULTIPROCESS
}
/*!
Executes application identfied by \a c, passing \a document.
Note that you might be better off sending a QCop message to
the application's QPE/Application/<i>appname</i> channel.
*/
void Global::execute( const QString &c, const QString& document )
{
if ( qApp->type() != QApplication::GuiServer ) {
// ask the server to do the work
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
if ( document.isNull() ) {
QCopEnvelope e( "QPE/System", "execute(QString)" );
e << c;
} else {
QCopEnvelope e( "QPE/System", "execute(QString,QString)" );
e << c << document;
}
#endif
return;
}
// Attempt to execute the app using a builtin class for the app first
// else try and find it in the bin directory
if (builtin) {
for (int i = 0; builtin[i].file; i++) {
if ( builtin[i].file == c ) {
if ( running[i] ) {
if ( !document.isNull() && builtin[i].documentary )
setDocument(running[i], document);
running[i]->raise();
running[i]->show();
running[i]->setActiveWindow();
} else {
running[i] = builtin[i].func( builtin[i].maximized );
}
QCopEnvelope e("QPE/System", "notBusy(QString)" );
e << c; // that was quick ;-)
return;
}
}
}
//Global::invoke(c, document);
// Convert the command line in to a list of arguments
QStringList list = QStringList::split(QRegExp(" *"),c);
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QString ap=list[0];
qDebug("executing %s", ap.latin1() );
if ( ap == "suspend" ) {
QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
return;
}
/* if need be, sending a qcop message will result in an invoke, see
preceeding function */
{ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
if ( !document.isEmpty() ) {
QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" );
env << document;
}
#endif
}
/*!
Returns the string \a s with the characters backslash, ", and $
quoted by a preceeding backslash.
*/
QString Global::shellQuote(const QString& s)
{
QString r="\"";
for (int i=0; i<(int)s.length(); i++) {
char c = s[i].latin1();
switch (c) {
case '\\': case '"': case '$':
r+="\\";
}
r += s[i];
}
r += "\"";
return r;
}
/*!
Returns the string \a s with the characters backslash and "
quoted by a preceeding backslash.
*/
QString Global::stringQuote(const QString& s)
{
QString r="\"";
for (int i=0; i<(int)s.length(); i++) {
char c = s[i].latin1();
switch (c) {
case '\\': case '"':
r+="\\";
}
r += s[i];
}
r += "\"";
return r;
}
/*!
Finds all documents on the system's document directories which
match the filter \a mimefilter, and appends the resulting DocLnk
objects to \a folder.
*/
void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter)
{
QString homedocs = QString(getenv("HOME")) + "/Documents";
DocLnkSet d(homedocs,mimefilter);
folder->appendFrom(d);
StorageInfo storage;
const QList<FileSystem> &fs = storage.fileSystems();
QListIterator<FileSystem> it ( fs );
for ( ; it.current(); ++it ) {
if ( (*it)->isRemovable() ) {
QString path = (*it)->path();
DocLnkSet ide( path, mimefilter );
folder->appendFrom(ide);
}
}
}
#include "global.moc"
diff --git a/library/library.pro b/library/library.pro
index 06dfc8f..058d216 100644
--- a/library/library.pro
+++ b/library/library.pro
@@ -1,132 +1,132 @@
TEMPLATE = lib
CONFIG += qt warn_on release
HEADERS = calendar.h \
global.h \
resource.h \
xmlreader.h \
mimetype.h \
menubutton.h \
network.h \
networkinterface.h \
proxies.h \
filemanager.h \
fontmanager.h \
qdawg.h \
datebookmonth.h \
fileselector.h \
imageedit.h \
qcopenvelope_qws.h \
qpedecoration_qws.h \
qpeapplication.h \
qpestyle.h \
qpedialog.h \
lightstyle.h \
config.h \
applnk.h \
sound.h \
tzselect.h \
qmath.h \
datebookdb.h \
alarmserver.h \
process.h \
password.h \
timestring.h \
fontfactoryinterface.h \
fontdatabase.h \
power.h \
storage.h \
qpemessagebox.h \
backend/timeconversion.h \
qpedebug.h \
qpemenubar.h \
qpetoolbar.h \
backend/categories.h \
backend/stringutil.h \
backend/palmtopuid.h \
backend/palmtoprecord.h \
backend/task.h \
backend/event.h \
backend/contact.h\
categorymenu.h \
categoryedit_p.h \
categoryselect.h \
categorywidget.h \
ir.h \
backend/vobject_p.h \
findwidget_p.h \
finddialog.h \
lnkproperties.h
SOURCES = calendar.cpp \
global.cpp \
xmlreader.cpp \
mimetype.cpp \
menubutton.cpp \
network.cpp \
networkinterface.cpp \
proxies.cpp \
filemanager.cpp \
fontmanager.cpp \
qdawg.cpp \
datebookmonth.cpp \
fileselector.cpp \
imageedit.cpp \
resource.cpp \
qpedecoration_qws.cpp \
qcopenvelope_qws.cpp \
qpeapplication.cpp \
qpestyle.cpp \
qpedialog.cpp \
lightstyle.cpp \
config.cpp \
applnk.cpp \
sound.cpp \
tzselect.cpp \
qmath.c \
datebookdb.cpp \
alarmserver.cpp \
password.cpp \
process.cpp \
process_unix.cpp \
timestring.cpp \
fontdatabase.cpp \
power.cpp \
storage.cpp \
qpemessagebox.cpp \
backend/timeconversion.cpp \
qpedebug.cpp \
qpemenubar.cpp \
qpetoolbar.cpp \
backend/categories.cpp \
backend/stringutil.cpp \
backend/palmtoprecord.cpp \
backend/task.cpp \
backend/event.cpp \
backend/contact.cpp \
categorymenu.cpp \
categoryedit_p.cpp \
categoryselect.cpp \
categorywidget.cpp \
ir.cpp \
backend/vcc_yacc.cpp \
backend/vobject.cpp \
findwidget_p.cpp \
finddialog.cpp \
lnkproperties.cpp
# Qt 3 compatibility
qt2:HEADERS += quuid.h qcom.h qlibrary.h qlibrary_p.h qprocess.h
qt2:SOURCES += quuid.cpp qlibrary.cpp qlibrary_unix.cpp qprocess.cpp \
qprocess_unix.cpp
-INCLUDEPATH += $(QPEDIR)/include backend
+INCLUDEPATH += $(OPIEDIR)/include backend
LIBS += -ldl -lcrypt -lm
INTERFACES = passwordbase_p.ui proxiesbase_p.ui categoryeditbase_p.ui findwidgetbase_p.ui lnkpropertiesbase_p.ui
TARGET = qpe
DESTDIR = $(QTDIR)/lib$(PROJMAK)
-# This is set by configure$(QPEDIR).
+# This is set by configure$(OPIEDIR).
VERSION = 1.5.0
TRANSLATIONS = ../i18n/de/libqpe.ts
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
index f0a68cf..70ffec1 100644
--- a/library/qpeapplication.cpp
+++ b/library/qpeapplication.cpp
@@ -25,1541 +25,1541 @@
#ifdef Q_WS_QWS
#ifndef QT_NO_COP
#if QT_VERSION <= 231
#define private public
#define sendLocally processEvent
#include "qcopenvelope_qws.h"
#undef private
#else
#include "qcopenvelope_qws.h"
#endif
#endif
#include <qwindowsystem_qws.h>
#endif
#include <qtextstream.h>
#include <qpalette.h>
#include <qbuffer.h>
#include <qptrdict.h>
#include <qregexp.h>
#include <qdir.h>
#include <qlabel.h>
#include <qdialog.h>
#include <qdragobject.h>
#include <qevent.h>
#include <qtooltip.h>
#include <qsignal.h>
#include "qpeapplication.h"
#include "qpestyle.h"
#if QT_VERSION >= 300
#include <qstylefactory.h>
#else
#include <qplatinumstyle.h>
#include <qwindowsstyle.h>
#include <qmotifstyle.h>
#include <qmotifplusstyle.h>
#include "lightstyle.h"
#endif
#include "global.h"
#include "resource.h"
#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
#include "qutfcodec.h"
#endif
#include "config.h"
#include "network.h"
#include "fontmanager.h"
#include "power.h"
#include "alarmserver.h"
#include "applnk.h"
#include "qpemenubar.h"
#include <unistd.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/soundcard.h>
// for setBacklight()
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
#include <linux/fb.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif
#include <stdlib.h>
class QPEApplicationData {
public:
QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE),
kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE),
forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0),
keep_running(TRUE)
{
qcopq.setAutoDelete(TRUE);
}
int presstimer;
QWidget* presswidget;
QPoint presspos;
bool rightpressed;
int kbgrabber;
bool kbregrab;
bool notbusysent;
QString appName;
struct QCopRec {
QCopRec(const QCString &ch, const QCString &msg,
const QByteArray &d) :
channel(ch), message(msg), data(d) { }
QCString channel;
QCString message;
QByteArray data;
};
bool preloaded;
bool forceshow;
bool nomaximize;
QWidget* qpe_main_widget;
bool keep_running;
QList<QCopRec> qcopq;
void enqueueQCop(const QCString &ch, const QCString &msg,
const QByteArray &data)
{
qcopq.append(new QCopRec(ch,msg,data));
}
void sendQCopQ()
{
QCopRec* r;
for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it)
QCopChannel::sendLocally(r->channel,r->message,r->data);
qcopq.clear();
}
};
class ResourceMimeFactory : public QMimeSourceFactory {
public:
ResourceMimeFactory()
{
QStringList path;
QString lang = getenv("LANG");
if ( !lang.isEmpty() )
path += QPEApplication::qpeDir() + "/help/" + lang + "/html";
path += QPEApplication::qpeDir() + "/pics";
path += QPEApplication::qpeDir() + "/help/en/html";
path += QPEApplication::qpeDir() + "/docs";
QString dir = QDir::current().canonicalPath();
if ( dir == "/" )
dir += "/docs";
else {
path += dir + "/../pics";
dir += "/../docs";
path += dir;
}
setFilePath( path );
setExtensionType("html","text/html;charset=UTF-8");
}
const QMimeSource* data(const QString& abs_name) const
{
const QMimeSource* r = QMimeSourceFactory::data(abs_name);
if ( !r ) {
int sl = abs_name.length();
do {
sl = abs_name.findRev('/',sl-1);
QString name = sl>=0 ? abs_name.mid(sl+1) : abs_name;
int dot = name.findRev('.');
if ( dot >= 0 )
name = name.left(dot);
QImage img = Resource::loadImage(name);
if ( !img.isNull() )
r = new QImageDrag(img);
} while (!r && sl>0);
}
return r;
}
};
static int muted=0;
static void setVolume(int t=0, int percent=-1)
{
switch (t) {
case 0: {
Config cfg("Sound");
cfg.setGroup("System");
if ( percent < 0 )
percent = cfg.readNumEntry("Volume",50);
int fd = 0;
if ((fd = open("/dev/mixer", O_RDWR))>=0) {
int vol = muted ? 0 : percent;
// set both channels to same volume
vol |= vol << 8;
ioctl(fd, MIXER_WRITE(0), &vol);
::close(fd);
}
} break;
}
}
int qpe_sysBrightnessSteps()
{
#if defined(QT_QWS_IPAQ)
return 255;
#elif defined(QT_QWS_EBX)
return 4;
#else
return 255; // ?
#endif
}
static int& hack(int& i)
{
#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
// These should be created, but aren't in Qt 2.3.0
(void)new QUtf8Codec;
(void)new QUtf16Codec;
#endif
return i;
}
static bool forced_off = FALSE;
static int curbl=-1;
static int backlight()
{
if ( curbl == -1 ) {
// Read from config
Config config( "qpe" );
config.setGroup( "Screensaver" );
curbl = config.readNumEntry("Brightness",255);
}
return curbl;
}
static void setBacklight(int bright)
{
if ( bright == -3 ) {
// Forced on
forced_off = FALSE;
bright = -1;
}
if ( forced_off && bright != -2 )
return;
if ( bright == -2 ) {
// Toggle between off and on
bright = curbl ? 0 : -1;
forced_off = !bright;
}
if ( bright == -1 ) {
// Read from config
Config config( "qpe" );
config.setGroup( "Screensaver" );
bright = config.readNumEntry("Brightness",255);
}
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
if ( QFile::exists("/usr/bin/bl") ) {
QString cmd = "/usr/bin/bl 1 ";
cmd += bright<=0 ? "0 " : "1 ";
cmd += QString::number(bright);
system(cmd.latin1());
#if defined(QT_QWS_EBX)
} else if ( QFile::exists("/dev/fl") ) {
#define FL_IOCTL_STEP_CONTRAST 100
int fd = open("/dev/fl", O_WRONLY);
if (fd >= 0 ) {
int steps = qpe_sysBrightnessSteps();
int bl = ( bright * steps + 127 ) / 255;
if ( bright && !bl ) bl = 1;
bl = ioctl(fd, FL_IOCTL_STEP_CONTRAST, bl);
close(fd);
}
}
#elif defined(QT_QWS_IPAQ)
} else if ( QFile::exists("/dev/ts") || QFile::exists("/dev/h3600_ts") ) {
typedef struct {
unsigned char mode;
unsigned char pwr;
unsigned char brightness;
} FLITE_IN;
# ifndef FLITE_ON
# ifndef _LINUX_IOCTL_H
# include <linux/ioctl.h>
# endif
# define FLITE_ON _IOW('f', 7, FLITE_IN)
# endif
int fd;
if ( QFile::exists("/dev/ts") )
fd = open("/dev/ts", O_WRONLY);
else
fd = open("/dev/h3600_ts", O_WRONLY);
if (fd >= 0 ) {
FLITE_IN bl;
bl.mode = 1;
bl.pwr = bright ? 1 : 0;
bl.brightness = bright;
ioctl(fd, FLITE_ON, &bl);
close(fd);
}
}
#endif
#endif
curbl = bright;
}
void qpe_setBacklight(int bright) { setBacklight(bright); }
static bool dim_on = FALSE;
static bool lightoff_on = FALSE;
static int disable_suspend = 100;
static bool powerOnline()
{
return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online;
}
static bool networkOnline()
{
return Network::networkOnline();
}
class QPEScreenSaver : public QWSScreenSaver
{
public:
QPEScreenSaver()
{
}
void restore()
{
setBacklight(-1);
}
bool save(int level)
{
switch ( level ) {
case 0:
if ( disable_suspend > 0 && dim_on ) {
if (backlight() > 1)
setBacklight(1); // lowest non-off
}
return TRUE;
break;
case 1:
if ( disable_suspend > 1 && lightoff_on ) {
setBacklight(0); // off
}
return TRUE;
break;
case 2:
if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) {
QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
return TRUE;
}
break;
}
return FALSE;
}
};
static int ssi(int interval, Config &config, const QString &enable, const QString& value, int def)
{
if ( !enable.isEmpty() && config.readNumEntry(enable,0) == 0 )
return 0;
if ( interval < 0 ) {
// Restore screen blanking and power saving state
interval = config.readNumEntry( value, def );
}
return interval;
}
static void setScreenSaverIntervals(int i1, int i2, int i3)
{
Config config( "qpe" );
config.setGroup( "Screensaver" );
int v[4];
i1 = ssi(i1, config, "Dim","Interval_Dim", 30);
i2 = ssi(i2, config, "LightOff","Interval_LightOff", 20);
i3 = ssi(i3, config, "","Interval", 60);
//qDebug("screen saver intervals: %d %d %d", i1, i2, i3);
v[0] = QMAX( 1000*i1, 100);
v[1] = QMAX( 1000*i2, 100);
v[2] = QMAX( 1000*i3, 100);
v[3] = 0;
dim_on = ( (i1 != 0) ? config.readNumEntry("Dim",1) : FALSE );
lightoff_on = ( (i2 != 0 ) ? config.readNumEntry("LightOff",1) : FALSE );
if ( !i1 && !i2 && !i3 )
QWSServer::setScreenSaverInterval(0);
else
QWSServer::setScreenSaverIntervals(v);
}
static void setScreenSaverInterval(int interval)
{
setScreenSaverIntervals(-1,-1,interval);
}
/*!
\class QPEApplication qpeapplication.h
\brief The QPEApplication class implements various system services
that are available to all Qtopia applications.
Simply by using QPEApplication instead of QApplication, a plain Qt
application becomes a Qtopia application. It automatically follows
style changes, quits and raises, and in the
case of \link docwidget.html document-oriented\endlink applications,
changes the current displayed document in response to the environment.
*/
/*!
\fn void QPEApplication::clientMoused()
\internal
*/
/*!
\fn void QPEApplication::timeChanged();
This signal is emitted when the time jumps forward or backwards
by more than the normal passage of time.
*/
/*!
\fn void QPEApplication::clockChanged( bool ampm );
This signal is emitted when the user changes the style
of clock. If \a ampm is TRUE, the user wants a 12-hour
AM/PM close, otherwise, they want a 24-hour clock.
*/
/*!
\fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
This signal is emitted when a message is received on the
QPE/Application/<i>appname</i> QCop channel for this application.
The slot to which you connect this signal uses \a msg and \a data
in the following way:
\code
void MyWidget::receive( const QCString& msg, const QByteArray& data )
{
QDataStream stream( data, IO_ReadOnly );
if ( msg == "someMessage(int,int,int)" ) {
int a,b,c;
stream >> a >> b >> c;
...
} else if ( msg == "otherMessage(QString)" ) {
...
}
}
\endcode
\sa qcop.html
*/
/*!
Constructs a QPEApplication just as you would construct
a QApplication, passing \a argc, \a argv, and \a t.
*/
QPEApplication::QPEApplication( int& argc, char **argv, Type t )
: QApplication( hack(argc), argv, t )
{
int dw = desktop()->width();
if ( dw < 200 ) {
setFont( QFont( "helvetica", 8 ) );
AppLnk::setSmallIconSize(10);
AppLnk::setBigIconSize(28);
}
d = new QPEApplicationData;
QMimeSourceFactory::setDefaultFactory(new ResourceMimeFactory);
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(hideOrQuit()));
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
QString qcopfn("/tmp/qcop-msg-");
qcopfn += QString(argv[0]); // append command name
QFile f(qcopfn);
if ( f.open(IO_ReadOnly) ) {
flock(f.handle(), LOCK_EX);
}
sysChannel = new QCopChannel( "QPE/System", this );
connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)),
this, SLOT(systemMessage( const QCString &, const QByteArray &)) );
QCString channel = QCString(argv[0]);
channel.replace(QRegExp(".*/"),"");
d->appName = channel;
channel = "QPE/Application/" + channel;
pidChannel = new QCopChannel( channel, this);
connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
this, SLOT(pidMessage(const QCString &, const QByteArray &)));
if ( f.isOpen() ) {
d->keep_running = FALSE;
QDataStream ds(&f);
QCString channel, message;
QByteArray data;
while(!ds.atEnd()) {
ds >> channel >> message >> data;
d->enqueueQCop(channel,message,data);
}
flock(f.handle(), LOCK_UN);
f.close();
f.remove();
}
for (int a=0; a<argc; a++) {
if ( qstrcmp(argv[a],"-preload")==0 ) {
argv[a] = argv[a+1];
a++;
d->preloaded = TRUE;
argc-=1;
} else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
argv[a] = argv[a+1];
a++;
d->preloaded = TRUE;
d->forceshow = TRUE;
argc-=1;
}
}
/* overide stored arguments */
setArgs(argc, argv);
#endif
qwsSetDecoration( new QPEDecoration() );
#ifndef QT_NO_TRANSLATION
char *l = getenv( "LANG" );
QString lang;
if ( l ) {
lang = l;
/*
Config config("qpe");
config.setGroup( "Appearance" );
lang = config.readEntry( "Language", lang );
*/
QTranslator * trans = new QTranslator(this);
QString tfn = qpeDir()+"/i18n/"+lang+"/"+d->appName+".qm";
if ( trans->load( tfn ))
installTranslator( trans );
else
delete trans;
trans = new QTranslator(this);
tfn = qpeDir()+"/i18n/"+lang+"/libqpe.qm";
if ( trans->load( tfn ))
installTranslator( trans );
else
delete trans;
//###language/font hack; should look it up somewhere
if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
QFont fn = FontManager::unicodeFont( FontManager::Proportional );
setFont( fn );
}
}
#endif
applyStyle();
if ( type() == GuiServer ) {
setScreenSaverInterval(-1);
setVolume();
QWSServer::setScreenSaver(new QPEScreenSaver);
}
installEventFilter( this );
QPEMenuToolFocusManager::initialize();
#ifdef QT_NO_QWS_CURSOR
// if we have no cursor, probably don't want tooltips
QToolTip::setEnabled( FALSE );
#endif
}
static QPtrDict<void>* inputMethodDict=0;
static void createInputMethodDict()
{
if ( !inputMethodDict )
inputMethodDict = new QPtrDict<void>;
}
/*!
Returns the currently set hint to the system as to whether
\a w has any use for text input methods.
\sa setInputMethodHint()
*/
QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w )
{
if ( inputMethodDict && w )
return (InputMethodHint)(int)inputMethodDict->find(w);
return Normal;
}
/*!
\enum QPEApplication::InputMethodHint
\value Normal the application sometimes needs text input (the default).
\value AlwaysOff the application never needs text input.
\value AlwaysOn the application always needs text input.
*/
/*!
Hints to the system that \a w has use for text input methods
as specified by \a mode.
\sa inputMethodHint()
*/
void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode )
{
createInputMethodDict();
if ( mode == Normal ) {
inputMethodDict->remove(w);
} else {
inputMethodDict->insert(w,(void*)mode);
}
}
class HackDialog : public QDialog
{
public:
void acceptIt() { accept(); }
void rejectIt() { reject(); }
};
void QPEApplication::mapToDefaultAction( QWSKeyEvent *ke, int key )
{
// specialised actions for certain widgets. May want to
// add more stuff here.
if ( activePopupWidget() && activePopupWidget()->inherits( "QListBox" )
&& activePopupWidget()->parentWidget()
&& activePopupWidget()->parentWidget()->inherits( "QComboBox" ) )
key = Qt::Key_Return;
if ( activePopupWidget() && activePopupWidget()->inherits( "QPopupMenu" ) )
key = Qt::Key_Return;
ke->simpleData.keycode = key;
}
class HackWidget : public QWidget
{
public:
bool needsOk()
{ return (getWState() & WState_Reserved1 ); }
};
/*!
\internal
*/
bool QPEApplication::qwsEventFilter( QWSEvent *e )
{
if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
if ( qApp->type() != QApplication::GuiServer ) {
QCopEnvelope e("QPE/System", "notBusy(QString)" );
e << d->appName;
}
d->notbusysent=TRUE;
}
if ( type() == GuiServer ) {
switch ( e->type ) {
case QWSEvent::Mouse:
if ( e->asMouse()->simpleData.state && !QWidget::find(e->window()) )
emit clientMoused();
}
}
if ( e->type == QWSEvent::Key ) {
if ( d->kbgrabber == 1 )
return TRUE;
QWSKeyEvent *ke = (QWSKeyEvent *)e;
if ( ke->simpleData.keycode == Qt::Key_F33 ) {
// Use special "OK" key to press "OK" on top level widgets
QWidget *active = activeWindow();
QWidget *popup = 0;
if ( active && active->isPopup() ) {
popup = active;
active = active->parentWidget();
}
if ( active && (int)active->winId() == ke->simpleData.window &&
!active->testWFlags( WStyle_Customize|WType_Popup|WType_Desktop )) {
if ( ke->simpleData.is_press ) {
if ( popup )
popup->close();
if ( active->inherits( "QDialog" ) ) {
HackDialog *d = (HackDialog *)active;
d->acceptIt();
return TRUE;
} else if ( ((HackWidget *)active)->needsOk() ) {
QSignal s;
s.connect( active, SLOT( accept() ) );
s.activate();
} else {
// do the same as with the select key: Map to the default action of the widget:
mapToDefaultAction( ke, Qt::Key_Return );
}
}
}
} else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
// Use special "select" key to do whatever default action a widget has
mapToDefaultAction( ke, Qt::Key_Space );
} else if ( ke->simpleData.keycode == Qt::Key_Escape &&
ke->simpleData.is_press ) {
// Escape key closes app if focus on toplevel
QWidget *active = activeWindow();
if ( active && active->testWFlags( WType_TopLevel ) &&
(int)active->winId() == ke->simpleData.window &&
!active->testWFlags( WStyle_Dialog|WStyle_Customize|WType_Popup|WType_Desktop )) {
if ( active->inherits( "QDialog" ) ) {
HackDialog *d = (HackDialog *)active;
d->rejectIt();
return TRUE;
} else if ( strcmp( argv()[0], "embeddedkonsole") != 0 ) {
active->close();
}
}
}
#if QT_VERSION < 231
// Filter out the F4/Launcher key from apps
// ### The launcher key may not always be F4 on all devices
if ( ((QWSKeyEvent *)e)->simpleData.keycode == Qt::Key_F4 )
return TRUE;
#endif
}
if ( e->type == QWSEvent::Focus ) {
QWSFocusEvent *fe = (QWSFocusEvent*)e;
QWidget* nfw = QWidget::find(e->window());
if ( !fe->simpleData.get_focus ) {
QWidget *active = activeWindow();
while ( active && active->isPopup() ) {
active->close();
active = activeWindow();
}
if ( !nfw && d->kbgrabber == 2 ) {
ungrabKeyboard();
d->kbregrab = TRUE; // want kb back when we're active
}
} else {
// make sure our modal widget is ALWAYS on top
QWidget *topm = activeModalWidget();
if ( topm ) {
topm->raise();
}
if ( d->kbregrab ) {
grabKeyboard();
d->kbregrab = FALSE;
}
}
if ( fe->simpleData.get_focus && inputMethodDict ) {
InputMethodHint m = inputMethodHint( QWidget::find(e->window()) );
if ( m == AlwaysOff )
Global::hideInputMethod();
if ( m == AlwaysOn )
Global::showInputMethod();
}
}
return QApplication::qwsEventFilter( e );
}
/*!
Destroys the QPEApplication.
*/
QPEApplication::~QPEApplication()
{
ungrabKeyboard();
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
// Need to delete QCopChannels early, since the display will
// be gone by the time we get to ~QObject().
delete sysChannel;
delete pidChannel;
#endif
delete d;
}
/*!
- Returns <tt>$QPEDIR/</tt>.
+ Returns <tt>$OPIEDIR/</tt>.
*/
QString QPEApplication::qpeDir()
{
- const char *base = getenv( "QPEDIR" );
+ const char *base = getenv( "OPIEDIR" );
if ( base )
return QString( base ) + "/";
return QString( "../" );
}
/*!
Returns the user's current Document directory. There is a trailing "/".
*/
QString QPEApplication::documentDir()
{
const char *base = getenv( "HOME" );
if ( base )
return QString( base ) + "/Documents/";
return QString( "../Documents/" );
}
static int deforient=-1;
/*!
\internal
*/
int QPEApplication::defaultRotation()
{
if ( deforient < 0 ) {
QString d = getenv("QWS_DISPLAY");
if ( d.contains("Rot90") ) {
deforient = 90;
} else if ( d.contains("Rot180") ) {
deforient = 180;
} else if ( d.contains("Rot270") ) {
deforient = 270;
} else {
deforient=0;
}
}
return deforient;
}
/*!
\internal
*/
void QPEApplication::setDefaultRotation(int r)
{
if ( qApp->type() == GuiServer ) {
deforient = r;
setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(r).latin1(), 1);
} else {
QCopEnvelope("QPE/System", "setDefaultRotation(int)") << r;
}
}
/*!
\internal
*/
void QPEApplication::applyStyle()
{
Config config( "qpe" );
config.setGroup( "Appearance" );
// Widget style
QString style = config.readEntry( "Style", "Light" );
internalSetStyle( style );
// Colors
QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
QPalette pal( btncolor, bgcolor );
QString color = config.readEntry( "Highlight", "#800000" );
pal.setColor( QColorGroup::Highlight, QColor(color) );
color = config.readEntry( "HighlightedText", "#FFFFFF" );
pal.setColor( QColorGroup::HighlightedText, QColor(color) );
color = config.readEntry( "Text", "#000000" );
pal.setColor( QColorGroup::Text, QColor(color) );
color = config.readEntry( "ButtonText", "#000000" );
pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor(color) );
color = config.readEntry( "Base", "#FFFFFF" );
pal.setColor( QColorGroup::Base, QColor(color) );
pal.setColor( QPalette::Disabled, QColorGroup::Text,
pal.color(QPalette::Active, QColorGroup::Background).dark() );
setPalette( pal, TRUE );
}
void QPEApplication::systemMessage( const QCString &msg, const QByteArray &data)
{
#ifdef Q_WS_QWS
QDataStream stream( data, IO_ReadOnly );
if ( msg == "applyStyle()" ) {
applyStyle();
} else if ( msg == "setScreenSaverInterval(int)" ) {
if ( type() == GuiServer ) {
int time;
stream >> time;
setScreenSaverInterval(time);
}
} else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
if ( type() == GuiServer ) {
int t1,t2,t3;
stream >> t1 >> t2 >> t3;
setScreenSaverIntervals(t1,t2,t3);
}
} else if ( msg == "setBacklight(int)" ) {
if ( type() == GuiServer ) {
int bright;
stream >> bright;
setBacklight(bright);
}
} else if ( msg == "setDefaultRotation(int)" ) {
if ( type() == GuiServer ) {
int r;
stream >> r;
setDefaultRotation(r);
}
} else if ( msg == "shutdown()" ) {
if ( type() == GuiServer )
shutdown();
} else if ( msg == "quit()" ) {
if ( type() != GuiServer )
tryQuit();
} else if ( msg == "forceQuit()" ) {
if ( type() != GuiServer )
quit();
} else if ( msg == "restart()" ) {
if ( type() == GuiServer )
restart();
} else if ( msg == "grabKeyboard(QString)" ) {
QString who;
stream >> who;
if ( who.isEmpty() )
d->kbgrabber = 0;
else if ( who != d->appName )
d->kbgrabber = 1;
else
d->kbgrabber = 2;
} else if ( msg == "language(QString)" ) {
if ( type() == GuiServer ) {
QString l;
stream >> l;
QString cl = getenv("LANG");
if ( cl != l ) {
if ( l.isNull() )
unsetenv( "LANG" );
else
setenv( "LANG", l.latin1(), 1 );
restart();
}
}
} else if ( msg == "timeChange(QString)" ) {
QString t;
stream >> t;
if ( t.isNull() )
unsetenv( "TZ" );
else
setenv( "TZ", t.latin1(), 1 );
// emit the signal so everyone else knows...
emit timeChanged();
} else if ( msg == "execute(QString)" ) {
if ( type() == GuiServer ) {
QString t;
stream >> t;
Global::execute( t );
}
} else if ( msg == "execute(QString,QString)" ) {
if ( type() == GuiServer ) {
QString t,d;
stream >> t >> d;
Global::execute( t, d );
}
} else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
if ( type() == GuiServer ) {
QDateTime when;
QCString channel, message;
int data;
stream >> when >> channel >> message >> data;
AlarmServer::addAlarm( when, channel, message, data );
}
} else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
if ( type() == GuiServer ) {
QDateTime when;
QCString channel, message;
int data;
stream >> when >> channel >> message >> data;
AlarmServer::deleteAlarm( when, channel, message, data );
}
} else if ( msg == "clockChange(bool)" ) {
int tmp;
stream >> tmp;
emit clockChanged( tmp );
} else if ( msg == "weekChange(bool)" ) {
int tmp;
stream >> tmp;
emit weekChanged( tmp );
} else if ( msg == "setDateFormat(DateFormat)" ) {
DateFormat tmp;
stream >> tmp;
emit dateFormatChanged( tmp );
} else if ( msg == "setVolume(int,int)" ) {
int t,v;
stream >> t >> v;
setVolume(t,v);
emit volumeChanged( muted );
} else if ( msg == "volumeChange(bool)" ) {
stream >> muted;
setVolume();
emit volumeChanged( muted );
} else if ( msg == "setScreenSaverMode(int)" ) {
if ( type() == GuiServer ) {
int old = disable_suspend;
stream >> disable_suspend;
//qDebug("setScreenSaverMode(%d)", disable_suspend );
if ( disable_suspend > old )
setScreenSaverInterval( -1 );
}
}
#endif
}
/*!
\internal
*/
bool QPEApplication::raiseAppropriateWindow()
{
bool r=FALSE;
// ########## raise()ing main window should raise and set active
// ########## it and then all childen. This belongs in Qt/Embedded
QWidget *top = d->qpe_main_widget;
if ( !top ) top =mainWidget();
if ( top && d->keep_running ) {
if ( top->isVisible() )
r = TRUE;
#ifdef Q_WS_QWS
if ( !d->nomaximize )
top->showMaximized();
else
#endif
top->show();
top->raise();
top->setActiveWindow();
}
QWidget *topm = activeModalWidget();
if ( topm && topm != top ) {
topm->show();
topm->raise();
topm->setActiveWindow();
r = FALSE;
}
return r;
}
void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data)
{
#ifdef Q_WS_QWS
if ( msg == "quit()" ) {
tryQuit();
} else if ( msg == "quitIfInvisible()" ) {
if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
quit();
} else if ( msg == "close()" ) {
hideOrQuit();
} else if ( msg == "disablePreload()" ) {
d->preloaded = FALSE;
d->keep_running = TRUE;
/* so that quit will quit */
} else if ( msg == "enablePreload()" ) {
d->preloaded = TRUE;
d->keep_running = TRUE;
/* so next quit won't quit */
} else if ( msg == "raise()" ) {
d->keep_running = TRUE;
d->notbusysent = FALSE;
raiseAppropriateWindow();
} else if ( msg == "flush()" ) {
emit flush();
// we need to tell the desktop
QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
e << d->appName;
} else if ( msg == "reload()" ) {
emit reload();
} else if ( msg == "setDocument(QString)" ) {
d->keep_running = TRUE;
QDataStream stream( data, IO_ReadOnly );
QString doc;
stream >> doc;
QWidget *mw = mainWidget();
if ( !mw )
mw = d->qpe_main_widget;
if ( mw )
Global::setDocument( mw, doc );
} else if ( msg == "nextView()" ) {
if ( raiseAppropriateWindow() )
emit appMessage( msg, data);
} else {
emit appMessage( msg, data);
}
#endif
}
static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
{
/*
// This works but disable it for now until it is safe to apply
// What is does is scan the .desktop files of all the apps for
// the applnk that has the corresponding argv[0] as this program
// then it uses the name stored in the .desktop file as the caption
// for the main widget. This saves duplicating translations for
// the app name in the program and in the .desktop files.
AppLnkSet apps( appsPath );
QList<AppLnk> appsList = apps.children();
for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
if ( (*it)->exec() == appName ) {
mw->setCaption( (*it)->name() );
return TRUE;
}
}
*/
return FALSE;
}
/*!
Sets \a mw as the mainWidget() and shows it. For small windows,
consider passing TRUE for \a nomaximize rather than the default FALSE.
\sa showMainDocumentWidget()
*/
void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
{
setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" );
d->nomaximize = nomaximize;
d->qpe_main_widget = mw;
d->sendQCopQ();
if ( d->preloaded ) {
if(d->forceshow) {
#ifdef Q_WS_QWS
if ( !nomaximize )
mw->showMaximized();
else
#endif
mw->show();
}
} else if ( d->keep_running ) {
#ifdef Q_WS_QWS
if ( !nomaximize )
mw->showMaximized();
else
#endif
mw->show();
}
}
/*!
Sets \a mw as the mainWidget() and shows it. For small windows,
consider passing TRUE for \a nomaximize rather than the default FALSE.
This calls designates the application as
a \link docwidget.html document-oriented\endlink application.
The \a mw widget must have a slot: setDocument(const QString&).
\sa showMainWidget()
*/
void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
{
setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" );
if ( mw && argc() == 2 )
Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
d->nomaximize = nomaximize;
d->qpe_main_widget = mw;
d->sendQCopQ();
if ( d->preloaded ) {
if(d->forceshow) {
#ifdef Q_WS_QWS
if ( !nomaximize )
mw->showMaximized();
else
#endif
mw->show();
}
} else if ( d->keep_running ) {
#ifdef Q_WS_QWS
if ( !nomaximize )
mw->showMaximized();
else
#endif
mw->show();
}
}
/*!
Sets that the application should continue running after processing
qcop messages. Normally if an application is started via a qcop message,
the application will process the qcop message and then quit. If while
processing the qcop message it calls this function, then the application
will show and start proper once it has finished processing qcop messages.
\sa keepRunning()
*/
void QPEApplication::setKeepRunning()
{
if ( qApp && qApp->inherits( "QPEApplication" ) ) {
QPEApplication *qpeApp = (QPEApplication*)qApp;
qpeApp->d->keep_running = TRUE;
}
}
/*!
Returns whether the application will quit after processing the current
list of qcop messages.
\sa setKeepRunning()
*/
bool QPEApplication::keepRunning() const
{
return d->keep_running;
}
/*!
\internal
*/
void QPEApplication::internalSetStyle( const QString &style )
{
#if QT_VERSION >= 300
if ( style == "QPE" ) {
setStyle( new QPEStyle );
} else {
QStyle *s = QStyleFactory::create(style);
if ( s ) setStyle(s);
}
#else
if ( style == "Windows" ) {
setStyle( new QWindowsStyle );
} else if ( style == "QPE" ) {
setStyle( new QPEStyle );
} else if ( style == "Light" ) {
setStyle( new LightStyle );
}
#ifndef QT_NO_STYLE_PLATINUM
else if ( style == "Platinum" ) {
setStyle( new QPlatinumStyle );
}
#endif
#ifndef QT_NO_STYLE_MOTIF
else if ( style == "Motif" ) {
setStyle( new QMotifStyle );
}
#endif
#ifndef QT_NO_STYLE_MOTIFPLUS
else if ( style == "MotifPlus" ) {
setStyle( new QMotifPlusStyle );
}
#endif
#endif
}
/*!
\internal
*/
void QPEApplication::prepareForTermination(bool willrestart)
{
if ( willrestart ) {
// Draw a big wait icon, the image can be altered in later revisions
// QWidget *d = QApplication::desktop();
QImage img = Resource::loadImage( "wait" );
QPixmap pix;
pix.convertFromImage(img.smoothScale(3*img.width(), 3*img.height()));
QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize |
QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
lblWait->setPixmap( pix );
lblWait->setAlignment( QWidget::AlignCenter );
lblWait->show();
lblWait->showMaximized();
}
#ifndef SINGLE_APP
{ QCopEnvelope envelope("QPE/System", "forceQuit()"); }
processEvents(); // ensure the message goes out.
sleep(1); // You have 1 second to comply.
#endif
}
/*!
\internal
*/
void QPEApplication::shutdown()
{
// Implement in server's QPEApplication subclass
}
/*!
\internal
*/
void QPEApplication::restart()
{
// Implement in server's QPEApplication subclass
}
static QPtrDict<void>* stylusDict=0;
static void createDict()
{
if ( !stylusDict )
stylusDict = new QPtrDict<void>;
}
/*!
Returns the current StylusMode for \a w.
\sa setStylusOperation()
*/
QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
{
if ( stylusDict )
return (StylusMode)(int)stylusDict->find(w);
return LeftOnly;
}
/*!
\enum QPEApplication::StylusMode
\value LeftOnly the stylus only generates LeftButton
events (the default).
\value RightOnHold the stylus generates RightButton events
if the user uses the press-and-hold gesture.
See setStylusOperation().
*/
/*!
Causes \a w to receive mouse events according to \a mode.
\sa stylusOperation()
*/
void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode )
{
createDict();
if ( mode == LeftOnly ) {
stylusDict->remove(w);
w->removeEventFilter(qApp);
} else {
stylusDict->insert(w,(void*)mode);
connect(w,SIGNAL(destroyed()),qApp,SLOT(removeSenderFromStylusDict()));
w->installEventFilter(qApp);
}
}
/*!
\reimp
*/
bool QPEApplication::eventFilter( QObject *o, QEvent *e )
{
if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
QMouseEvent* me = (QMouseEvent*)e;
if ( me->button() == LeftButton ) {
StylusMode mode = (StylusMode)(int)stylusDict->find(o);
switch (mode) {
case RightOnHold:
switch ( me->type() ) {
case QEvent::MouseButtonPress:
d->presstimer = startTimer(500); // #### pref.
d->presswidget = (QWidget*)o;
d->presspos = me->pos();
d->rightpressed = FALSE;
break;
case QEvent::MouseButtonRelease:
if ( d->presstimer ) {
killTimer(d->presstimer);
d->presstimer = 0;
}
if ( d->rightpressed && d->presswidget ) {
// Right released
postEvent( d->presswidget,
new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
RightButton, LeftButton+RightButton ) );
// Left released, off-widget
postEvent( d->presswidget,
new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1),
LeftButton, LeftButton ) );
postEvent( d->presswidget,
new QMouseEvent( QEvent::MouseButtonRelease, QPoint(-1,-1),
LeftButton, LeftButton ) );
d->rightpressed = FALSE;
return TRUE; // don't send the real Left release
}
break;
default:
break;
}
break;
default:
;
}
}
} else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
QKeyEvent *ke = (QKeyEvent *)e;
if ( ke->key() == Key_Enter ) {
if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
return TRUE;
}
}
}
return FALSE;
}
/*!
\reimp
*/
void QPEApplication::timerEvent( QTimerEvent *e )
{
if ( e->timerId() == d->presstimer && d->presswidget ) {
// Right pressed
postEvent( d->presswidget,
new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
RightButton, LeftButton ) );
killTimer( d->presstimer );
d->presstimer = 0;
d->rightpressed = TRUE;
}
}
void QPEApplication::removeSenderFromStylusDict()
{
stylusDict->remove((void*)sender());
if ( d->presswidget == sender() )
d->presswidget = 0;
}
/*!
\internal
*/
bool QPEApplication::keyboardGrabbed() const
{
return d->kbgrabber;
}
/*!
Reverses the effect of grabKeyboard(). This is called automatically
on program exit.
*/
void QPEApplication::ungrabKeyboard()
{
QPEApplicationData* d = ((QPEApplication*)qApp)->d;
if ( d->kbgrabber == 2 ) {
QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
e << QString::null;
d->kbregrab = FALSE;
d->kbgrabber = 0;
}
}
/*!
Grabs the keyboard such that the system's application launching
keys no longer work, and instead they are receivable by this
application.
\sa ungrabKeyboard()
*/
void QPEApplication::grabKeyboard()
{
QPEApplicationData* d = ((QPEApplication*)qApp)->d;
if ( qApp->type() == QApplication::GuiServer )
d->kbgrabber = 0;
else {
QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
e << d->appName;
d->kbgrabber = 2; // me
}
}
/*!
\reimp
*/
int QPEApplication::exec()
{
d->sendQCopQ();
if ( d->keep_running)
//|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
return QApplication::exec();
{
QCopEnvelope e("QPE/System", "closing(QString)" );
e << d->appName;
}
processEvents();
return 0;
}
/*!
\internal
External request for application to quit. Quits if possible without
loosing state.
*/
void QPEApplication::tryQuit()
{
if ( activeModalWidget() || strcmp( argv()[0], "embeddedkonsole") == 0 )
return; // Inside modal loop or konsole. Too hard to save state.
{
QCopEnvelope e("QPE/System", "closing(QString)" );
e << d->appName;
}
processEvents();
quit();
}
/*!
\internal
User initiated quit. Makes the window 'Go Away'. If preloaded this means
hiding the window. If not it means quitting the application.
As this is user initiated we don't need to check state.
*/
void QPEApplication::hideOrQuit()
{
// notify of our demise :)
{
QCopEnvelope e("QPE/System", "closing(QString)" );
e << d->appName;
}
processEvents();
if ( d->preloaded && d->qpe_main_widget )
d->qpe_main_widget->hide();
else
quit();
}
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
// The libraries with the skiff package (and possibly others) have
// completely useless implementations of builtin new and delete that
// use about 50% of your CPU. Here we revert to the simple libc
// functions.
void* operator new[](size_t size)
{
return malloc(size);
}
void* operator new(size_t size)
{
return malloc(size);
}
void operator delete[](void* p)
{
free(p);
}
void operator delete[](void* p, size_t /*size*/)
{
free(p);
}
void operator delete(void* p)
{
free(p);