Browse Source

* Added kgtk-qt3

* Slight kpowersave message cleanup


git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kgtk-qt3@1173604 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
tags/v3.5.13
tpearson 9 years ago
commit
c6ca83d07d
60 changed files with 8408 additions and 0 deletions
  1. 1
    0
      AUTHORS
  2. 82
    0
      CMakeLists.txt
  3. 340
    0
      COPYING
  4. 198
    0
      ChangeLog
  5. 124
    0
      README
  6. 1
    0
      TODO
  7. 86
    0
      cmake/FindMsgfmt.cmake
  8. 237
    0
      common/common.h
  9. 311
    0
      common/connect.h
  10. 11
    0
      config.h.cmake
  11. 86
    0
      debian/cdbs/buildvars.mk
  12. 109
    0
      debian/cdbs/debian-qt-kde.mk
  13. 97
    0
      debian/cdbs/kde.mk
  14. 16
    0
      debian/cdbs/team-members
  15. 29
    0
      debian/cdbs/uploaders.mk
  16. 19
    0
      debian/cdbs/versions.pl
  17. 11
    0
      debian/changelog
  18. 1
    0
      debian/compat
  19. 19
    0
      debian/control
  20. 37
    0
      debian/copyright
  21. 30
    0
      debian/rules
  22. 9
    0
      debian/rules.bkp
  23. 22
    0
      gtk2/CMakeLists.txt
  24. 33
    0
      gtk2/kgtk2-wrapper.cmake
  25. 2005
    0
      gtk2/kgtk2.c
  26. 27
    0
      kdialogd-wrapper
  27. 17
    0
      kdialogd3/CMakeLists.txt
  28. 721
    0
      kdialogd3/kdialogd.cpp
  29. 145
    0
      kdialogd3/kdialogd.h
  30. 41
    0
      kdialogd3/po/CMakeLists.txt
  31. 63
    0
      kdialogd3/po/cs.po
  32. 62
    0
      kdialogd3/po/de.po
  33. 60
    0
      kdialogd3/po/en_GB.po
  34. 57
    0
      kdialogd3/po/es.po
  35. 60
    0
      kdialogd3/po/fr.po
  36. 58
    0
      kdialogd3/po/kdialogd3.pot
  37. 60
    0
      kdialogd3/po/pt_BR.po
  38. 62
    0
      kdialogd3/po/ru.po
  39. 60
    0
      kdialogd3/po/zh_CN.po
  40. 16
    0
      kdialogd4/CMakeLists.txt
  41. 759
    0
      kdialogd4/kdialogd.cpp
  42. 146
    0
      kdialogd4/kdialogd.h
  43. 41
    0
      kdialogd4/po/CMakeLists.txt
  44. 61
    0
      kdialogd4/po/cs.po
  45. 62
    0
      kdialogd4/po/de.po
  46. 60
    0
      kdialogd4/po/en_GB.po
  47. 56
    0
      kdialogd4/po/es.po
  48. 60
    0
      kdialogd4/po/fr.po
  49. 58
    0
      kdialogd4/po/kdialogd4.pot
  50. 60
    0
      kdialogd4/po/pt_BR.po
  51. 62
    0
      kdialogd4/po/ru.po
  52. 60
    0
      kdialogd4/po/zh_CN.po
  53. 103
    0
      kgtk-wrapper
  54. 23
    0
      mangled.sh
  55. 24
    0
      qt3/CMakeLists.txt
  56. 29
    0
      qt3/kqt3-wrapper.cmake
  57. 671
    0
      qt3/kqt3.cpp
  58. 22
    0
      qt4/CMakeLists.txt
  59. 29
    0
      qt4/kqt4-wrapper.cmake
  60. 599
    0
      qt4/kqt4.cpp

+ 1
- 0
AUTHORS View File

@@ -0,0 +1 @@
Craig Drummond <Craig.Drummond@lycos.co.uk>

+ 82
- 0
CMakeLists.txt View File

@@ -0,0 +1,82 @@
project(KGtk)
cmake_minimum_required(VERSION 2.4.0)

