README.in 14.9 KB
Newer Older
1
General Information
2 3
===================

4 5 6 7
This is GTK+ version @GTK_VERSION@. GTK+ is a multi-platform toolkit for
creating graphical user interfaces. Offering a complete set of widgets,
GTK+ is suitable for projects ranging from small one-off projects to
complete application suites.
Owen Taylor's avatar
Owen Taylor committed
8 9 10

GTK+ is free software and part of the GNU Project. However, the
licensing terms for GTK+, the GNU LGPL, allow it to be used by all
11 12
developers, including those developing proprietary software, without any
license fees or royalties.
13

14
The official download locations are:
15
  ftp://ftp.gtk.org/pub/gtk
16
  http://download.gnome.org/sources/gtk+
17 18 19 20

The official web site is:
  http://www.gtk.org/

21
Information about mailing lists can be found at
Matthias Clasen's avatar
Matthias Clasen committed
22
  http://www.gtk.org/mailing-lists.php
23

Matthias Clasen's avatar
Matthias Clasen committed
24

25 26 27 28
Installation
============

See the file 'INSTALL'
29 30


31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
How to report bugs
==================

Bugs should be reported to the GNOME bug tracking system.
(http://bugzilla.gnome.org, product glib.) You will need
to create an account for yourself.

In the bug report please include:

* Information about your system. For instance:

   - What operating system and version
   - For Linux, what version of the C library

  And anything else you think is relevant.

* How to reproduce the bug.

  If you can reproduce it with one of the test programs that are built
  in the tests/ subdirectory, that will be most convenient.  Otherwise,
  please include a short test program that exhibits the behavior.
  As a last resort, you can also provide a pointer to a larger piece
  of software that can be downloaded.

* If the bug was a crash, the exact text that was printed out
Matthias Clasen's avatar
Matthias Clasen committed
56
  when the crash occurred.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

* Further information such as stack traces may be useful, but
  is not necessary.


Patches
=======

Patches should also be submitted to bugzilla.gnome.org. If the
patch fixes an existing bug, add the patch as an attachment
to that bug report.

Otherwise, enter a new bug report that describes the patch,
and attach the patch to that bug report.

72 73 74
Patches should be in unified diff form. (The -up option to GNU diff)
Even better are git-formatted patches. (Use git format-patch)

Matthias Clasen's avatar
Matthias Clasen committed
75

76 77 78
Release notes for 3.20
======================

Matthias Clasen's avatar
Matthias Clasen committed
79 80 81 82 83 84 85
* The way theming works in GTK+ has been reworked fundamentally, to
  implement many more CSS features and make themes more expressive.
  As a result, custom CSS that is shipped with applications and third-
  party themes will need adjustments. Widgets now use element names much
  more than style classes; type names are no longer used in style matching.
  Every widget now documents the element names it has and the style classes
  it uses. The GTK+ inspector can also help with finding this information.
86

87
* GTK+ now uses internal subobjects (also known as gadgets) for allocating
Matthias Clasen's avatar
Matthias Clasen committed
88 89 90 91 92 93 94 95 96 97 98 99 100
  and drawing widget parts. Applications that subclass GTK+ widgets may see
  warnings if they override the size_allocate vfunc and don't chain up.
  The proper way to subclass is to chain up in size_allocate. If you do not
  want to do that for some reason, you have to override the draw vfunc as
  well.

* Several fixes for window sizing and window placement with client-side
  decorations may affect applications that are saving and restoring window
  sizes. The recommended best practice for this which is known to work with
  client-side and server-side decorations and with older and newer versions
  of GTK+ is to use gtk_window_get_size() to save window sizes and
  gtk_window_set_default_size() to restore it.
  See https://wiki.gnome.org/HowDoI/SaveWindowState for a detailed example.
101

102 103 104 105 106
* Geometry handling in GtkWindow has been removed. If you are using the
  functions gtk_window_resize_to_geometry, gtk_window_set_default_geometry,
  gtk_window_parse_geometry or gtk_window_set_geometry_hints, you may need
  to make some changes to your code.

107 108 109 110 111
* GtkDrawingArea used to implicitly render the theme background before
  calling the ::draw handler. This is no longer the case. If you rely
  on having a theme-provided background, call gtk_render_background()
  from your ::draw handler.

Matthias Clasen's avatar
Matthias Clasen committed
112
* The GtkFileChooser interface prerequisite changed from GtkWidget
113
  to GObject, allowing non-widget implementations of this interface.
Matthias Clasen's avatar
Matthias Clasen committed
114 115 116 117 118 119 120 121
  This is a minor change in ABI, as applications are no longer guaranteed
  that a GtkFileChooser also supports all GtkWidget methods. However, all
  previously existing implementations still derive from GtkWidget, so no
  existing code should break.

* The way in which GtkLevelBar determines the offset to apply was a bit
  inconsistent in the past; this has been fixed. Applications that are using
  custom offsets should double-check that their levels look as expected.
122

123 124 125 126 127 128 129 130 131 132 133 134
Release notes for 3.18
======================

* The GtkListBox model support that was introduced in 3.16 has been
  changed to no longer call gtk_widget_show_all on rows created by
  the create_widget_func. You need to manage the visibility of child
  widgets yourself in your create_widget_func.

* The alpha component of foreground colors that are applied to
  GtkCellRendererText is no longer ignored. If you don't want your
  text to be translucent, use opaque colors.

135 136 137 138 139 140
Release notes for 3.16
======================

* GTK+ now includes an OpenGL rendering widget. To support GL on various
  platforms, GTK+ uses libepoxy.

Matthias Clasen's avatar
Matthias Clasen committed
141 142 143
* GTK+ no longer uses gtk-update-icon-cache during its build. The
  --enable-gtk2-dependency configure option has been removed.

144 145 146 147 148
* The introspection annotations for the x and y parameters of
  GtkMenuPositionFunc have been corrected from 'out' to 'inout'.
  If you are using such a function from language-bindings, this
  may require adjustments.

Matthias Clasen's avatar
Matthias Clasen committed
149 150 151 152 153 154 155 156 157 158 159 160
* The lookup order for actions that are activated via keyboard
  accelerators has been changed to start at the currently focused
  widget. If your application is making use fo nested action groups
  via gtk_widget_insert_action_group, you may want to check that
  this change does not upset your accelerators.

* The GtkScrollable interface has gained a new vfunc, get_border,
  that is used to position overshoot and undershoot indications that
  are drawn over the content by GtkScrolledWindow. Unless your scrollable
  has non-scrolling parts similar to treeview headers, there is no need
  to implement this vfunc.

161
* The GtkSearchEntry widget has gained a number of new signals that
Matthias Clasen's avatar
Matthias Clasen committed
162 163 164 165
  are emitted when certain key sequences are seen. In particular, it
  now handles the Escape key and emits ::stop-search. Applications that
  expect to handle Escape themselves will need to be updated.

166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
Release notes for 3.14
======================

* A new state, GTK_STATE_FLAG_CHECKED, has been added for checked states
  of radio and check buttons and menuitems. Applications that are using
  GTK+ styles without widgets will need adjustments.

* Adwaita is now the default theme on all platforms.

* The icon theme code has become a little pickier about sizes and is not
  automatically scaling icons beyond the limits defined in the icon theme
  unless explicitly asked to do so with GTK_ICON_LOOKUP_FORCE_SIZE.

* GTK+ now includes an interactive debugger which can be activated with
  the keyboard shortcuts Ctrl-Shift-d or Ctrl-Shift-i. If these shortcuts
  interfere with application keybindings, they can be disabled with the
  setting org.gtk.Settings.Debug.enable-inspector-keybinding.

* Most widgets have been ported to use the new gesture framework internally
  for event handling. Traditional event handlers in derived widgets are still
  being called.

188 189 190 191
* Using GTK+ under X11 without the X Render extension has been observed
  to be problematic. This combination is using code paths in cairo and
  graphics drivers which are rarely tested and likely buggy.

192 193 194 195 196 197 198 199
* GtkTextView is now using a pixel-cache internally, and is drawing
  a background underneath the text. This can cause problems for applications
  which assumed that they could draw things below and above the text
  by chaining up in the ::draw implementation of their GtkTextView subclass.
  As a short-term workaround, you can make the application apply a
  custom theme to the text view with a transparent background. For
  a proper fix, use the new ::draw_layer vfunc.

200 201 202 203 204 205 206 207 208
Release notes for 3.12
======================

* GtkWidget had a hack where if opacity is 0.999 we set up an opacity
  group when rendering the widget. This is no longer needed in 3.10,
  and GtkStack doesn't use it anymore. It has been removed in 3.12.
  GdStack is using it, so applications should be ported from GdStack
  to GtkStack in 3.12.

209 210 211 212 213
* GtkHeaderBar in 3.10 was not ordering its pack-end children in
  the right way. This has been fixed in 3.12. Applications which
  pack multiple widgets at the end of a headerbar will have to
  be updated.

214 215 216 217 218
* gtk_text_view_add_child_in_window has changed behaviour a bit.
  It now always positions the child in buffer coordinates, where
  it used to inconsistently scroll with the buffer but then go
  reposition to a window-relative position on redraw.

219 220 221 222 223
* A number of container widgets have been made more compliant with
  the uniform CSS rendering model by making them render backgrounds
  and borders. This may require some adjustments in applications that
  were making assumptions about containers never rendering backgrounds.

224 225 226 227 228 229 230
Release notes for 3.10
======================

* GDK has been changed to allow only a single screen per display.
  Only the X11 backend had multiple screens before, and multi-screen
  setups (not multi-monitor!) are very rare nowadays. If you really
  need multiple X screens, open them as separate displays.
231

232 233 234 235 236 237
* The behavior of GtkBox::expand has been changed to never propagate
  up. Previously, this was happening inconsistently. If you want the
  expand to propagate, use the GtkWidget h/v expand properties.
  If you experience sizing problems with widgets in ported code,
  carefully check the expand and fill flags of your boxes.

238 239 240 241
* GtkBin no longer provides default implementations for
  get_height_for_width, subclasses now have to provide their own
  implementation if they need height-for-width functionality.

242 243 244 245 246 247
* Widget state propagation has been changed. Historically, all of
  active, prelight, selected, insensitive, inconsistent and backdrop
  have been propagated to children. This has now been restricted
  to just the insensitive and backdrop states. This mostly affects
  theming.

Alexander Larsson's avatar
Alexander Larsson committed
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
* The way widget drawing happens has changed. Earlier versions handled
  one expose event per GdkWindow, each with a separate cairo_t. Now we
  only handle the expose event on the toplevel and reuse the same
  cairo_t (with the right translation and clipping) for the entire
  widget hierarchy, recursing down via the GtkWidget::draw signal.
  Having all rendering in the same call tree allows effects like
  opacity and offscreen rendering of entire widget sub-hierarchies.
  Generally this should not require any changes in widgets, but
  code looking at e.g. the current expose event may see different
  behavior than before.

* The Gtk+ scrolling implementation has changed. gdk_window_scroll()
  and gdk_window_move_region() no longer copy the region on the
  window, but rather invalidate the entire scrolled region. This is
  slightly slower, but allowed us to implement a offscreen surface
  scrolling method which better fits modern hardware. Most scrolling
  widgets in Gtk+ have been converted to use this model for scrolling,
  but external widgets implementing scrolling using GdkWindow may see
  some slowdown.
267

Cosimo Cecchi's avatar
Cosimo Cecchi committed
268
Release notes for 3.8
269 270 271 272 273 274 275
=====================

* GtkIconInfo has changed from being a boxed type to a GObject. This
  is technically an ABI change, but basically all existing code
  will keep working if its used as a boxed type, and its not
  possible to instantiate GtkIconInfos outside Gtk, so this is not
  expected to be a big problem.
276

277 278 279
Release notes for 3.6
=====================

280 281 282 283 284 285 286 287 288 289 290
* The accessibility bridge code that exports accessible objects
  on the bus is now used by default; atk-bridge has been converted
  into a library that GTK+ links against. To void the linking,
  pass --without-atk-bridge when configuring GTK+.

* GDK threading support has been deprecated. It is recommended to
  use g_idle_add(), g_main_context_invoke() and similar funtions
  to make all GTK+ calls from the main thread.

* GTK+ now follows the XDG Base Directory specification for
  user configuration and data files. In detail,
291 292 293 294 295 296 297 298 299 300 301 302 303
  * $XDG_CONFIG_HOME/gtk-3.0/custom-papers is the new location
    for $HOME/.gtk-custom-papers
  * $XDG_CONFIG_HOME/gtk-3.0/bookmarks is the new location
    for $HOME/.gtk-bookmarks
  * $XDG_DATA_HOME/themes is preferred over $HOME/.themes
  * $XDG_DATA_HOME/icons is preferred over $HOME/.icons.
  Existing files from the old location will still be read
  if the new location does not exist.

* $HOME/.gtk-3.0 is no longer in the default module load path.
  If you want to load modules from there, add it to the GTK_PATH
  environment variable.

304 305 306
Release notes for 3.4
=====================

307 308 309
* Scroll events have been separated from button events, and smooth
  scrolling has been added with a separate event mask. Widgets now
  need to have either GDK_SCROLL_MASK or GDK_SMOOTH_SCROLL_MASK in
310 311 312 313
  their event mask to receive scroll events. In addition, the
  GdkScrollDirection enumeration has gained a new member,
  GDK_SCROLL_SMOOTH, so switch statements will have to be amended
  to cover this case.
314

315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
* GTK+ now uses <Primary> instead of <Control> in keyboard accelerators,
  for improved cross-platform handling. This should not affect
  applications, unless they parse or create these accelerator
  manually.

* The tacit assumption that the Alt key corresponds to the MOD1
  modifier under X11 is now a hard requirement.

* The beagle search backend for the file chooser has been dropped.
  Tracker is the only supported search backend on Linux now.

* GtkNotebook has been changed to destroy its action widgets when
  it gets destroyed itself. If your application is using action
  widgets in notebooks, you may have to adjust your code to take
  this into account.

* GtkApplication no longer uses the gtk mainloop wrappers, so
  it is no longer possible to use gtk_main_quit() to stop it.

334 335
* The -uninstalled variants of the pkg-config files have been dropped.

336 337 338 339
* Excessive dependencies have been culled from Requires: lines
  in .pc files. Dependent modules may have to declare dependencies
  that there were getting 'for free' in the past.

340 341 342 343 344 345 346
Release notes for 3.2
=====================

* The accessible implementations for GTK+ widgets have been integrated
  into libgtk itself, and the gail module does not exist anymore. This
  change should not affect applications very much.

347 348 349 350 351 352 353 354 355 356 357
Release notes for 3.0
=====================

* GTK+ 3 is a major new version of GTK+, which is parallel installable
  with GTK+ 2.x. For information about porting applications from GTK+ 2.x
  to GTK+ 3, see the file:

  docs/reference/gtk/html/migrating.html

  Or online at:

358
  http://library.gnome.org/devel/gtk/3.0/migrating.html
359 360 361 362 363

* Note that the library sonames in this release have been changed from
  libgtk-3.0 and libgdk-3.0 to libgtk-3 and libgdk-3, to prevent the
  library versions from going backwards, compared to the 2.90/91/99
  releases. Applications will have to be recompiled.