Sign in Join
Wiki copytemporary

GTK2 Interface: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-[![GTK logo.svg](https://upload.wikimedia.org/wikipedia/commons/thumb/7/71/GTK_logo.svg/50px-GTK_logo.svg.png)](</File:GTK_logo.svg>)
2-
3-This article applies to [GTK+ Widgetsets](</Category:GTK_Widgetsets> "Category:GTK Widgetsets") only.
4-
5-See also: [[Multiplatform Programming Guide]]
6-
7-│ **English (en)** │
8-****
9-
10-## Contents
11-
12- * 1 Introduction
13- * 2 Other Interfaces
14- * 2.1 Platform specific Tips
15- * 2.2 Interface Development Articles
16- * 3 Road map for the gtk2 interface
17- * 4 Quick start guide for Linux, FreeBSD, etc
18- * 4.1 Ubuntu Unity liboverlay
19- * 4.2 Ubuntu Unity Menuproxy
20- * 4.3 Raspberry Pi OS
21- * 5 Using the GTK2 interface under macOS
22- * 5.1 Installing X11
23- * 5.2 Installing GTK2-Lazarus with fink
24- * 5.3 Installing gtk using MacPorts
25- * 5.4 Using the GTK2 libraries included with Gimp
26- * 6 Using the Gtk2 interface under Microsoft Windows
27- * 6.1 Getting the needed Gtk2 libraries
28- * 6.2 Standalone Application under Windows
29- * 6.3 Themes
30- * 6.4 A sample project
31- * 7 Current issues
32- * 7.1 Editor Options allows to select incompatible fonts
33- * 7.2 Moving with keys in the OI sometimes does not move the edit field
34- * 7.3 Destroying handle during OnKeyDown gives AV
35- * 7.4 Z-Order of controls
36- * 7.5 Open Dialog Options
37- * 7.6 TScrollBox and Scrolling problems
38- * 7.7 Shortcut keys
39- * 7.8 Up/Down key navigation between TEdits
40- * 8 Done issues
41- * 8.1 Done: ~~Synedit is very slow~~
42- * 8.2 Done: ~~Small TButton does not center text~~
43- * 8.3 Done: ~~TOpenPictureDialog does not update the preview~~
44- * 8.4 Done: ~~Only the main form appears in the window list~~
45- * 8.5 Done: ~~Slow and visible resizing when creating/resizing a dialog~~
46- * 8.6 Done: ~~Selecting a TPage in the designer gives the wrong bounds rectangle~~
47- * 8.7 Done: ~~Sometimes the hint window of the component palette is not resized~~
48- * 8.8 Done: ~~gtk criticals in IDE codetools options dialog~~
49- * 8.9 Done: System Colors
50- * 9 Gtk1/Gtk2 separation roadmap
51- * 10 Profiling
1+*(GTK+ only)*
522
533## Introduction
544
55-The gtk2 widgetset is stable and all components work. And it needs optimizations.
56-
57-The documentation can be found [here](<http://www.gtk.org/>).
58-
59-The minimum Gtk 2 version supported is Gtk 2.8
60-
61-## Other Interfaces
62-
63- * [[Lazarus known issues \(things that will never be fixed\|Lazarus known issues (things that will never be fixed)]]> "Lazarus known issues \(things that will never be fixed\)") \- A list of interface compatibility issues
64- * [[Win32/64 Interface]] \- The Windows API (formerly Win32 API) interface for Windows 95/98/Me/2000/XP/Vista/10, but not CE
65- * [[Windows CE Interface]] \- For Pocket PC and Smartphones
66- * [[Carbon Interface]] \- The Carbon 32 bit interface for macOS (deprecated; removed from macOS 10.15)
67- * [[Cocoa Interface]] \- The Cocoa 64 bit interface for macOS
68- * [[Qt Interface]] \- The Qt4 interface for Unixes, macOS, Windows, and Linux-based PDAs
69- * [[Qt5 Interface]] \- The Qt5 interface for Unixes, macOS, Windows, and Linux-based PDAs
70- * [[GTK1 Interface]] \- The gtk1 interface for Unixes, macOS (X11), Windows
71- * GTK2 Interface \- The gtk2 interface for Unixes, macOS (X11), Windows
72- * [[GTK3 Interface]] \- The gtk3 interface for Unixes, macOS (X11), Windows
73- * [[fpGUI Interface]] \- Based on the fpGUI library, which is a cross-platform toolkit completely written in Object Pascal
74- * [[Custom Drawn Interface]] \- A cross-platform LCL backend written completely in Object Pascal inside Lazarus. The Lazarus interface to Android.
75-
76-### Platform specific Tips
77-
78- * [[Android Programming]] \- For Android smartphones and tablets
79- * [[iPhone/iPod development]] \- About using Objective Pascal to develop iOS applications
80- * [[FreeBSD Programming Tips]] \- FreeBSD programming tips
81- * [[Linux Programming Tips]] \- How to execute particular programming tasks in Linux
82- * [[macOS Programming Tips]] \- Lazarus tips, useful tools, Unix commands, and more...
83- * [[WinCE Programming Tips]] \- Using the telephone API, sending SMSes, and more...
84- * [[Windows Programming Tips]] \- Desktop Windows programming tips
5+The gtk2 widgetset is stable and all components work. And it needs optimizations.
856
86-### Interface Development Articles
7+The documentation can be found [here](http://www.gtk.org/).
878
88- * [[Carbon interface internals]] \- If you want to help improving the Carbon interface
89- * [[Windows CE Development Notes]] \- For Pocket PC and Smartphones
90- * [[Adding a new interface]] \- How to add a new widget set interface
91- * [[LCL Defines]] \- Choosing the right options to recompile LCL
92- * [[LCL Internals]] \- Some info about the inner workings of the LCL
93- * [[Cocoa Internals]] \- Some info about the inner workings of the Cocoa widgetset
9+The minimum Gtk 2 version supported is Gtk 2.8
9410
9511## Road map for the gtk2 interface
9612
9713Here: [[Roadmap|Roadmap#Widgetset_dependent_components]]
9814
9915## Quick start guide for Linux, FreeBSD, etc
10016
101-The first thing to do is to install the gtk2 libraries including the development packages. For example: linux/debian systems call them libgtk2.0-dev. There are complete installers for Windows [here](<http://www.gtk.org/>).
17+The first thing to do is to install the gtk2 libraries including the development packages. For example: linux/debian systems call them libgtk2.0-dev. There are complete installers for Windows [here](http://www.gtk.org/).
10218
103-The gtk2 is the default widgetset, so it should work out of the box.
19+The gtk2 is the default widgetset, so it should work out of the box.
10420
105-You can compile the LCL for gtk2. First open your normal compiled Lazarus. Then go on the menu "Tools" --> "Configure Build Lazarus". Set LCL to "clean+build" and everything else to "None". Now select "gtk2" and click on the "Ok" button. Next go to the menu "Tools" --> "Build Lazarus". Now the LCL is compiled for gtk2 too.
21+You can compile the LCL for gtk2. First open your normal compiled Lazarus. Then go on the menu "Tools" --\> "Configure Build Lazarus". Set LCL to "clean+build" and everything else to "None". Now select "gtk2" and click on the "Ok" button. Next go to the menu "Tools" --\> "Build Lazarus". Now the LCL is compiled for gtk2 too.
10622
107-To compile a project for gtk2 just select it as the target widgetset on the Compiler Options dialog.
23+To compile a project for gtk2 just select it as the target widgetset on the Compiler Options dialog.
10824
10925### Ubuntu Unity liboverlay
11026
111-The Ubuntu's Unity LIBOVERLAY override breaks the gtk_grab_add function, so mouse capturing does not work in synedit, treeview and many more LCL controls that descend from TCustomControl. That means dragging or selecting text with the mouse does not work.
27+The Ubuntu's Unity LIBOVERLAY override breaks the gtk_grab_add function, so mouse capturing does not work in synedit, treeview and many more LCL controls that descend from TCustomControl. That means dragging or selecting text with the mouse does not work.
11228
113-This is true for many applications, which is why liboverlay has an internal list to disable itself for many famous applications (e.g. gimp).
29+This is true for many applications, which is why liboverlay has an internal list to disable itself for many famous applications (e.g. gimp).
11430
115-That's why the gtk2 interface of the LCL disables liboverlay by default. You can enable it by compiling the LCL with -dEnableLibOverlay.
31+That's why the gtk2 interface of the LCL disables liboverlay by default. You can enable it by compiling the LCL with -dEnableLibOverlay.
11632
117-If it is enabled: The LCL will write a warning with [[DebugLn]] if it spots liboverlay.
33+If it is enabled: The LCL will write a warning with [[DebugLn]] if it spots liboverlay.
11834
119-To disable liboverlay for a single application set the environment variable LIBOVERLAY_SCROLLBAR to '0' *before* starting the application. There is no way to disable liboverlay when the application is already running. For example:
120-```
121-LIBOVERLAY_SCROLLBAR=0 ./lazarus
122-```
35+To disable liboverlay for a single application set the environment variable LIBOVERLAY_SCROLLBAR to '0' *before* starting the application. There is no way to disable liboverlay when the application is already running. For example:
12336
124-You can disable it on a whole machine by uninstalling the package "liboverlay-scrollbar-0.2-0".
37+`LIBOVERLAY_SCROLLBAR=0 ./lazarus`
12538
126-The IDE starter "startlazarus" sets this variable before starting the IDE (since 1.0). startlazarus is called for example when you use the desktop menu item.
39+You can disable it on a whole machine by uninstalling the package "liboverlay-scrollbar-0.2-0".
12740
41+The IDE starter "startlazarus" sets this variable before starting the IDE (since 1.0). startlazarus is called for example when you use the desktop menu item.
42+
12843### Ubuntu Unity Menuproxy
12944
130-In more recent Ubuntu versions, Ubuntu tries to create a "one menubar" look like macOS has, but this fails miserably with multi window programs like Lazarus. The main problem is not being able to access the menu without first selecting the main lazarus window. (the window that would hold the menubar).
45+In more recent Ubuntu versions, Ubuntu tries to create a "one menubar" look like macOS has, but this fails miserably with multi window programs like Lazarus. The main problem is not being able to access the menu without first selecting the main lazarus window. (the window that would hold the menubar).
13146
132-Turning off seems to be impossible without massive changes (probably that is because then everybody would turn such features off immediately).
47+Turning off seems to be impossible without massive changes (probably that is because then everybody would turn such features off immediately).
13348
134-Turning off manually is possible through setting environment variable UBUNTU_MENUPROXY equal to 0 before starting.
49+Turning off manually is possible through setting environment variable UBUNTU_MENUPROXY equal to 0 before starting.
13550
136-UBUNTU_MENUPROXY=0 ./lazarus
51+UBUNTU_MENUPROXY=0 ./lazarus
13752
138-or put it in a script like:
139-```
140-#!/bin/sh
141- export UBUNTU_MENUPROXY=0
142- ./startlazarus
143-```
53+or put it in a script like:
14454
55+`#!/bin/sh`\
56+`export UBUNTU_MENUPROXY=0`\
57+`./startlazarus`
58+
14559### Raspberry Pi OS
14660
147-Note: the following advice is proably not necessary if you have installed libgtk2.0-dev as mentioned further up this page
61+Note: the following advice is proably not necessary if you have installed libgtk2.0-dev as mentioned further up this page
14862
149-Lazarus GTK2 cannot be compiled by default, because of missing symlinks for libraries. These symlinks are missed:
63+Lazarus GTK2 cannot be compiled by default, because of missing symlinks for libraries. These symlinks are missed:
15064
151- * libgdk-x11-2.0.so
152- * libgtk-x11-2.0.so
153- * libX11.so
154- * libgdk_pixbuf-2.0.so
155- * libglib-2.0
156- * libgthread-2.0.so
157- * libgmodule-2.0.so
158- * libpango-1.0.so
159- * libcairo.so
160- * libatk-1.0.so
65+- libgdk-x11-2.0.so
66+- libgtk-x11-2.0.so
67+- libX11.so
68+- libgdk_pixbuf-2.0.so
69+- libglib-2.0
70+- libgthread-2.0.so
71+- libgmodule-2.0.so
72+- libpango-1.0.so
73+- libcairo.so
74+- libatk-1.0.so
16175
162-The existing .so files are located in the "/usr/lib/aarch64-linux-gnu". For all mentioned files, you need to make symlinks like this:
163-```
164-cd /usr/lib/aarch64-linux-gnu
165- sudo ln -s libatk-1.0.so.0 libatk-1.0.so
166-```
76+The existing .so files are located in the "/usr/lib/aarch64-linux-gnu". For all mentioned files, you need to make symlinks like this:
16777
78+`cd /usr/lib/aarch64-linux-gnu`\
79+`sudo ln -s libatk-1.0.so.0 libatk-1.0.so`
80+
16881## Using the GTK2 interface under macOS
16982
17083### Installing X11
17184
172-If you want to use the gtk widgetset instead of the default Carbon widgetset, then make sure **X11** is installed. X11 is no longer included with Mac, but X11 server and client libraries are available from the [XQuartz project](<https://www.xquartz.org/>). The last XQuartz release was version 2.7.11 on 2016-10-29 for Snow Leopard 10.6.3 or later.
85+If you want to use the gtk widgetset instead of the default Carbon widgetset, then make sure **X11** is installed. X11 is no longer included with Mac, but X11 server and client libraries are available from the [XQuartz project](https://www.xquartz.org/). The last XQuartz release was version 2.7.11 on 2016-10-29 for Snow Leopard 10.6.3 or later.
17386
174-How do you know whether X11 is installed? Look in the /Applications/Utilities folder for an application named XQuartz.app. All further details are in /opt/X11/ (soft linked from /usr/X11).
87+How do you know whether X11 is installed? Look in the /Applications/Utilities folder for an application named XQuartz.app. All further details are in /opt/X11/ (soft linked from /usr/X11).
17588
176-**Tip** \- Drag and drop X11 onto the dock so you'll have a one-click way of opening an X11 window.
89+**Tip** - Drag and drop X11 onto the dock so you'll have a one-click way of opening an X11 window.
17790
17891### Installing GTK2-Lazarus with fink
17992
180-Install [Fink](<http://www.finkproject.org/>), the package manager for macOS. Install the GTK2 version of Lazarus with the following command:
181-```
182-fink install lazarus-gtk2
183-```
93+Install [Fink](http://www.finkproject.org/), the package manager for macOS. Install the GTK2 version of Lazarus with the following command:
18494
185-You will be asked to install a number of other packages. Simply answer yes. The installation takes quite a while. After it has finished, the GTK2 application can be started with a double click on /Applications/Fink/lazarus.
95+` fink install lazarus-gtk2`
18696
187-Note: Projects using GTK2 can equally be created using the Aqua version of Lazarus, which is installed with "fink install lazarus-aqua".
97+You will be asked to install a number of other packages. Simply answer yes. The installation takes quite a while. After it has finished, the GTK2 application can be started with a double click on /Applications/Fink/lazarus.
18898
99+Note: Projects using GTK2 can equally be created using the Aqua version of Lazarus, which is installed with "fink install lazarus-aqua".
100+
189101### Installing gtk using MacPorts
190102
191-Follow these steps to install the libraries using MacPorts. Install MacPorts from [**www.macports.org**](<http://www.macports.org/>). When MacPorts is set up, you need to install two library sets using the following commands:
192-```
193-sudo /opt/local/bin/port install gtk1
194- sudo /opt/local/bin/port install gdk-pixbuf
195-```
103+Follow these steps to install the libraries using MacPorts. Install MacPorts from [**www.macports.org**](http://www.macports.org/). When MacPorts is set up, you need to install two library sets using the following commands:
196104
197-Then make sure that Lazarus can find the library by using the command below before running Lazarus. Alternatively you can add this command to your bash startup script (`/etc/profile` or `~/.bash_profile`) before you start the shell to run Lazarus:
198-```
199-export DYLD_FALLBACK_LIBRARY_PATH="/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH"
200-```
105+`sudo /opt/local/bin/port install gtk1`\
106+`sudo /opt/local/bin/port install gdk-pixbuf`
201107
202-If this doesn't work, simply do
203-```
204-sudo ln -s /opt/local /sw
205-```
108+Then make sure that Lazarus can find the library by using the command below before running Lazarus. Alternatively you can add this command to your bash startup script (`/etc/profile` or `~/.bash_profile`) before you start the shell to run Lazarus:
206109
110+`export DYLD_FALLBACK_LIBRARY_PATH="/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH"`
111+
112+If this doesn't work, simply do
113+
114+`sudo ln -s /opt/local /sw`
115+
207116### Using the GTK2 libraries included with Gimp
208117
209-Now that the Cocoa widgetset is the default for Lazarus on macOS, there probably isn't much need for developing or distributing GTK2-based apps on macOS. However, you might want to test your apps with the GTK2 widgetset to see how well the graphical portion will work under Linux, where GTK2 is likely to be the default. You can also compile Lazarus itself against the GTK2 widgetset if you're curious about how Lazarus looks with GTK2.
118+Now that the Cocoa widgetset is the default for Lazarus on macOS, there probably isn't much need for developing or distributing GTK2-based apps on macOS. However, you might want to test your apps with the GTK2 widgetset to see how well the graphical portion will work under Linux, where GTK2 is likely to be the default. You can also compile Lazarus itself against the GTK2 widgetset if you're curious about how Lazarus looks with GTK2.
210119
211-An easy way to obtain recent GTK2 libraries is to download and install Gimp from <http://www.gimp.org/macintosh/>. Gimp is not only a useful image editor in its own right, but it also installs GTK2 version **2.16.6** libraries that you can link your apps against.
120+An easy way to obtain recent GTK2 libraries is to download and install Gimp from <http://www.gimp.org/macintosh/>. Gimp is not only a useful image editor in its own right, but it also installs GTK2 version **2.16.6** libraries that you can link your apps against.
212121
213-Copy and paste the files given below into a text editor and save them as **gimplib.cfg** and **glaunch.sh**. File gimplib.cfg tells FPC how to link against the GTK2 libraries; file glaunch.sh initializes GTK2 and starts a GTK2-compiled executable specified on the command line.
122+Copy and paste the files given below into a text editor and save them as **gimplib.cfg** and **glaunch.sh**. File gimplib.cfg tells FPC how to link against the GTK2 libraries; file glaunch.sh initializes GTK2 and starts a GTK2-compiled executable specified on the command line.
214123
215-To compile an app against the GTK2 widgetset and link it with the Gimp GTK2 libraries, do the following:
124+To compile an app against the GTK2 widgetset and link it with the Gimp GTK2 libraries, do the following:
216125
217- * In the Lazarus Compiler Options dialog, on the Other tab, check Use Additional Compiler Config File and enter the path to gimplib.cfg in the text box (for example, ~/tools/scripts/gimplib.cfg).
218- * In the Lazarus Compiler Options dialog, on the Paths tab, select GTK2 as the LCL Widget Type.
219- * Choose Run | Build.
126+- In the Lazarus Compiler Options dialog, on the Other tab, check Use Additional Compiler Config File and enter the path to gimplib.cfg in the text box (for example, ~/tools/scripts/gimplib.cfg).
127+- In the Lazarus Compiler Options dialog, on the Paths tab, select GTK2 as the LCL Widget Type.
128+- Choose Run \| Build.
220129
221-To run a GTK2-compiled executable, open an X11 window, change to your app's folder, and enter the following (which assumes glaunch.sh is in ~/tools/scripts):
130+To run a GTK2-compiled executable, open an X11 window, change to your app's folder, and enter the following (which assumes glaunch.sh is in ~/tools/scripts):
222131
223- * ~/tools/scripts/glaunch.sh myexec
132+- ~/tools/scripts/glaunch.sh myexec
224133
225-To compile Lazarus itself, do the following:
134+To compile Lazarus itself, do the following:
226135
227- * Open an X11 window and change to your Lazarus source folder.
228- * Make a copy of your Carbon-based Lazarus, in case something goes wrong (cp -p lazarus lazarus-carb).
229- * make clean all LCL_PLATFORM=gtk2 FPC=fpc OPT="@~/tools/scripts/gimplib.cfg -dHasX"
136+- Open an X11 window and change to your Lazarus source folder.
137+- Make a copy of your Carbon-based Lazarus, in case something goes wrong (cp -p lazarus lazarus-carb).
138+- make clean all LCL_PLATFORM=gtk2 FPC=fpc OPT="@~/tools/scripts/gimplib.cfg -dHasX"
230139
231-This will rebuild lazarus, lazbuild and startlazarus. You'll probably want to rename your lazarus executables:
140+This will rebuild lazarus, lazbuild and startlazarus. You'll probably want to rename your lazarus executables:
232141
233- * mv lazarus lazarus-gtk2
234- * mv lazarus-carb lazarus
142+- mv lazarus lazarus-gtk2
143+- mv lazarus-carb lazarus
235144
236-To run the GTK2-compiled Lazarus:
145+To run the GTK2-compiled Lazarus:
237146
238- * ~/tools/scripts/glaunch.sh lazarus-gtk2
147+- ~/tools/scripts/glaunch.sh lazarus-gtk2
239148
240-Here is the gimplib.cfg config file. Note that this assumes you installed Gimp in your Applications folder.
241-```
242--k'-headerpad_max_install_names'
149+Here is the gimplib.cfg config file. Note that this assumes you installed Gimp in your Applications folder.
150+
151+ -k'-headerpad_max_install_names'
243152 -k'-L/usr/lib'
244153 -k'-L/usr/X11R6/lib'
245154 -k'-L/Applications/Gimp.app/Contents/Resources/lib'
246155 -k'-lgthread-2.0'
247-
156+
248157 -k'-dylib_file'
249158 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libpangoft2-1.0.0.dylib:/Applications/Gimp.app/Contents/Resources/lib/libpangoft2-1.0.0.dylib'
250159 -k'-dylib_file'
251160 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libz.1.dylib:/Applications/Gimp.app/Contents/Resources/lib/libz.1.dylib'
252161 -k'-dylib_file'
253162 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libpangocairo-1.0.0.dylib:/Applications/Gimp.app/Contents/Resources/lib/libpangocairo-1.0.0.dylib'
254163 -k'-dylib_file'
255164 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libgmodule-2.0.0.dylib:/Applications/Gimp.app/Contents/Resources/lib/libgmodule-2.0.0.dylib'
256165 -k'-dylib_file'
257166 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libintl.8.dylib:/Applications/Gimp.app/Contents/Resources/lib/libintl.8.dylib'
258167 -k'-dylib_file'
259168 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libiconv.2.dylib:/Applications/Gimp.app/Contents/Resources/lib/libiconv.2.dylib'
260169 -k'-dylib_file'
261170 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libcairo.2.dylib:/Applications/Gimp.app/Contents/Resources/lib/libcairo.2.dylib'
262171 -k'-dylib_file'
263172 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libfreetype.6.dylib:/Applications/Gimp.app/Contents/Resources/lib/libfreetype.6.dylib'
264173 -k'-dylib_file'
265174 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libfontconfig.1.dylib:/Applications/Gimp.app/Contents/Resources/lib/libfontconfig.1.dylib'
266175 -k'-dylib_file'
267176 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libexpat.1.dylib:/Applications/Gimp.app/Contents/Resources/lib/libexpat.1.dylib'
268177 -k'-dylib_file'
269178 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libXrender.1.dylib:/Applications/Gimp.app/Contents/Resources/lib/libXrender.1.dylib'
270179 -k'-dylib_file'
271180 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libtiff.3.dylib:/Applications/Gimp.app/Contents/Resources/lib/libtiff.3.dylib'
272181 -k'-dylib_file'
273182 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libjpeg.62.dylib:/Applications/Gimp.app/Contents/Resources/lib/libjpeg.62.dylib'
274183 -k'-dylib_file'
275184 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libpng12.0.dylib:/Applications/Gimp.app/Contents/Resources/lib/libpng12.0.dylib'
276185 -k'-dylib_file'
277186 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libXinerama.1.dylib:/Applications/Gimp.app/Contents/Resources/lib/libXinerama.1.dylib'
278187 -k'-dylib_file'
279188 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libpixman-1.0.dylib:/Applications/Gimp.app/Contents/Resources/lib/libpixman-1.0.dylib'
280189 -k'-dylib_file'
281190 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libgio-2.0.0.dylib:/Applications/Gimp.app/Contents/Resources/lib/libgio-2.0.0.dylib'
282191 -k'-dylib_file'
283192 -k'/tmp/skl/Gimp.app/Contents/Resources/lib/libjasper.1.dylib:/Applications/Gimp.app/Contents/Resources/lib/libjasper.1.dylib'
284-```
285193
286-Here is the glaunch.sh script file:
287-```
288-#!/bin/sh
289-
194+Here is the glaunch.sh script file:
195+
196+ #!/bin/sh
197+
290198 TMP="/tmp/$UID/TemporaryItems"
291199 GRES="Gimp.app/Contents/Resources"
292200 GIMP="/Applications/$GRES"
293- if ! [ -e "$GIMP" ]
201+ if ! [ -e "$GIMP" ]
294202 then
295203 GIMP="~/Desktop/$GRES"
296- if ! [ -e "$GIMP" ]
204+ if ! [ -e "$GIMP" ]
297205 then
298206 GIMP="~/$GRES"
299- if ! [ -e "$GIMP" ]
207+ if ! [ -e "$GIMP" ]
300208 then
301209 GIMP="~/Applications/$GRES"
302- if ! [ -e "$GIMP" ]
210+ if ! [ -e "$GIMP" ]
303211 then
304212 GIMP=""
305213 fi
306214 fi
307215 fi
308216 fi
309-
217+
310218 if [ "$GIMP" = "" ]
311219 then
312220 echo "Can't locate Gimp"
313221 else
314222 export "DYLD_FORCE_FLAT_NAMESPACE=1"
315223 export "DYLD_INSERT_LIBRARIES=/usr/lib/libiconv.dylib"
316224 export "DYLD_LIBRARY_PATH=/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources:$GIMP/lib"
317225 export "PANGO_RC_FILE=$TMP/pangorc"
318226 export "FONTCONFIG_PATH=$GIMP/etc/fonts"
319227 export "GTK_IM_MODULE_FILE=$TMP/gtk.immodules"
320228 export "GDK_PIXBUF_MODULE_FILE=$TMP/gdk-pixbuf.loaders"
321229 export "GTK_DATA_PREFIX=$GIMP"
322230 export "GTK_EXE_PREFIX=$GIMP"
323-
231+
324232 mkdir -p "$TMP"
325233 sed 's|/tmp/skl/Gimp.app/Contents/Resources/etc/pango|'"$TMP|g" "$GIMP/etc/pango/pangorc" > "$TMP/pangorc"
326234 sed 's|/tmp/skl/Gimp.app/Contents/Resources|'"$GIMP|g" "$GIMP/etc/pango/pango.modules" > "$TMP/pango.modules"
327235 cp -f "$GIMP/etc/pango/pangox.aliases" "$TMP"
328236 sed 's|/tmp/skl/Gimp.app/Contents/Resources|'"$GIMP|g" "$GIMP/etc/gtk-2.0/gtk.immodules" > "$TMP/gtk.immodules"
329237 sed 's|/tmp/skl/Gimp.app/Contents/Resources|'"$GIMP|g" "$GIMP/etc/gtk-2.0/gdk-pixbuf.loaders" > "$TMP/gdk-pixbuf.loaders"
330-
238+
331239 ./$1
332240 fi
333-```
334241
335242## Using the Gtk2 interface under Microsoft Windows
336243
337244### Getting the needed Gtk2 libraries
338245
339-Using the Gtk2 libraries from gtk.org:
246+Using the Gtk2 libraries from gtk.org:
340247
341- * <http://www.gtk.org/download>
248+- <http://www.gtk.org/download>
342249
343-or using the GTK-Runtime project:
250+or using the GTK-Runtime project:
344251
345- * <https://gtk-win.sourceforge.io>
252+- <https://gtk-win.sourceforge.io>
346253
347-or using the Gtk2 libraries provided by Gimp:
254+or using the Gtk2 libraries provided by Gimp:
348255
349- * <http://gimp-win.sourceforge.net/stable.html>
256+- <http://gimp-win.sourceforge.net/stable.html>
350257
351258### Standalone Application under Windows
352259
353-You may prefer a standalone application to avoid versions conflicts. All needed libraries are in the packages mentioned above. They should be placed in the same folder of your executable. You will need all these libraries:
260+You may prefer a standalone application to avoid versions conflicts. All needed libraries are in the packages mentioned above. They should be placed in the same folder of your executable. You will need all these libraries:
354261
355- * libcairo-2.dll
356- * libglib-2.0-0.dll
357- * libpangocairo-1.0-0.dll
358- * libpng12.dll
359- * libgdk-win32-2.0-0.dll
360- * libgmodule-2.0-0.dll
361- * libgtk-win32-2.0-0.dll
362- * libatk-1.0-0.dll
363- * libgdk_pixbuf-2.0-0.dll
364- * libgobject-2.0-0.dll
365- * libpango-1.0-0.dll
366- * libpangowin32-1.0-0.dll
367- * libgio-2.0-0.dll
368- * zlib1.dll
262+- libcairo-2.dll
263+- libglib-2.0-0.dll
264+- libpangocairo-1.0-0.dll
265+- libpng12.dll
266+- libgdk-win32-2.0-0.dll
267+- libgmodule-2.0-0.dll
268+- libgtk-win32-2.0-0.dll
269+- libatk-1.0-0.dll
270+- libgdk_pixbuf-2.0-0.dll
271+- libgobject-2.0-0.dll
272+- libpango-1.0-0.dll
273+- libpangowin32-1.0-0.dll
274+- libgio-2.0-0.dll
275+- zlib1.dll
369276
370277### Themes
371278
372-The default GTK2 interface is quite ugly and not very integrated with the Windows Desktop. Your GTK2 application may use the Windows Theme if you use the [gtk-wimp project](<http://gtk-wimp.sourceforge.net/>). Into your application's folder you should add the following files ([Available here](<http://sourceforge.net/project/showfiles.php?group_id=76416>)):
279+The default GTK2 interface is quite ugly and not very integrated with the Windows Desktop. Your GTK2 application may use the Windows Theme if you use the [gtk-wimp project](http://gtk-wimp.sourceforge.net/). Into your application's folder you should add the following files ([Available here](http://sourceforge.net/project/showfiles.php?group_id=76416)):
373280
374- * .\lib\gtk-2.0\engines\libwimp.dll
375- * .\share\themes\Raleigh\gtk-2.0\gtkrc
281+- .\lib\gtk-2.0\engines\libwimp.dll
282+- .\share\themes\Raleigh\gtk-2.0\gtkrc
376283
377284### A sample project
378285
379-A complete and working "Hello world" project (with sources) is available [here](<http://www.lazarusforum.de/lazwiki/winGTK2_Demo.zip>).
286+A complete and working "Hello world" project (with sources) is available [here](http://www.lazarusforum.de/lazwiki/winGTK2_Demo.zip).
380287
381-[![WinGTK2.png](/wiki-images/b/b1/WinGTK2.png)](</File:WinGTK2.png>)
288+![](/wiki-images/b/b1/WinGTK2.png)
382289
383290## Current issues
384291
385-Here are some notes about some of the current issues. It is not a complete list, but mainly a collection of the information about some of the most annoying problems, that can not be solved simply.
386-
387-
292+Here are some notes about some of the current issues. It is not a complete list, but mainly a collection of the information about some of the most annoying problems, that can not be solved simply.
388293
389294### Editor Options allows to select incompatible fonts
390295
391-TFontDialog must be extended to show only monospace fonts by default and only if the users insists show all fonts.
392-
393-
296+TFontDialog must be extended to show only monospace fonts by default and only if the users insists show all fonts.
394297
395298### Moving with keys in the OI sometimes does not move the edit field
396299
397-ToDo
300+ToDo
398301
399302### Destroying handle during OnKeyDown gives AV
400303
401-This is a more general problem, not only KeyDown. There are two solutions:
304+This is a more general problem, not only KeyDown. There are two solutions:
402305
403- * Increase reference counters of all used widgets during events. Difficult to maintain and we will never be sure to ref count every used widget.
404- * Instead of destroying widgets immediately, hide them, untie them and put them into a queue. The widgets will then be destroyed in the message loop and on gtk intf shut down.
306+- Increase reference counters of all used widgets during events. Difficult to maintain and we will never be sure to ref count every used widget.
307+- Instead of destroying widgets immediately, hide them, untie them and put them into a queue. The widgets will then be destroyed in the message loop and on gtk intf shut down.
405308
406309### Z-Order of controls
407310
408-In Gtk2 many controls don't have a window, so they are just painted on their parent. This makes they be painted before controls with a window, so we get a wrong Z-Order.
311+In Gtk2 many controls don't have a window, so they are just painted on their parent. This makes they be painted before controls with a window, so we get a wrong Z-Order.
409312
410313Here is a list of gtk widgets that don't have windows: <https://developer.gnome.org/gtk-tutorial/stable/x481.html>
411314
412315The solution is adding a GtkEventBox under each of these widgets: <https://developer.gnome.org/gtk-tutorial/stable/c1226.html#SEC-EVENTBOX>
413316
414317**Bug reports**
415318
416- * <http://bugs.freepascal.org/view.php?id=964>
417- * <http://bugs.freepascal.org/view.php?id=8346>
319+- <http://bugs.freepascal.org/view.php?id=964>
320+- <http://bugs.freepascal.org/view.php?id=8346>
418321
419322### Open Dialog Options
420323
421-TOpenDialog has several options to control the dialog. When implementing these options in Gtk2, however, one needs to watch out because of the vast amount of bugs in Gtk 2, which may prevent the options from working. For example, ofForceShowHidden doesn't work because of Gtk 2 bugs, althougth it is implemented correctly.
324+TOpenDialog has several options to control the dialog. When implementing these options in Gtk2, however, one needs to watch out because of the vast amount of bugs in Gtk 2, which may prevent the options from working. For example, ofForceShowHidden doesn't work because of Gtk 2 bugs, althougth it is implemented correctly.
422325
423326**Bug reports**
424327
425- * ofForceShowHidden - <http://bugs.freepascal.org/view.php?id=8473>
328+- ofForceShowHidden - <http://bugs.freepascal.org/view.php?id=8473>
426329
427330### TScrollBox and Scrolling problems
428331
429-TScrollBox and Scrolling seems deeply broken in Gtk 2.
332+TScrollBox and Scrolling seems deeply broken in Gtk 2.
430333
431334**Bug reports**
432335
433- * <http://bugs.freepascal.org/view.php?id=10779>
434- * <http://bugs.freepascal.org/view.php?id=10952>
435- * <http://bugs.freepascal.org/view.php?id=9049>
436- * <http://bugs.freepascal.org/view.php?id=11010>
336+- <http://bugs.freepascal.org/view.php?id=10779>
337+- <http://bugs.freepascal.org/view.php?id=10952>
338+- <http://bugs.freepascal.org/view.php?id=9049>
339+- <http://bugs.freepascal.org/view.php?id=11010>
437340
438341### Shortcut keys
439342
440343**Bug reports**
441344
442- * <http://bugs.freepascal.org/view.php?id=1946>
443- * <http://bugs.freepascal.org/view.php?id=7249>
444- * <http://bugs.freepascal.org/view.php?id=10282>
345+- <http://bugs.freepascal.org/view.php?id=1946>
346+- <http://bugs.freepascal.org/view.php?id=7249>
347+- <http://bugs.freepascal.org/view.php?id=10282>
445348
446349### Up/Down key navigation between TEdits
447350
448-~~A standard Gtk 2 feature allows the use of up/down key to navigate between GtkEntry widgets (like TEdits), but this is undesirable if the user implements a dropdrow list to be attached to the TEdit. As we cannot know what code the user has written, the best option is to disable this feature. Possible ways to do that are:~~
449-
450-~~~~
351+A standard Gtk 2 feature allows the use of up/down key to navigate between GtkEntry widgets (like TEdits), but this is undesirable if the user implements a dropdrow list to be attached to the TEdit. As we cannot know what code the user has written, the best option is to disable this feature. Possible ways to do that are:
451352
452-~~
453- * Listen to key press events of GtkEntry and for Up/Down events shift the focus to implemented widget.
454-~~
455- * ~~Don't propagate Up/Down key press events to GtkEntry.~~
353+- Listen to key press events of GtkEntry and for Up/Down events shift the focus to implemented widget.
354+- Don't propagate Up/Down key press events to GtkEntry.
456355
457356**As of lazarus 0.9.31 r31562 GtkEntry behaviour is same as under other widgetsets - NO FOCUS CHANGING BY VK_UP or VK_DOWN.**
458357
459358**Bug reports**
460359
461- * <http://bugs.freepascal.org/view.php?id=11115>
360+- <http://bugs.freepascal.org/view.php?id=11115>
462361
463362## Done issues
464363
465364### Done: ~~Synedit is very slow~~
466365
467-Actually this is not a bug of the gtk2 intf, but a problem of gtk2 and some video drivers. On some systems SynEdit is as fast as any other text editor. Some bugs were fixed with gtk 2.12. SynEdit already paints every token with the ExtTextOut function. It does not use a TCanvas text function, which would be even slower.
366+Actually this is not a bug of the gtk2 intf, but a problem of gtk2 and some video drivers. On some systems SynEdit is as fast as any other text editor. Some bugs were fixed with gtk 2.12. SynEdit already paints every token with the ExtTextOut function. It does not use a TCanvas text function, which would be even slower.
468367
469368Bug Tracker item: <http://www.freepascal.org/mantis/view.php?id=7717>
470369
471-For people using the Nvidia drivers, setting GlyphCache=1 may speed up SynEdit. You will need the beta-drivers: [http://www.nvnews.net/vbulletin/showthread.php?s=399832e3761a522d34db6faaf8423ad9&t=118088](<http://www.nvnews.net/vbulletin/showthread.php?s=399832e3761a522d34db6faaf8423ad9&t=118088>)
472-
473-
370+For people using the Nvidia drivers, setting GlyphCache=1 may speed up SynEdit. You will need the beta-drivers: <http://www.nvnews.net/vbulletin/showthread.php?s=399832e3761a522d34db6faaf8423ad9&t=118088>
474371
475372### Done: ~~Small TButton does not center text~~
476373
477-Actually the text is centered, but some themes (like the default under ubuntu) define a big minimum space above and below the label. The gtk2 default is not that big. So, it is a user setting.
374+Actually the text is centered, but some themes (like the default under ubuntu) define a big minimum space above and below the label. The gtk2 default is not that big. So, it is a user setting.
478375
479- * a) It might be possible to override this setting and set the space to 0.
480- * Pro: Most small autosize buttons would look better.
481- * Cons: the AutoSize would be incorrect. And the bug is still there for themes with big text.
482- * b) set the interface constraint to the gtk_button normal height.
483- * Pro: there are no small buttons.
484- * Con: Enlarging a button requires autosizing all surrounding controls too. And you need a nice auto shrink feature, which does not exist yet.
485- * c) Set the space to 0 and when calculating the preferred size, restore temporarily the space size.
486- * Pro: Most small buttons will look better, autosize will still work.
487- * Con: Most difficult solution to implement. Maybe not possible without a hack.
376+- a\) It might be possible to override this setting and set the space to 0.
377+ - Pro: Most small autosize buttons would look better.
378+ - Cons: the AutoSize would be incorrect. And the bug is still there for themes with big text.
379+- b\) set the interface constraint to the gtk_button normal height.
380+ - Pro: there are no small buttons.
381+ - Con: Enlarging a button requires autosizing all surrounding controls too. And you need a nice auto shrink feature, which does not exist yet.
382+- c\) Set the space to 0 and when calculating the preferred size, restore temporarily the space size.
383+ - Pro: Most small buttons will look better, autosize will still work.
384+ - Con: Most difficult solution to implement. Maybe not possible without a hack.
488385
489386**Bug Reports**
490387
491- * <http://bugs.freepascal.org/view.php?id=11120>
492- * <http://bugs.freepascal.org/view.php?id=8765>
388+- <http://bugs.freepascal.org/view.php?id=11120>
389+- <http://bugs.freepascal.org/view.php?id=8765>
493390
494391### Done: ~~TOpenPictureDialog does not update the preview~~
495392
496393### Done: ~~Only the main form appears in the window list~~
497394
498-Probably a bug in the window hints parameters.
395+Probably a bug in the window hints parameters.
499396
500397### Done: ~~Slow and visible resizing when creating/resizing a dialog~~
501398
502-This has several reasons, which fall into 3 categories:
399+This has several reasons, which fall into 3 categories:
503400
504-1\. Too many resizes. Status: Acceptable.
401+1\. Too many resizes. Status: Acceptable.
505402
506-2\. Slow painting. Status: It seems other gtk2 apps are as slow, so maybe it is a gtk2 issue.
403+2\. Slow painting. Status: It seems other gtk2 apps are as slow, so maybe it is a gtk2 issue.
507404
508-3\. Some resizes happen after painting. Status: Acceptable.
405+3\. Some resizes happen after painting. Status: Acceptable.
509406
510- * The application does not resize the controls in one step, but in many small steps. For example: It resizes a control in several small steps SetBounds, AnchorParallel, ... . Or first the the Form is resized, then the a TPageControl, then a TButton, ... . Solution: The LCL sets BeginAlign/EndAlign during loading/creation.
511- * If there are anchored or autosized controls, every resize triggers the resize system of the the LCL. The LCL tries to combine many resizes during csLoading and Begin/EndAlign. During creation the LCL still sends several times the bounds to the interface. ToDo Solution: Send bounds not during BeginAlign (including parents), but send them all in EndAlign.
512- * The hen-egg problem. In order to autosize, the LCL needs the current gtk theme sizes. The current gtk theme sizes can only be calculated by creating a handle. When you create a handle you need the size. Solution: Create some hidden widgets to test the current gtk sizes. This already works for TCustomGroupBox and descendants. ToDo: the other controls.
513- * The gtk does not resize immediately, but puts resizes on a queue and resizes later. These values are stored in private, hidden variables. Especially if you resize a TGroupBox, the inner borders are updated later by the gtk. That means the GetClientRect function is not reliable during resizing. That's why the LCL first works with the wrong ClientRect. Solution: The LCL anticipates the new ClientRect based on the old. And there is now a GetDefaultClientRect function to ask the interface for an estimation of the ClientRect.
514- * The gtk1 intf caches LCL resize requests. This accelerates many typical overhead, but it only works with delayed painting and creates flicker during creation and resizing a form never works smooth. The delayed painting breaks the gtk2 double buffering and special paint contexts (opengl), so this trick is disabled under gtk2 and therefore the delayed resize does not work under gtk2.
515- * Top level controls, like TForm can not move/resize freely. The window manager decides, what is possible. Often they take only the first position/size request and ignores the later changes. And even worse: first the window is created, realized, then resized, then mapped and 'shown' and finally moved to the final position. So, if the gtk intf asks the gtk where a form is during creation, it will most of the time get 0,0, even though it told the gtk to move the window long ago. Because this is a more general problem (not gtk specific, but X), the LCL tries avoids asking the interface for coords and only asks on rare occasions like LM_SIZE, LM_MOVE messages coming from the interface or if told to do so.
516- * The LCL expects a LM_SIZE message on resize, including window state changes like iconify/maximize. But the gtk first notifies about the change and then resizes. ToDo: 1. Maybe: Omit the message, if the state does not change (is this Delphi compatible?). 2. Send the current window state with the normal resizes (Should work for maximize and restore from maximize). 3. Find a solution for iconify and restore from iconify.
407+- The application does not resize the controls in one step, but in many small steps. For example: It resizes a control in several small steps SetBounds, AnchorParallel, ... . Or first the the Form is resized, then the a TPageControl, then a TButton, ... . Solution: The LCL sets BeginAlign/EndAlign during loading/creation.
408+- If there are anchored or autosized controls, every resize triggers the resize system of the the LCL. The LCL tries to combine many resizes during csLoading and Begin/EndAlign. During creation the LCL still sends several times the bounds to the interface. ToDo Solution: Send bounds not during BeginAlign (including parents), but send them all in EndAlign.
409+- The hen-egg problem. In order to autosize, the LCL needs the current gtk theme sizes. The current gtk theme sizes can only be calculated by creating a handle. When you create a handle you need the size. Solution: Create some hidden widgets to test the current gtk sizes. This already works for TCustomGroupBox and descendants. ToDo: the other controls.
410+- The gtk does not resize immediately, but puts resizes on a queue and resizes later. These values are stored in private, hidden variables. Especially if you resize a TGroupBox, the inner borders are updated later by the gtk. That means the GetClientRect function is not reliable during resizing. That's why the LCL first works with the wrong ClientRect. Solution: The LCL anticipates the new ClientRect based on the old. And there is now a GetDefaultClientRect function to ask the interface for an estimation of the ClientRect.
411+- The gtk1 intf caches LCL resize requests. This accelerates many typical overhead, but it only works with delayed painting and creates flicker during creation and resizing a form never works smooth. The delayed painting breaks the gtk2 double buffering and special paint contexts (opengl), so this trick is disabled under gtk2 and therefore the delayed resize does not work under gtk2.
412+- Top level controls, like TForm can not move/resize freely. The window manager decides, what is possible. Often they take only the first position/size request and ignores the later changes. And even worse: first the window is created, realized, then resized, then mapped and 'shown' and finally moved to the final position. So, if the gtk intf asks the gtk where a form is during creation, it will most of the time get 0,0, even though it told the gtk to move the window long ago. Because this is a more general problem (not gtk specific, but X), the LCL tries avoids asking the interface for coords and only asks on rare occasions like LM_SIZE, LM_MOVE messages coming from the interface or if told to do so.
413+- The LCL expects a LM_SIZE message on resize, including window state changes like iconify/maximize. But the gtk first notifies about the change and then resizes. ToDo: 1. Maybe: Omit the message, if the state does not change (is this Delphi compatible?). 2. Send the current window state with the normal resizes (Should work for maximize and restore from maximize). 3. Find a solution for iconify and restore from iconify.
517414
518-Things done to handle the above issues:
415+Things done to handle the above issues:
519416
520- * The gtk2 intf now calls gtk_widget_size_allocate when resizing widgets. This initializes the Widget^.allocation, so that further reads by the LCL no longer give old values.
521- * Resizes of child widgets (not gtkwindow or not top level) are now given to the gtk immediately. This does not resize immediately, but together with other changes this resizes earlier, reducing the total number of resizes.
522- * gtk resize events are now given almost always directly to the LCL. The only exception is gtkwindow and the client areas (gtk_fixed). The gtk resize events come bottom up, so the client areas are always triggered before the widget itself is resized.
523- * The gtk intf now checks the mapped attribute for gtkwindow, which seems finally to work reliable under gtk2. This means the gtk intf no longer send window positions to the LCL, before the window is really moved.
524- * In order to let the LCL resize during component/handle creation, the new function GetDefaultClientRect allows every widget class to provide a nice clientrect even before the handle is created. This is done by using the hidden style widgets of the gtk intf.
417+- The gtk2 intf now calls gtk_widget_size_allocate when resizing widgets. This initializes the Widget^.allocation, so that further reads by the LCL no longer give old values.
418+- Resizes of child widgets (not gtkwindow or not top level) are now given to the gtk immediately. This does not resize immediately, but together with other changes this resizes earlier, reducing the total number of resizes.
419+- gtk resize events are now given almost always directly to the LCL. The only exception is gtkwindow and the client areas (gtk_fixed). The gtk resize events come bottom up, so the client areas are always triggered before the widget itself is resized.
420+- The gtk intf now checks the mapped attribute for gtkwindow, which seems finally to work reliable under gtk2. This means the gtk intf no longer send window positions to the LCL, before the window is really moved.
421+- In order to let the LCL resize during component/handle creation, the new function GetDefaultClientRect allows every widget class to provide a nice clientrect even before the handle is created. This is done by using the hidden style widgets of the gtk intf.
525422
526423### Done: ~~Selecting a TPage in the designer gives the wrong bounds rectangle~~
527424
528-GetClientOrigin needed extra code for TNotebook, which does not have a normal client area.
425+GetClientOrigin needed extra code for TNotebook, which does not have a normal client area.
529426
530427### Done: ~~Sometimes the hint window of the component palette is not resized~~
531428
532-Sometimes the gtk does not resize the gdkwindow. This is now forced and it seems to fix this problem.
429+Sometimes the gtk does not resize the gdkwindow. This is now forced and it seems to fix this problem.
533430
534431### Done: ~~gtk criticals in IDE codetools options dialog~~
535432
536-Empty comboboxes do not have all private structures, so you can not set callbacks.
433+Empty comboboxes do not have all private structures, so you can not set callbacks.
537434
538435### Done: System Colors
539436
540-The system colors depend on the theme, but many themes don't give adequate colors and many controls use system colors, so we need them to have a correct value. To solve this, a list of ignored system colors was constructed, and in case the user sets any of these colors, it is ignored and the default theme color is used instead.
437+The system colors depend on the theme, but many themes don't give adequate colors and many controls use system colors, so we need them to have a correct value. To solve this, a list of ignored system colors was constructed, and in case the user sets any of these colors, it is ignored and the default theme color is used instead.
541438
542-List of colors which were tested and need to be ignored for the correct functioning of programs:
439+List of colors which were tested and need to be ignored for the correct functioning of programs:
543440
544- * clBtnFace - Otherwise Notebooks and Buttons look bad
441+- clBtnFace - Otherwise Notebooks and Buttons look bad
545442
546443**Bug reports**
547444
548- * <http://bugs.freepascal.org/view.php?id=8684>
445+- <http://bugs.freepascal.org/view.php?id=8684>
549446
550447## Gtk1/Gtk2 separation roadmap
551448
552-List of already separated elements:
449+List of already separated elements:
553450
554- * gtk2wscomctrls --- gtkwscomctrls
555- * gtk2wsdialogs --- gtkwsdialogs
556- * gtk2wsspin --- gtkwsspin
557- * gtk2wscalendar --- gtkwscalendar
451+- gtk2wscomctrls --- gtkwscomctrls
452+- gtk2wsdialogs --- gtkwsdialogs
453+- gtk2wsspin --- gtkwsspin
454+- gtk2wscalendar --- gtkwscalendar
558455
559-Next tasks:
456+Next tasks:
560457
561- * Rework of the events system
562- * Rework of private classes
458+- Rework of the events system
459+- Rework of private classes
563460
564461## Profiling
565462
566-There are various compiler switches:
463+There are various compiler switches:
567464
568- * VerboseSizeMsg - This will show you all changes and messages, with coords and reasons. Even for simple forms this gives a lot of output.
569- * DisableLoadedClientSize - This will ignore the ClientWidth/Height stored in the .lfm/.lrs files. This way you can somehow simulate, what happens, if you start an application under a different theme.
465+- VerboseSizeMsg - This will show you all changes and messages, with coords and reasons. Even for simple forms this gives a lot of output.
466+- DisableLoadedClientSize - This will ignore the ClientWidth/Height stored in the .lfm/.lrs files. This way you can somehow simulate, what happens, if you start an application under a different theme.
570467
571468---
572-*From the Free Pascal wiki, page "GTK2 Interface", as the Internet Archive kept it on 2023-01-31. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
469+*From the Free Pascal wiki, page "GTK2 Interface", as it stood on 2022-11-25 after a change by Dbannon, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history