set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
set(CPACK_GENERATOR "TBZ2")
set(CPACK_SOURCE_GENERATOR "TBZ2")
set(CPACK_PACKAGE_VERSION_MAJOR "0")
set(CPACK_PACKAGE_VERSION_MINOR "10")
set(CPACK_PACKAGE_VERSION_PATCH "1")
set(KGTK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
set(KGTK_VERSION_FULL "${KGTK_VERSION}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${KGTK_VERSION_FULL}")
include(CPack)

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
include(CheckFunctionExists)
check_function_exists(getpeereid HAVE_GETPEEREID)

# Cant compile Qt3/KDE3 at the same time as Qt4/KDE4...
if ("${KGTK_KDE4}" MATCHES "true" OR "${KGTK_QT4}" MATCHES "true")
if (NOT "${KGTK_KDE3}" MATCHES "false" OR NOT "${KGTK_QT3}" MATCHES "false")
set(KGTK_KDE3 "false")
set(KGTK_QT3 "false")
message("** INFORMATION: Compiling Qt4/KDE4, Qt3/KDE3 disabled")
endif (NOT "${KGTK_KDE3}" MATCHES "false" OR NOT "${KGTK_QT3}" MATCHES "false")
endif ("${KGTK_KDE4}" MATCHES "true" OR "${KGTK_QT4}" MATCHES "true")

if (NOT "${KGTK_KDE3}" MATCHES "false")
add_subdirectory(kdialogd3)
endif (NOT "${KGTK_KDE3}" MATCHES "false")

if ("${KGTK_KDE4}" MATCHES "true")
add_subdirectory(kdialogd4)
# For some reason kdialogd4 does not install unless you cd into the kdialogd4 folder?
# ...hacky fix for this...
install(PROGRAMS ${CMAKE_BINARY_DIR}/kdialogd4/kdialogd4 DESTINATION bin)
endif ("${KGTK_KDE4}" MATCHES "true")

if (NOT "${KGTK_GTK2}" MATCHES "false")
# Check if we have dlvsym...
find_library(LIBDLVSYM_LIBRARY
NAMES dl
PATHS /lib /usr/lib /usr/X11R6/lib /usr/local/lib)

if(LIBDLVSYM_LIBRARY)
set(HAVE_DLVSYM 1)
# Determine version of dlsym...
find_library(LIBDL_LIBRARY
NAMES dl
PATHS /lib /usr/lib /usr/X11R6/lib /usr/local/lib)

if(LIBDL_LIBRARY)
execute_process(COMMAND objdump --dynamic-syms ${LIBDL_LIBRARY}
COMMAND grep dlsym
OUTPUT_VARIABLE DLSYM_DATA)
separate_arguments(DLSYM_DATA)
if (${CMAKE_MAJOR_VERSION} GREATER 2 OR ${CMAKE_MINOR_VERSION} GREATER 4)
cmake_policy(SET CMP0007 OLD)
endif (${CMAKE_MAJOR_VERSION} GREATER 2 OR ${CMAKE_MINOR_VERSION} GREATER 4)
list(GET DLSYM_DATA 4 KGTK_DLSYM_VERSION)
endif(LIBDL_LIBRARY)
else(LIBDLVSYM_LIBRARY)
message("** INFORMATION: You're libdl does not contain dlvsym - SWT apps will not be supported")
endif(LIBDLVSYM_LIBRARY)

add_subdirectory(gtk2)
endif (NOT "${KGTK_GTK2}" MATCHES "false")

if (NOT "${KGTK_QT3}" MATCHES "false")
add_subdirectory(qt3)
endif (NOT "${KGTK_QT3}" MATCHES "false")

if ("${KGTK_QT4}" MATCHES "true")
add_subdirectory(qt4)
endif ("${KGTK_QT4}" MATCHES "true")


install(PROGRAMS ${CMAKE_SOURCE_DIR}/kdialogd-wrapper DESTINATION bin)
install(PROGRAMS ${CMAKE_SOURCE_DIR}/kgtk-wrapper DESTINATION bin)

message("** INFORMATION: Using installation prefix: ${CMAKE_INSTALL_PREFIX}")
configure_file (config.h.cmake ${CMAKE_BINARY_DIR}/config.h)

+ 340
- 0
COPYING View File

@@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This program is free 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 2 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


Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.

<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

+ 198
- 0
ChangeLog View File

@@ -0,0 +1,198 @@
0.10.1
------
1. Fix 'kgtk-wrapper ./app' case.
2. Set filename for KdialogD4's save as filedialog.
3. Hacky fix for Firefox crashing when trying to save to a file that
already exists -> delete it first!
4. When launching KDialogD, try todetermin which version is installed.
5. Add some compile fixes from kde-apps

0.10
----
1. Fix CMake bug at double definition of destantion dir for gmo.
- thanks to Yar Odin.
2. When KDialogD is started, write its PID to a file. When each app
attempts to connect to KDialogD, it checks if the PID in the file
is still active - if not it starts KDialogD.
3. KIO::NetAccess::mostLocalUrl fails if a file does not exist. If so,
then check if parent folder exists - and if so, append filename to
that.

0.9.6
-----
1. Fix russion translation files - thanks to Yar Odin
2. Fix some CMake 2.6 issues.

0.9.5
-----
1. Fix detection of firefox. Treat xulrunner as Firefox.
2. Quick hack for kino - always save as .kino
3. Prevent dummy gtk window from appearing in KDE4's 'present windows'
window selector.
4. Translations:
Brazillian Portuguese (pt_BR) Márcio Moraes
Russion (ru) Yar Odin
5. Fix kdialogd4's file widget.
6. Fix kgtk-wrapper script for relative paths - thanks to Ingo Müller.
7. set G_BROKEN_FILENAMES=1 for non UTF8 locales.

0.9.4
-----
1. Translations:
Spanish (es) Marco Antonio Blanco <mablanco@activasistemas.com>
2. When saving with opera, show the suggested filename.

0.9.3
-----
1. Translations:
German (de) jakuhr-linux@gmx.de
Czech (cs) Marián Kyral <mkyral@email.cz>
2. Fix firefox crash when overwriting an existing file.

0.9.2
-----
1. Remove 'which gimp' from kgtk-wrapper - oops!
2. In kgtk-wrapper, set opera to use qt3
3. Fix opera crash.
4. Use GLib's convert function to convert to/from utf8, and
to/from URIs
5. Walk through Qt3's QFileDialog's children to locate combobox
containing filetypes, as opposed to using a copy of QFileDialogPrivate
6. Translations:
Simplified Chinese (zh_CN) Liang Qi <cavendish.qi@gmail.com>
French (fr) Paul Thomas <pw1517@gmail.com>
British English (en_GB) Me!
7. Implement over-riding of non statically called Qt4 QFileDialogs

0.9.1
-----
1. Use cmake as build system.
2. Fix recognition of gimp 2.4
3. Fix translation of standard kde strings.
4. Fix case where kgtk-wrapper is called via a symlink.

0.9
---
1. Fix dialog parenting issues with Gtk folder picker combo/menu.
2. Fix compilation issue for KDE < 3.4
3. Treat Iceweasel and Swiftfox the same as firefox.
4. Improve operation under beryl.
5. Add KDE4 and Qt4 support.
6. Reduce heavy CPU usage of kqt
7. Fix some i18n issues.
8. Place wrapper scripts into prefix/bin, and libraries into prefix/lib/kgtk
9. kgtk-wrapper can now be called for Gtk2, Qt3, nd Qt4 apps. The app is checked
to determin which toolkit it is using. If this check fails, you may edit
~/.kde/share/config/kgtkrc and add lines such as

[Apps]
eclipse=gtk2
scribus=qt3
abiword=x

Setting "abiword=x" disables kgtk for abiword (as it doesnt work!)

0.8
---
1. Install scripts into $prefix/bin as opposed to hard-coding
/usr/local/bin
2. Debug messages are disabled by default, to enable reconfigure
with --enable-debug-messages
3. Work correctly for autopackage'd apps - e.g. Inkscape 0.44
4. Fix inkscape 0.44's export bitmap file dialog appearing underneath
export dialog.
5. Convert kdialogd to a KDE app. This app is started by Gtk/Qt apps,
and will self terminate 30 seconds after the last connected app
has disconnected. This timeout can be changed by editing kdialogdrc
and changing

[General]
Timeout=10

6. Libraries installed to $KDEPREFIX/share/apps/kgtk
7. Remove .sh extension from scripts
8. When starting kdialogd, create the socket folder if it does not
already exist.

**NOTE** You *MUST* remove any previous version of KGtk before using this
version. i.e. you must delete the kded_kdialgd.la, kded_kdialgd.so, and the
kdialogd.desktop files. KDE also must be restarted - to remove the KDED
module.

0.7
---
1. Bug fix in wrapper scripts, use "$@" and not $* - thanks to
Victor Fernandez Martinez
2. Fix sending of UTF-8 characters from KDED module to app.

0.6
-----
1. Check for existance $KDETMP, or $TMPDIR when creating socket.
2. Use UTF-8 when talking to KDED module.

0.5.1
-----
1. Compile fixes - 64bit, Gtk<2.6

0.5
---
1. Make the KDED module a load-on-demand module, as opposed to always being
loaded. Module can be unloaded with:

dcop kded kded unloadModule kdialogd

2. Filters should now work for inkscape save - at least in inkscape 0.43
3. Add ./configure check to ensure Gtk >= 2.4
4. Added a ./configure check for dlvsym within libdl, if not found then
dlsym is not overriden - and SWT aps wont work :-(
5. In ./configure try to determine version of dlsym.
6. Try to load gtk_file_chooser_set/get_do_overwrite_confirmation's
from libgtk - if found then use, otherwise assume Gtk app will
do overwrite detection.
7. Correctly handle empty selection in single-file open mode.
8. Fix initial dir of non-statically called QFileDialogs
9. Modify Scribus's save file filters to have a "Compressed Documents" entry
-- will break localisation of scribus :-(

0.4
---
1. Support non-statically called QFileDialogs
2. Fix compilation under KDE <3.5
3. Save/restore PATH in wrapper scripts.
4. Now works with eclipse 3.1 (and all SWT apps? Seems to also work with
Azureus)
5. At start up Gtk app passes its name to KDialogD so that dialog settings
can be saved per-app.
6. Remove patterns from filter combo strings - more KDE like.

** NOTE: After installing v0.4, KDE (or at least kded) *must* be restarted -
due to changes in the communication off apps -> kdialogd.

0.3
---
1. Don't show Gtk file-overwrite dialogs, handle the file exists case within
KDE portion.
2. Fix retrieval/display of file filters.
3. Check for accessing of non-local URLs before dialog is closed.

0.2.2
-----
1. Remove kgtk-wrapper.sh and kqt-wrapper.sh shell scripts from archive -
these should've been generated at make time. Hopefully they will now.

0.2.1
-----
1. Fix qt compile issues.

0.2
---
1. Convert kdialogd into a kded module.
2. Make gtk library a LD_PRELOAD library
3. Add a Qt library
4. Try to convert KURL's into local files
5. When performing a save as, etc, correctly set the current filename and path.
6. Remove font and colour dialog support

0.1
---
1. Initial version.

+ 124
- 0
README View File

@@ -0,0 +1,124 @@
Introduction
------------

KGtk is a quick-n-dirty hack to allow some Gtk2, Qt3, and Qt4
applications to use KDE3 or KDE4 file dialogs.

KGtk is composed of the following pieces:

1. An application called kdialogd. In this archive there are
two varieties of this - a KDE3 version, and a KDE4 version.
2. LD_PRELOAD libraries that are used to override the Gtk2, Qt3,
and Qt4 file dialogs.

If you start an application using the following command:
kgtk-wrapper gimp

...the the following occurs:

1. kgtk-wrapper determines whether the application is a Gtk2, Qt3,
or Qt4 application. It then sets the LD_PRELOAD environment
variable to point to the approriate KGtk library.
2. When the application now starts, it checks for the
KDE_SESSION_VERSION environment variable. If this is not set,
or is less than 4, then the KDE3 version of kdialogd is started,
else the KDE4 version is started.
3. When 'gimp' now tries to open a file dialog, the KGtk library
intercepts this, and asks kdialogd to open a file dialog instead.

There will only ever be one instance of kdialogd, and all apps communicate with the same
instance - and it termiantes itself 30 seconds after the last Gtk/Qt app has
disconnected. This timeout can be changed by editing kdialogdrc and setting/changing

[General]
Timeout=10


Installation
------------
As of v0.9.1, kgtk uses CMake in place of autotools.

Because KGtk includes code for Qt3/KDE3 and Qt4/KDE4, you need
to specify when building which variants you would like to build.
This is accomplished as follows:

1. mkdir build
2. cd build
3. cmake .. -DCMAKE_INSTALL_PREFIX=/usr
4. make
5. sudo make install

* -DKGTK_KDE3=true instructs CMake to create makefiles for the KDE3
version of KDialogD. Defaults to "true", use -DKGTK_KDE3=false
to turn off. Turning this on, sets -DKGTK_KDE4=false and
-DKGTK_QT4=false

* -DKGTK_KDE4=true would instruct CMake to create makefiles for
the KDE4 version of KDialogD. Defaults to "false".

* -DKGTK_GTK2=true instructs CMake to create makefiles for the Gtk2
version of the LD_PRELOAD library. Defaults to "true", use
-DKGTK_GTK2=false to turn off.

* -DKGTK_QT3=true instructs CMake to create makefiles for the Qt3
version of the LD_PRELOAD library. Defaults to "true", use
-DKGTK_QT3=false to turn off. Turning this on, sets
-DKGTK_KDE4=false and -DKGTK_QT4=false

* -DKGTK_QT4=true instructs CMake to create makefiles for the Qt4
version of the LD_PRELOAD library. Defaults to "false".

* For 64 bit systems, also append -DLIB_SUFFIX=64

Mixing '-DKGTK_KDE3=true' and '-DKGTK_KDE4=true' wont work, so compile the Qt3/KDE3,
and Qt4/KDE4 variants separately. Also, the 'build' folder *must* be cleaned before
switching to/from Qt3/KDE3 from/to Qt4/KDE4


So, to compile everything I suggest the following:

1. mkdir build3
2. cd build3
3. cmake .. -DCMAKE_INSTALL_PREFIX=/usr
[ This will build KDialogD for KDE3, and create the LD_PRELOAD libraries for
Qt3 and Gtk2 ]
4. make
5. sudo make install

6. set up Qt4/KDE4 env variables
7. clean build folder

8. mkdir build4
9. cd build4
10. cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DKGTK_KDE4=true -DKGTK_QT4=true -DKGTK_GTK2=false
11. make
12. sudo make install

NOTE: If you have both KDE3 and KDE4 installed, when calling cmake for KDE3, set KDEDIR to be empty.
e.g.
KDEDIR= cmake -DCMAKE_INSTALL_PREFIX=/usr -DKGTK_KDE4=false -DKGTK_QT4=false

Notes
-----

The library has been tested with the following applications:

Reported to work:

1. Firefox (1.5.x only, not 1.0.x)
2. Inkscape
3. GIMP
4. Kino
5. Eclipse
6. Azureus
7. Galde-2
8. Streamtuner
9. Avidemux2
10. Scribus
11. QComcBook
12. Planner 0.14: works, but asks twice for open file

Reported *not* working:

1. AbiWord


+ 1
- 0
TODO View File

@@ -0,0 +1 @@
KDE4: File dialog history

+ 86
- 0
cmake/FindMsgfmt.cmake View File

@@ -0,0 +1,86 @@
#
# - Try to find the msgfmt executeable
#
# It will set the following variables:
#
# MSGFMT_FOUND
# MSGFMT_EXECUTABLE
#
###################################################################
#
# Copyright (c) 2006, Andreas Schneider <mail@cynapses.org>
#
# This program is free 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 2
# 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., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
###################################################################
#
# Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
# 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.
#
# * Neither the name of the cmake-modules nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# 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 OWNER 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.
#

IF (MSGFMT_EXECUTABLE)
# in cache alread?
SET(MSGFMT_FOUND TRUE)
ELSE (MSGFMT_EXECUTABLE)
IF (UNIX)
FIND_PROGRAM(MSGFMT_EXECUTABLE
NAMES
msgfmt
PATHS
/usr/bin
/usr/local/bin
)

IF(MSGFMT_EXECUTABLE)
SET(MSGFMT_FOUND TRUE)
ELSE(MSGFMT_EXECUTABLE)
MESSAGE(FATAL_ERROR "msgfmt not found - po files can't be processed")
ENDIF(MSGFMT_EXECUTABLE)

MARK_AS_ADVANCED(MSGFMT_EXECUTABLE)
ENDIF(UNIX)
ENDIF (MSGFMT_EXECUTABLE)

# vim:et ts=2 sw=2 comments=\:\#

+ 237
- 0
common/common.h View File

@@ -0,0 +1,237 @@
#ifndef __COMMON_H__
#define __COMMON_H__

#define KDIALOGD_APP

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
#include "config.h"

#ifdef __KDIALOGD_H__
#include <kstandarddirs.h>
#endif

typedef enum
{
OP_NULL = 0,
OP_FILE_OPEN = 1,
OP_FILE_OPEN_MULTIPLE = 2,
OP_FILE_SAVE = 3,
OP_FOLDER = 4
} Operation;

#define PID_DIR "kde-"
#define PID_NAME "kdialogd.pid"

static const char * getPidFileName()
{
static char *pidfile=NULL;

if(!pidfile)
{
char *user=getenv("USER");

if(!user)
user=getenv("LOGNAME");

if(user)
{
char *tmp=getenv("KDETMP");

if(!tmp || !tmp[0])
tmp=getenv("TMPDIR");

if(!tmp || !tmp[0])
tmp=(char *)"/tmp";

pidfile=(char *)malloc(strlen(tmp)+strlen(PID_DIR)+strlen(user)+strlen(PID_NAME)+1);
pidfile=(char *)malloc(strlen(tmp)+strlen("/")+strlen(PID_DIR)+strlen(user)+strlen("/")+strlen(PID_NAME)+1);

#ifdef __KDIALOGD_H__
// We are kdialogd - so create socket folder if it does not exist...
sprintf(pidfile, "%s/%s%s", tmp, PID_DIR, user);
KStandardDirs::makeDir(QString::fromAscii(pidfile));
#endif

/* CPD: TODO get dispaly number! */
sprintf(pidfile, "%s/%s%s/%s", tmp, PID_DIR, user, PID_NAME);
}
}

return pidfile;
}

#define SOCK_DIR "ksocket-"
#define SOCK_NAME "kdialogd"

static const char * getSockName()
{
static char *sock=NULL;

if(!sock)
{
char *user=getenv("USER");

if(!user)
user=getenv("LOGNAME");

if(user)
{
char *tmp=getenv("KDETMP");

if(!tmp || !tmp[0])
tmp=getenv("TMPDIR");

if(!tmp || !tmp[0])
tmp=(char *)"/tmp";

sock=(char *)malloc(strlen(tmp)+strlen("/")+strlen(SOCK_DIR)+strlen(user)+strlen("/")+strlen(SOCK_NAME)+strlen("18446744073709551616")+1);

#ifdef __KDIALOGD_H__
// We are kdialogd - so create socket folder if it does not exist...
sprintf(sock, "%s/%s%s", tmp, SOCK_DIR, user);
KStandardDirs::makeDir(QString::fromAscii(sock));
#endif

/* CPD: TODO get dispaly number! */
sprintf(sock, "%s/%s%s/%s-%d", tmp, SOCK_DIR, user, SOCK_NAME, 1);
}
}

return sock;
}

static int readBlock(int fd, char* pData, int size)
{
int bytesToRead=size;

do
{
fd_set fdSet;

FD_ZERO(&fdSet);
FD_SET(fd, &fdSet);

if(select(fd + 1, &fdSet, NULL, NULL, NULL)<0)
return 0;

if(FD_ISSET(fd, &fdSet))
{
int bytesRead=read(fd, &pData[size-bytesToRead], bytesToRead);

if (bytesRead>0)
bytesToRead-=bytesRead;
else
return 0;
}
}
while(bytesToRead>0);

return 1;
}

static int writeBlock(int fd, const char *pData, int size)
{
int bytesToWrite=size;

do
{
fd_set fdSet;

FD_ZERO(&fdSet);
FD_SET(fd, &fdSet);

if(select(fd + 1, NULL, &fdSet, NULL, NULL)<0)
return 0;

if(FD_ISSET(fd, &fdSet))
{
int bytesWritten=write(fd, (char *)&pData[size-bytesToWrite], bytesToWrite);

if (bytesWritten>0)
bytesToWrite-=bytesWritten;
else
return 0;
}
}
while(bytesToWrite>0);

return 1;
}

#ifdef KDIALOGD_APP
/*
So that kdailogd can terminate when the last app exits, need a way of synchronising the Gtk/Qt
apps that may wish to connect, and the removal of the socket.

To this en, a lockfile is created,and used to guard around the critical sections
*/
static int lockFd=-1;

#define LOCK_EXT ".lock"

const char * getLockName()
{
static char *lockName=NULL;

if(!lockName)
{
const char *sock=getSockName();

if(sock)
{
lockName=(char *)malloc(strlen(sock)+strlen(LOCK_EXT)+1);
sprintf(lockName, "%s%s", sock, LOCK_EXT);
}
}

return lockName;
}

/* Lock is stale if it does not exist or is older than 2 seconds */
static int isStale(const char *fname)
{
struct stat stat_buf;

return 0!=stat(fname, &stat_buf) ||
abs(stat_buf.st_mtime-time(NULL))>2;
}

static int grabLock(int tries)
{
do
{
lockFd=open(getLockName(), O_WRONLY | O_CREAT | O_EXCL, 0777);
if (lockFd<0 && errno==EEXIST)
{
/* Hmm, lock file already exists. Is it stale? */
if(isStale(getLockName()))
{
tries++; /* Increment tries so that we try again... */
unlink(getLockName());
}
else if(tries)
usleep(100000);
}
}
while(lockFd<0 && --tries);

return lockFd;
}

static void releaseLock()
{
if(lockFd>0)
{
close(lockFd);
unlink(getLockName());
}
}
#endif

#endif

+ 311
- 0
common/connect.h View File

@@ -0,0 +1,311 @@
#ifndef __CONNECT_H__
#define __CONNECT_H__

#include <string.h>
#include <errno.h>
#include <signal.h>
#include <sys/wait.h>
#include "config.h"
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/stat.h>

#ifndef SUN_LEN
#define SUN_LEN(ptr) ((socklen_t) (((struct sockaddr_un *) 0)->sun_path) \
+ strlen ((ptr)->sun_path))
#endif

#include "common.h"
#include "config.h"

#ifdef __cplusplus
typedef bool kgtk_bool;
#define KGTK_TRUE true
#define KGTK_FALSE false
#else
typedef gboolean kgtk_bool;
#define KGTK_TRUE TRUE
#define KGTK_FALSE FALSE
#endif


static int kdialogdSocket=-1;

/* From kdelibs/kdesu */
#ifdef KDIALOGD_APP
static int createSocketConnectionReal()
#else
static int createSocketConnection()
#endif
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection A\n");
#endif
int sockfd=-1;
const char *sock=getSockName();
struct sockaddr_un addr;

if (access(sock, R_OK|W_OK))
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - Could not access socket, %s\n", sock);
#endif
return -1;
}

sockfd = socket(PF_UNIX, SOCK_STREAM, 0);
if (sockfd < 0)
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - Could not create socket, %d\n", errno);
#endif
return -1;
}
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, sock);

if (connect(sockfd, (struct sockaddr *) &addr, SUN_LEN(&addr)) < 0)
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - Could not connect socket, %d\n", errno);
#endif
close(sockfd);
return -1;
}

#if !defined(SO_PEERCRED) || !defined(HAVE_STRUCT_UCRED)
# if defined(HAVE_GETPEEREID)
{
uid_t euid;
gid_t egid;
/* Security: if socket exists, we must own it */
if (getpeereid(sockfd, &euid, &egid) == 0)
{
if (euid != getuid())
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - socket not owned by me! socket uid %d\n", euid);
#endif
close(sockfd);
return -1;
}
}
}
# else
# ifdef __GNUC__
# warning "Using sloppy security checks"
# endif
/* We check the owner of the socket after we have connected.
If the socket was somehow not ours an attacker will be able
to delete it after we connect but shouldn't be able to
create a socket that is owned by us. */
{
struct stat s;
if (lstat(sock, &s)!=0)
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - stat failed %s\n", sock);
#endif
close(sockfd);
return -1;
}
if (s.st_uid != getuid())
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - socket not owned by me! socket uid %d\n", s.st_uid);
#endif
close(sockfd);
return -1;
}
if (!S_ISSOCK(s.st_mode))
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - socket is not a socket %s\n", sock);
#endif
close(sockfd);
return -1;
}
}
# endif
#else
{
struct ucred cred;
socklen_t siz = sizeof(cred);

/* Security: if socket exists, we must own it */
if (getsockopt(sockfd, SOL_SOCKET, SO_PEERCRED, &cred, &siz) == 0)
{
if (cred.uid != getuid())
{
#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - socket not owned by me! socket uid %d\n", cred.uid);
#endif
close(sockfd);
return -1;
}
}
}
#endif

#ifdef KGTK_DEBUG
printf("KGTK::createSocketConnection - sockfd:%d\n", sockfd);
#endif
return sockfd;
}

#ifdef KDIALOGD_APP
static int createSocketConnection()
{
int rv=-1,
tries=0;

do
{
if(-1==(rv=createSocketConnectionReal()))
usleep(10000);
}
while(-1==rv && ++tries<50);

if(-1==rv)
fprintf(stderr, "ERROR: Could not talk to KDialogD!!!\n");
return rv;
}
#endif

static int kdialogdPid=-1;

static kgtk_bool processIsRunning()
{
#ifdef KGTK_DEBUG
printf("KGTK::processIsRunning\n");
#endif

if(-1!=kdialogdPid && 0==kill(kdialogdPid, 0))
{
#ifdef KGTK_DEBUG
printf("KGTK::processIsRunning (%d) YES\n", kdialogdPid);
#endif
return KGTK_TRUE;
}
else
{
FILE *f=fopen(getPidFileName(), "r");

if(f)
{
int pid=0;

if(1==fscanf(f, "%d", &pid))
{
fclose(f);

if(-1!=kdialogdPid && kdialogdPid!=pid)
{
#ifdef KGTK_DEBUG
printf("KGTK::processIsRunning pid has changed from:%d to %d - need to reconnect\n", kdialogdPid, pid);
#endif
kdialogdPid=pid;
return KGTK_FALSE;
}
#ifdef KGTK_DEBUG
printf("KGTK::processIsRunning file has pid:%d\n", pid);
#endif
if(0==kill(pid, 0))
{
#ifdef KGTK_DEBUG
printf("KGTK::processIsRunning (file:%d) YES\n", pid);
#endif
kdialogdPid=pid;
return KGTK_TRUE;
}

kdialogdPid=-1; /* Process is not running! */
}
}
}
#ifdef KGTK_DEBUG
printf("KGTK::processIsRunning NO\n");
#endif
return KGTK_FALSE;
}

static void closeConnection()
{
#ifdef KGTK_DEBUG
printf("KGTK::closeConnection\n");
#endif
close(kdialogdSocket);
kdialogdSocket=-1;
}

/* Note: Calling 'fork' seems to mess things up with eclipse! */
#define KGTK_USE_SYSTEM_CALL

static kgtk_bool connectToKDialogD(const char *appName)
{
#ifdef KGTK_DEBUG
printf("KGTK::connectToKDialogD %s\n", appName ? appName : "<null>");
#endif
if(!processIsRunning())
closeConnection();

if(-1!=kdialogdSocket)
return KGTK_TRUE;
else
{
unsigned int slen=strlen(appName);
kgtk_bool rv=KGTK_TRUE;

if(slen)
slen++;

#ifdef KGTK_DEBUG
printf("KGTK::connectToKDialogD - start wrapper\n");
#endif

#ifdef KDIALOGD_APP
grabLock(5);
#ifdef KGTK_USE_SYSTEM_CALL
system("kdialogd-wrapper &");
#else
switch(fork())
{
case -1:
rv=KGTK_FALSE;
printf("ERROR: Could not start fork :-(\n");
break;
case 0:
execl(KDIALOGD_LOCATION"/kdialogd-wrapper", "kdialogd-wrapper", (char *)NULL);
break;
default:
{
int status=0;
wait(&status);
}
}
#endif
releaseLock();
#endif

if(!rv)
return rv;

rv=
#ifdef KDIALOGD_APP
grabLock(3)>0 &&
#else
0==system("dcop kded kded loadModule kdialogd") &&
#endif
-1!=(kdialogdSocket=createSocketConnection()) &&
writeBlock(kdialogdSocket, (char *)&slen, 4) &&
(0==slen || writeBlock(kdialogdSocket, appName, slen));
#ifdef KDIALOGD_APP
releaseLock();
#endif
return rv;
}
}

#endif

+ 11
- 0
config.h.cmake View File

@@ -0,0 +1,11 @@
/* Define to 1 if you have the `getpeereid' function. */
#cmakedefine HAVE_GETPEEREID 1

/* Define if you have the struct ucred */
#cmakedefine HAVE_STRUCT_UCRED 1
#cmakedefine HAVE_DLVSYM 1

#define VERSION "@KGTK_VERSION_FULL@"

#define KGTK_DLSYM_VERSION "@KGTK_DLSYM_VERSION@"


+ 86
- 0
debian/cdbs/buildvars.mk View File

@@ -0,0 +1,86 @@
# -*- mode: makefile; coding: utf-8 -*-
# Copyright © 2002,2003 Colin Walters <walters@debian.org>
# Description: Defines some useful variables, but no rules
#
# This program is free 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 2, 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.

_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
_cdbs_class_path ?= /usr/share/cdbs/1/class

ifndef _cdbs_rules_buildvars
_cdbs_rules_buildvars = 1

CDBS_VERSION = something

# Common useful variables
DEB_SOURCE_PACKAGE := $(strip $(shell egrep '^Source: ' debian/control | cut -f 2 -d ':'))
DEB_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
DEB_NOEPOCH_VERSION := $(shell echo $(DEB_VERSION) | cut -d: -f2-)
DEB_UPSTREAM_VERSION := $(shell echo $(DEB_NOEPOCH_VERSION) | sed 's/-[^-]*$$//')
DEB_ISNATIVE := $(shell dpkg-parsechangelog | egrep '^Version:' | perl -ne 'print if not /^Version:\s*.*-/;')

# Split into arch/indep packages
ifneq ($(DEB_INDEP_PACKAGES),cdbs)
DEB_INDEP_PACKAGES := $(filter-out $(DONT_BUILD), $(strip $(shell $(_cdbs_scripts_path)/list-packages indep)))
DEB_ARCH_PACKAGES := $(filter-out $(DONT_BUILD), $(filter-out $(DEB_INDEP_PACKAGES),$(strip $(shell $(_cdbs_scripts_path)/list-packages same))))
endif
# Split into normal and udeb packages
ifeq ($(DEB_UDEB_PACKAGES),)
DEB_PACKAGES = $(filter-out $(DONT_BUILD), $(filter-out %-udeb, $(DEB_ARCH_PACKAGES) $(DEB_INDEP_PACKAGES)))
DEB_UDEB_PACKAGES = $(filter-out $(DONT_BUILD),$(filter %-udeb, $(DEB_ARCH_PACKAGES) $(DEB_INDEP_PACKAGES)))
else
DEB_PACKAGES = $(filter-out $(DONT_BUILD), $(filter-out $(DEB_UDEB_PACKAGES), $(DEB_ARCH_PACKAGES) $(DEB_INDEP_PACKAGES)))
endif
# Too much bother for now. If someone complains we'll fix it.
#DEB_ARCH_UDEB_PACKAGES = $(filter %-udeb, $(DEB_ARCH_PACKAGES))
#DEB_INDEP_UDEB_PACKAGES = $(filter %-udeb, $(DEB_INDEP_PACKAGES))
# A handy list of every package, udeb or not
DEB_ALL_PACKAGES = $(filter-out $(DONT_BUILD),$(DEB_PACKAGES) $(DEB_UDEB_PACKAGES))
DEB_INDEP_REGULAR_PACKAGES = $(filter-out $(DONT_BUILD), $(filter-out $(DEB_UDEB_PACKAGES),$(DEB_INDEP_PACKAGES)))
DEB_ARCH_REGULAR_PACKAGES = $(filter-out $(DONT_BUILD), $(filter-out $(DEB_UDEB_PACKAGES),$(DEB_ARCH_PACKAGES)))

DEB_DBG_PACKAGES = $(filter-out $(DONT_BUILD), $(filter %-dbg, $(DEB_ARCH_PACKAGES) $(DEB_INDEP_PACKAGES)))

# Some support for srcdir != builddir builds.
# These are relative to the root of the package
DEB_SRCDIR ?= .
DEB_BUILDDIR ?= $(strip $(DEB_SRCDIR))

# Miscellaneous bits
DEB_ARCH = $(shell dpkg --print-architecture)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_HOST_GNU_SYSTEM ?= $(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM)
DEB_HOST_GNU_CPU ?= $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_BUILD_GNU_SYSTEM ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_SYSTEM)
DEB_BUILD_GNU_CPU ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_CPU)
DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB_BUILD_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_CPU)
DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS)

ifeq ($(words $(DEB_ALL_PACKAGES)),1)
DEB_DESTDIR = $(CURDIR)/debian/$(strip $(DEB_ALL_PACKAGES))/
else
DEB_DESTDIR = $(CURDIR)/debian/tmp/
endif

CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), cdbs (>= 0.4.23-1.1)

endif

+ 109
- 0
debian/cdbs/debian-qt-kde.mk View File

@@ -0,0 +1,109 @@
ifndef _cdbs_bootstrap
_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
_cdbs_class_path ?= /usr/share/cdbs/1/class
endif

ifndef _cdbs_class_debian-qt-kde
_cdbs_class_debian-qt-kde := 1

# Note: This _must_ be included before autotools.mk, or it won't work.
common-configure-arch common-configure-indep:: debian/stamp-cvs-make
debian/stamp-cvs-make:
cp -Rp /usr/share/aclocal/libtool.m4 admin/libtool.m4.in
cp -Rp /usr/share/libtool/config/ltmain.sh admin/ltmain.sh
$(MAKE) -C $(DEB_SRCDIR) -f admin/Makefile.common dist;
touch debian/stamp-cvs-make

include debian/cdbs/kde.mk$(_cdbs_makefile_suffix)
include debian/cdbs/uploaders.mk

DEB_PATCHDIRS := debian/patches/common debian/patches

DEB_KDE_ENABLE_FINAL := yes
DEB_INSTALL_DOCS_ALL :=

DEB_DH_MAKESHLIBS_ARGS_ALL := -V
DEB_SHLIBDEPS_INCLUDE = $(foreach p,$(PACKAGES_WITH_LIBS),debian/$(p)/usr/lib)

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
cdbs_treat_me_gently_arches := arm m68k alpha ppc64 armel armeb
ifeq (,$(filter $(DEB_HOST_ARCH_CPU),$(cdbs_treat_me_gently_arches)))
cdbs_kde_enable_final = $(if $(DEB_KDE_ENABLE_FINAL),--enable-final,)
else
cdbs_kde_enable_final =
endif
endif

common-build-arch:: debian/stamp-man-pages
debian/stamp-man-pages:
if ! test -d debian/man/out; then mkdir -p debian/man/out; fi
for f in $$(find debian/man -name '*.sgml'); do \
docbook-to-man $$f > debian/man/out/`basename $$f .sgml`.1; \
done
for f in $$(find debian/man -name '*.man'); do \
soelim -I debian/man $$f \
> debian/man/out/`basename $$f .man`.`head -n1 $$f | awk '{print $$NF}'`; \
done
touch debian/stamp-man-pages

common-binary-indep::
( set -e; \
tmpf=`mktemp debian/versions.XXXXXX`; \
perl debian/cdbs/versions.pl >$$tmpf; \
for p in $(DEB_INDEP_PACKAGES); do \
cat $$tmpf >>debian/$$p.substvars; \
done; \
rm -f $$tmpf )

common-binary-arch::
( set -e; \
tmpf=`mktemp debian/versions.XXXXXX`; \
perl debian/cdbs/versions.pl >$$tmpf; \
for p in $(DEB_ARCH_PACKAGES); do \
cat $$tmpf >>debian/$$p.substvars; \
done; \
rm -f $$tmpf )

clean::
rm -rf debian/man/out
-rmdir debian/man
rm -f debian/stamp-man-pages
rm -rf debian/shlibs-check

$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%:
if test -x /usr/bin/dh_desktop; then dh_desktop -p$(cdbs_curpkg) $(DEB_DH_DESKTOP_ARGS); fi
if test -e debian/$(cdbs_curpkg).lintian; then \
install -p -D -m644 debian/$(cdbs_curpkg).lintian \
debian/$(cdbs_curpkg)/usr/share/lintian/overrides/$(cdbs_curpkg); \
fi
if test -e debian/$(cdbs_curpkg).presubj; then \
install -p -D -m644 debian/$(cdbs_curpkg).presubj \
debian/$(cdbs_curpkg)/usr/share/bug/$(cdbs_curpkg)/presubj; \
fi

binary-install/$(DEB_SOURCE_PACKAGE)-doc-html::
set -e; \
for doc in `cd $(DEB_DESTDIR)/opt/kde3/share/doc/kde/HTML/en; find . -name index.docbook`; do \
pkg=$${doc%/index.docbook}; pkg=$${pkg#./}; \
echo Building $$pkg HTML docs...; \
mkdir -p $(CURDIR)/debian/$(DEB_SOURCE_PACKAGE)-doc-html/opt/kde3/share/doc/kde/HTML/en/$$pkg; \
cd $(CURDIR)/debian/$(DEB_SOURCE_PACKAGE)-doc-html/opt/kde3/share/doc/kde/HTML/en/$$pkg; \
/opt/kde3/bin/meinproc $(DEB_DESTDIR)/opt/kde3/share/doc/kde/HTML/en/$$pkg/index.docbook; \
done
for pkg in $(DOC_HTML_PRUNE) ; do \
rm -rf debian/$(DEB_SOURCE_PACKAGE)-doc-html/opt/kde3/share/doc/kde/HTML/en/$$pkg; \
done

clean::
if test -n "$(DEB_KDE_CVS_MAKE)" && test -d $(DEB_SRCDIR); then \
cd $(DEB_SRCDIR); \
find . -name Makefile.in -print | \
xargs --no-run-if-empty rm -f; \
rm -f Makefile.am acinclude.m4 aclocal.m4 config.h.in \
configure configure.files configure.in stamp-h.in \
subdirs; \
fi
rm -f debian/stamp-cvs-make

endif

+ 97
- 0
debian/cdbs/kde.mk View File

@@ -0,0 +1,97 @@
# -*- mode: makefile; coding: utf-8 -*-
# Copyright © 2003 Christopher L Cheney <ccheney@debian.org>
# Description: A class for KDE packages; sets KDE environment variables, etc
#
# This program is free 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 2, 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.

_cdbs_scripts_path ?= /usr/lib/cdbs
_cdbs_rules_path ?= /usr/share/cdbs/1/rules
_cdbs_class_path ?= /usr/share/cdbs/1/class

ifndef _cdbs_class_kde
_cdbs_class_kde := 1

# for dh_icons
CDBS_BUILD_DEPENDS := $(CDBS_BUILD_DEPENDS), debhelper (>= 5.0.7ubuntu4)

include $(_cdbs_rules_path)/buildcore.mk$(_cdbs_makefile_suffix)

ifdef _cdbs_tarball_dir
DEB_BUILDDIR = $(_cdbs_tarball_dir)/obj-$(DEB_BUILD_GNU_TYPE)
else
DEB_BUILDDIR = obj-$(DEB_BUILD_GNU_TYPE)
endif

include $(_cdbs_class_path)/autotools.mk$(_cdbs_makefile_suffix)

export kde_cgidir = \$${libdir}/cgi-bin
export kde_confdir = \$${sysconfdir}/kde3
export kde_htmldir = \$${datadir}/doc/kde/HTML

ifeq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
cdbs_kde_enable_final = $(if $(DEB_KDE_ENABLE_FINAL),--enable-final,)
endif

ifneq (,$(filter nostrip,$(DEB_BUILD_OPTIONS)))
cdbs_kde_enable_final =
cdbs_kde_enable_debug = --enable-debug=yes
else
cdbs_kde_enable_debug = --disable-debug
endif

ifneq (,$(filter debug,$(DEB_BUILD_OPTIONS)))
cdbs_kde_enable_debug = --enable-debug=full
endif

cdbs_configure_flags += --with-qt-dir=/usr/share/qt3 --disable-rpath --with-xinerama $(cdbs_kde_enable_final) $(cdbs_kde_enable_debug)

DEB_AC_AUX_DIR = $(DEB_SRCDIR)/admin
DEB_CONFIGURE_INCLUDEDIR = "\$${prefix}/include/kde"
DEB_COMPRESS_EXCLUDE = .dcl .docbook -license .tag .sty .el

$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%:
if test -x /usr/bin/dh_icons; then dh_icons -p$(cdbs_curpkg) $(DEB_DH_ICONCACHE_ARGS); fi

cleanbuilddir::
-$(if $(call cdbs_streq,$(DEB_BUILDDIR),$(DEB_SRCDIR)),,rm -rf $(DEB_BUILDDIR))

common-build-arch common-build-indep:: debian/stamp-kde-apidox
debian/stamp-kde-apidox:
$(if $(DEB_KDE_APIDOX),+$(DEB_MAKE_INVOKE) apidox)
touch $@

common-install-prehook-impl::
mkdir -p po
-XGETTEXT=/usr/bin/kde-xgettext EXTRACTATTR=/opt/kde3/bin/extractattr sh $(DEB_SRCDIR)/admin/cvs.sh extract-messages
-for file in po/*pot; do \
sed "s/charset=CHARSET/charset=UTF-8/" -i $$file; \
done

common-install-arch common-install-indep:: common-install-kde-apidox
common-install-kde-apidox::
$(if $(DEB_KDE_APIDOX),+$(DEB_MAKE_INVOKE) install-apidox DESTDIR=$(DEB_DESTDIR))

clean::
rm -f debian/stamp-kde-apidox
rm -rf po/*.pot

# This is a convenience target for calling manually. It's not part of
# the build process.
buildprep: clean apply-patches
$(MAKE) -f admin/Makefile.common dist
debian/rules clean

endif

+ 16
- 0
debian/cdbs/team-members View File

@@ -0,0 +1,16 @@
Sune Vuorela <debian@pusling.com>
Ana Beatriz Guerrero Lopez <ana@debian.org>
Fathi Boudra <fboudra@free.fr>
Modestas Vainius <geromanas@mailas.com>
Josh Metzler <joshdeb@metzlers.org>
Isaac Clerencia <isaac@debian.org>
Adeodato Simó <dato@net.com.org.es>
Adeodato Simo <dato@net.com.org.es>
Christopher Martin <chrsmrtn@debian.org>
Daniel Schepler <schepler@debian.org>
Sarah Hobbs <hobbsee@ubuntu.com>
Nacho Barrientos Arias <nacho@debian.org>
Ricardo Javier Cardenes Medina <rcardenes@debian.org>
Ricardo Cardenes <rcardenes@debian.org>
Armin Berres <trigger+debian@space-based.de>
Francesco Pedrini <francesco.pedrini@gmail.com>

+ 29
- 0
debian/cdbs/uploaders.mk View File

@@ -0,0 +1,29 @@

MAINTAINER=Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
UPLOADERS=$(shell grep -e +++ -e "^ -- " debian/changelog | grep -v "debian-qt-kde@lists.debian.org" | head -13 | /bin/sed 's/^\s*//;s/\s*$$//;s/^+++\? Changes by //;s/^+++\? //;s/-- //;s/:$$//;s/ <.*//' | sort -u | while read line ; do grep "$$line" debian/cdbs/team-members ; done | tr "\n" ", " | sed 's/,/, /g;s/, $$//')


debian/control.tmp:
@if [ ! -e debian/control.in ] ; then \
echo "this package is not yet prepared for using automatic update of uploaders"; \
echo "Please do so."; \
exit 1; \
fi
@sed 's/@@@UPLOADERS@@@/$(UPLOADERS)/;s#@@@MAINTAINER@@@#$(MAINTAINER)#' debian/control.in > debian/control.tmp

check-uploaders: debian/control.tmp
@if ! diff -q debian/control debian/control.tmp ; then \
echo "WARNING:: Control file differs from manually generated one" ; \
echo "WARNING:: Please update it manually and check it afterwards" ; \
echo "WARNING:: Uploaders are updated by debian/rules update-uploaders" ;\
echo "WARNING:: If this is a binNMU, NMU or security upload, just ignore" ;\
fi

clean::
rm -f debian/control.tmp

update-uploaders: debian/control.tmp
@mv -f debian/control.tmp debian/control

makebuilddir:: check-uploaders

+ 19
- 0
debian/cdbs/versions.pl View File

@@ -0,0 +1,19 @@
#!/usr/bin/env perl

use strict;
use warnings;

my $version = `dpkg-parsechangelog | awk '/^Version/ {print \$2}'`;
my ($version3, $version3_next);
my ($version2, $version2_next);

($version3 = $version) =~ s/-[^-]+$//;
($version2 = $version3) =~ s/\.[^.]+$//;

($version3_next = $version3) =~ s/(?<=\.)(\d+)[a-z]?$/($1+1)/e;
($version2_next = $version2) =~ s/(?<=\.)(\d+)$/($1+1)/e;

print "KDE-Version3=$version3\n";
print "KDE-Version2=$version2\n";
print "KDE-Next-Version3=$version3_next\n";
print "KDE-Next-Version2=$version2_next\n";

+ 11
- 0
debian/changelog View File

@@ -0,0 +1,11 @@
kgtk-qt3-kde3 (0.10.2-0ubuntu5) maverick; urgency=low

* Maverick build

-- Timothy Pearson <kb9vqf@pearsoncomputing.net> Mon, 05 Apr 2010 13:20:00 -0600

kgtk-qt3 (0.10.1-0ubuntu1~ppa1) jaunty; urgency=low

* Initial release

-- Anthony Mercatante <tonio@ubuntu.com> Mon, 17 Mar 2009 01:24:08 +0100

+ 1
- 0
debian/compat View File

@@ -0,0 +1 @@
7

+ 19
- 0
debian/control View File

@@ -0,0 +1,19 @@
Source: kgtk-qt3-kde3
Section: kde
Priority: optional
Maintainer: Timothy Pearson <kb9vqf@pearsoncomputing.net>
Build-Depends: debhelper (>= 7), cdbs, kdelibs4-kde3-dev, libgtk2.0-dev, libqt3-mt-dev, cmake
Standards-Version: 3.8.3
Homepage: http://kde-apps.org/content/show.php/KGtk+(Use+KDE+Dialogs+in+Gtk+Apps)?content=36077

Package: kgtk-qt3-kde3
Architecture: any
Depends: ${shlibs:Depends}
Description: Use KDE dialogs in Gtk apps
This is a quick-and-dirty LD_PRELOAD hack that allows *some* Gtk
applications to use KDE's file dialogs when run under KDE.
.
The Gtk file chooser functions have been overridden to communicate
with this KDE module/application.
.
This package includes the kqt3-wrapper

+ 37
- 0
debian/copyright View File

@@ -0,0 +1,37 @@
This package was debianized by:

Anthony Mercatante <tonio@ubuntu.com>

It was downloaded from:

http://kde-apps.org/content/show.php/KGtk+(Use+KDE+Dialogs+in+Gtk+Apps)?content=36077

Upstream Authors:

Craig Drummond <Craig.Drummond@lycos.co.uk>

Copyright:
Copyright (C) Craig Drummond, 2006-2007

License:
This program is free 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 2 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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL-2'.

The Debian packaging is:

Copyright C) 2009, Anthony Mercatante <tonio@ubuntu.com>
and is licensed under the GPL-2, see above.

+ 30
- 0
debian/rules View File

@@ -0,0 +1,30 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk

DEB_CONFIGURE_INCLUDEDIR := /opt/kde3/include/kde
DEB_CONFIGURE_MANDIR := /opt/kde3/share/man
DEB_CONFIGURE_PREFIX := /opt/kde3
DEB_CONFIGURE_INFODIR := /opt/kde3/share/info
DEB_CMAKE_CUSTOM_FLAGS := -DKGTK_KDE3=true -DKGTK_QT3=true

cdbs_configure_flags := --with-qt-dir=/usr/share/qt3 --disable-rpath --with-xinerama $(cdbs_kde_enable_final) $(cdbs_kde_enable_debug)

DEB_CONFIGURE_EXTRA_FLAGS := --prefix=/opt/kde3 --with-extra-libs=/opt/kde3/lib

configure/kgtk-qt3-kde3::
env PATH=/opt/kde3/bin:$(PATH) CMAKE_LIBRARY_PATH=/opt/kde3/lib CMAKE_INCLUDE_PATH=/opt/kde3/include/kde cmake -D CMAKE_INSTALL_PREFIX=/opt/kde3 .

build/kgtk-qt3-kde3::
env PATH=/opt/kde3/bin:$(PATH) CMAKE_LIBRARY_PATH=/opt/kde3/lib CMAKE_INCLUDE_PATH=/opt/kde3/include/kde $(MAKE)

install/kgtk-qt3-kde3::
env PATH=/opt/kde3/bin:$(PATH) CMAKE_LIBRARY_PATH=/opt/kde3/lib CMAKE_INCLUDE_PATH=/opt/kde3/include/kde $(MAKE) install DESTDIR=$(CURDIR)/debian/kgtk-qt3-kde3


+ 9
- 0
debian/rules.bkp View File

@@ -0,0 +1,9 @@
#!/usr/bin/make -f

DEB_CMAKE_CUSTOM_FLAGS := -DKGTK_KDE3=true -DKGTK_QT3=true

include debian/cdbs/kde.mk

binary-install/kgtk-qt3::
rm -f debian/kgtk-qt3/usr/bin/kdialogd-wrapper
rm -f debian/kgtk-qt3/usr/bin/kgtk-wrapper

+ 22
- 0
gtk2/CMakeLists.txt View File

@@ -0,0 +1,22 @@
include(FindPkgConfig)

pkg_check_modules(GTK gtk+-2.0>=2.6)

if (GTK_FOUND)
message("** INFORMATION: Gtk2 LD_PRELOAD library will be built.")

# set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib${LIB_SUFFIX})" FORCE)

include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/common ${CMAKE_BINARY_DIR} ${GTK_INCLUDE_DIRS})
set(kgtk2_SRCS kgtk2.c)
add_library(kgtk2 SHARED ${kgtk2_SRCS})
target_link_libraries(kgtk2 ${GTK_LDFLAGS} -lgthread-2.0 -lglib-2.0 -lc -ldl)

install(TARGETS kgtk2 LIBRARY DESTINATION ${LIB_INSTALL_DIR}/kgtk )

configure_file (kgtk2-wrapper.cmake ${CMAKE_CURRENT_BINARY_DIR}/kgtk2-wrapper @ONLY)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/kgtk2-wrapper DESTINATION bin)
else (GTK_FOUND)
message("** ERROR : Could not locate Gtk2 headers, Gtk2 LD_PRELOAD library will not be built.")
endif (GTK_FOUND)

+ 33
- 0
gtk2/kgtk2-wrapper.cmake View File

@@ -0,0 +1,33 @@
#!/bin/bash

#
# This script is part of the KGtk package.
#
# (C) Craig Drummond, 2007
#
# Craig.Drummond@lycos.co.uk
#
# --
# Released under the GPL v2 or later
# --
#

if [ "`locale | grep 'LANG=' | grep -i 'utf-8' | wc -l`" = "0" ] ; then
export G_BROKEN_FILENAMES=1
fi

app=`basename $0`

if [ "$app" = "kgtk2-wrapper" ] ; then
LD_PRELOAD=@CMAKE_INSTALL_PREFIX@/lib/kgtk/libkgtk2.so:$LD_PRELOAD "$@"
else
dir=`dirname $0`
oldPath=$PATH
PATH=`echo $PATH | sed s:$dir::g`
real=`which $app`
PATH=$oldPath

if [ "$real" != "" ] && [ "`dirname $real`" != "$dir" ] ; then
LD_PRELOAD=@CMAKE_INSTALL_PREFIX@/lib@LIB_SUFFIX@/kgtk/libkgtk2.so:$LD_PRELOAD $real "$@"
fi
fi

+ 2005
- 0
gtk2/kgtk2.c
File diff suppressed because it is too large
View File


+ 27
- 0
kdialogd-wrapper View File

@@ -0,0 +1,27 @@
#!/bin/bash

#
# This script is part of the KGtk package.
#
# (C) Craig Drummond, 2007
#
# Craig.Drummond@lycos.co.uk
#
# --
# Released under the GPL v2 or later
# --
#
# Wrapper script for kdialogd that removes any LD_PRELOAD. This stops
# KDialogD from trying to connect to itself!
#

LD_PRELOAD=

for app in $prefer kdialogd4 kdialogd3 ; do
which $app > /dev/null
if [ $? -eq 0 ] ; then
$app
break;
fi
done


+ 17
- 0
kdialogd3/CMakeLists.txt View File

@@ -0,0 +1,17 @@
set(QT_MT_REQUIRED TRUE)
find_package(KDE3)
find_package(Qt3)

if (KDE3_INCLUDE_DIR)
message("** INFORMATION: KDialogD for KDE3 will be built.")
link_directories(${KDE3_LIB_DIR})
include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/common ${CMAKE_BINARY_DIR} ${KDE3_INCLUDE_DIR} ${QT_INCLUDE_DIR})
set(kdialogd3_SRCS kdialogd.cpp)
kde3_automoc(${kdialogd3_SRCS})
add_executable(kdialogd3 ${kdialogd3_SRCS})
target_link_libraries(kdialogd3 kdeui kio kdecore)
install_targets(/bin kdialogd3)
add_subdirectory(po)
else (KDE3_INCLUDE_DIR)
message("** ERROR : Could not locate Qt3/KDE3 headers, KDialogD for KDE3 will not be built.")
endif (KDE3_INCLUDE_DIR)

+ 721
- 0
kdialogd3/kdialogd.cpp View File

@@ -0,0 +1,721 @@
//#define USE_KWIN

#include "kdialogd.h"
#include <iostream>
#include <kdiroperator.h>
#include <kuniqueapplication.h>
#include <qsocketnotifier.h>
#include <kio/netaccess.h>
#include <kmessagebox.h>
#include <klocale.h>
#include <kconfig.h>
#include <kurlcombobox.h>
#ifdef USE_KWIN
#include <kwin.h>
#else
#include <X11/Xlib.h>
#endif
#include <sys/un.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/errno.h>
#include <ksockaddr.h>
#include <kdebug.h>
#include <kdeversion.h>
#include <qtimer.h>
#ifdef KDIALOGD_APP
#include <kcmdlineargs.h>
#include <kaboutdata.h>
#endif
#include <fstream>

KConfig *KDialogD::theirConfig=NULL;

#define CFG_KEY_DIALOG_SIZE "KDialogDSize"
#define CFG_TIMEOUT_GROUP "General"
#ifdef KDIALOGD_APP
#define CFG_TIMEOUT_KEY "Timeout"
#define DEFAULT_TIMEOUT 30
#endif

static QString groupName(const QString &app, bool fileDialog=true)
{
return QString(fileDialog ? "KFileDialog " : "KDirSelectDialog ")+app;
}

// from kdebase/kdesu
static int createSocket()
{
int sockitsFd;
ksocklen_t addrlen;
struct stat s;
const char *sock=getSockName();
int stat_err=lstat(sock, &s);

if(!stat_err && S_ISLNK(s.st_mode))
{
kdWarning() << "Someone is running a symlink attack on you" << endl;
if(unlink(sock))
{
kdWarning() << "Could not delete symlink" << endl;
return -1;
}
}

if (!access(sock, R_OK|W_OK))
{
kdWarning() << "stale socket exists" << endl;
if (unlink(sock))
{
kdWarning() << "Could not delete stale socket" << endl;
return -1;
}
}

sockitsFd = socket(PF_UNIX, SOCK_STREAM, 0);
if (sockitsFd < 0)
{
kdError() << "socket(): " << errno << endl;
return -1;
}

struct sockaddr_un addr;
addr.sun_family = AF_UNIX;
strncpy(addr.sun_path, sock, sizeof(addr.sun_path)-1);
addr.sun_path[sizeof(addr.sun_path)-1] = '\000';
addrlen = SUN_LEN(&addr);
if (bind(sockitsFd, (struct sockaddr *)&addr, addrlen) < 0)
{
kdError() << "bind(): " << errno << endl;
return -1;
}

struct linger lin;
lin.l_onoff = lin.l_linger = 0;