Compare commits
400 Commits
path-tests
...
gtk-3-16
| Author | SHA1 | Date | |
|---|---|---|---|
| 4dd10b5ca5 | |||
| 8c27e3e1cd | |||
| 2ae6fd192f | |||
| 334893c6c6 | |||
| 90a1a3c0f4 | |||
| 52b88b29fb | |||
| d90e9e4058 | |||
| a4b2626ecb | |||
| 9092cc8851 | |||
| 76d4d1cfbb | |||
| 185a00b512 | |||
| 57858976c7 | |||
| 5cdffae939 | |||
| c2589026ae | |||
| 35a4fd0996 | |||
| 930addf5a6 | |||
| 4191592856 | |||
| f30322bd98 | |||
| 369ae4d9b1 | |||
| 67c49a5d46 | |||
| b7d9cd8f4e | |||
| 0676846783 | |||
| 99f3d861d9 | |||
| c733be4913 | |||
| 6b9edc43af | |||
| bf7fc2fc59 | |||
| 52f896e373 | |||
| ae0469987d | |||
| 7fc170a879 | |||
| 119fc5242e | |||
| cf2a41cb52 | |||
| 47964f360f | |||
| 7b80655821 | |||
| 30a62f1929 | |||
| 0fb13e3650 | |||
| 6db121da89 | |||
| ff9ee56ec0 | |||
| 40622c6924 | |||
| b41e24b330 | |||
| 64fb8deb1f | |||
| 9898e81d43 | |||
| 669699e4cf | |||
| 50eb8d9b42 | |||
| 72f35cc361 | |||
| ed78fc391a | |||
| 1c66c4b385 | |||
| 6e95d4cb17 | |||
| 1b67f3e399 | |||
| a1f15bd9cb | |||
| 05fcff8e73 | |||
| bb9401f35a | |||
| 9cea93847f | |||
| a6144ebe54 | |||
| 6950ac7cc9 | |||
| 0749199d4c | |||
| 434c7220d7 | |||
| 64954444ae | |||
| 6978db3a52 | |||
| 1debaed676 | |||
| b695d7392a | |||
| fe783cf271 | |||
| b9e0a54a42 | |||
| 0002a8a604 | |||
| b46b40bbc6 | |||
| 542413feca | |||
| fe104915e4 | |||
| 4d049c989b | |||
| 34a2c6a2ee | |||
| 074fd13350 | |||
| c9267b30d7 | |||
| 6ea7c290a3 | |||
| 0993cdf79f | |||
| 32c81cfd65 | |||
| 575f334ce5 | |||
| 48fba6911a | |||
| d833c05f6e | |||
| 66f9dcd93b | |||
| 236d2d3cf1 | |||
| ff9349bfdd | |||
| 2f817322fd | |||
| 5557dd8fce | |||
| ff7d67b33c | |||
| 3460a4d507 | |||
| 5bbf0baa7f | |||
| 2c7974a69d | |||
| 64affb0406 | |||
| 0558b0c439 | |||
| 7566066000 | |||
| 683ccd28e8 | |||
| 7c35d52f3c | |||
| 1a8e9dbb8f | |||
| bb1750c05f | |||
| afa82a63a9 | |||
| 657d0d79b3 | |||
| 1539cdd783 | |||
| 85ff269adf | |||
| 92933fd3ad | |||
| 28e7721075 | |||
| a074d86842 | |||
| 9ff88ce2c7 | |||
| d509888580 | |||
| 3d9cce79cf | |||
| a90c7f191f | |||
| 45767b8eaa | |||
| 4223812fdc | |||
| facf2ac2bb | |||
| 533f4bf966 | |||
| 905ccd1862 | |||
| 8d3fb714f0 | |||
| 8da9fc8d4f | |||
| 5abc4af10a | |||
| 22d0c317c2 | |||
| b33270aa7c | |||
| 0af53e9d5a | |||
| db690c621d | |||
| cf120a0fa8 | |||
| f770957d6a | |||
| 37e36e7f1d | |||
| 356edc5483 | |||
| 6f7f1028fa | |||
| 72d298229f | |||
| 3139588797 | |||
| 5cd3714de4 | |||
| f123bd92bb | |||
| 39cb51bb07 | |||
| ba750ec9d2 | |||
| 21b616e2b3 | |||
| 13b84cd35f | |||
| 5ae01c4f2c | |||
| dacdf753bf | |||
| ddade37d79 | |||
| 3b0be42f72 | |||
| d67cf43be9 | |||
| 227b5a81bc | |||
| 3258d5ba2e | |||
| b45caa8999 | |||
| 8e4cd4cc7a | |||
| ebdd24ac3a | |||
| 93abfb10ad | |||
| 3ef53101ab | |||
| 2cf5eddceb | |||
| b867f1970c | |||
| d87769dcd5 | |||
| 6ff49ee93d | |||
| 673013ac67 | |||
| e2b9ac89b0 | |||
| bb0561f356 | |||
| de93dd85e0 | |||
| c73715db09 | |||
| daa8320d45 | |||
| 4e40260d73 | |||
| 873cc0e352 | |||
| cef7b4670f | |||
| 90ee25f8e9 | |||
| c0f0874cf9 | |||
| aaee5f77ca | |||
| 64eead25c0 | |||
| 5185ba38bb | |||
| 23374f9f83 | |||
| 509741b1d7 | |||
| 40b489b6e2 | |||
| 4217fccbc9 | |||
| 086e885c02 | |||
| b737bfec24 | |||
| 570fd6c185 | |||
| 151e74c12d | |||
| 09408aca1e | |||
| 103346c780 | |||
| ed9b598e9b | |||
| 927d8e84dc | |||
| 9c307fedc9 | |||
| 27130ab6b1 | |||
| 0f18e90734 | |||
| be8ff8e56a | |||
| 6e92757ed0 | |||
| d2df0aa7ca | |||
| db4b1e62fe | |||
| 68e31e19fe | |||
| 9cbcd541d9 | |||
| 3d9f024deb | |||
| 2252876614 | |||
| 2d873f3449 | |||
| adeca58af7 | |||
| ee184e895a | |||
| 2f91f31b1a | |||
| 6f7e6f68be | |||
| 7802bbd9c5 | |||
| 1bb0c94767 | |||
| 1062be1115 | |||
| 2954c9c09b | |||
| f9bf9295c5 | |||
| d041ff409a | |||
| efaaa3a4a8 | |||
| 385798c89f | |||
| d597d5beca | |||
| 32e7d5ae59 | |||
| cc03e3319c | |||
| 5efed59da1 | |||
| 5174ad9001 | |||
| 732e313a7a | |||
| 77c5cef932 | |||
| 21216fc8b1 | |||
| 932ed7cd51 | |||
| e9d65c9d51 | |||
| ee6f29ae19 | |||
| 5d3c596a84 | |||
| c6c56f387a | |||
| 8069712a0e | |||
| f971d4e4f6 | |||
| bf7e5d48a3 | |||
| 201918c501 | |||
| afb1132f7a | |||
| 9270638f38 | |||
| ae8fe51669 | |||
| 122d72f5da | |||
| 2e6c86310f | |||
| 259fc130fd | |||
| 996a4f3d82 | |||
| d732df385f | |||
| 165684fb7a | |||
| 6fc72c423d | |||
| 171448e4c4 | |||
| 5ff8f6824d | |||
| 9a75337b5f | |||
| cc74421272 | |||
| 17b5ee4067 | |||
| 43c10fd785 | |||
| d74502e81f | |||
| 8cd76cdd08 | |||
| 62cdbb85aa | |||
| 105d954946 | |||
| abfd4ddcf6 | |||
| ae71ac49f2 | |||
| f9ed596de9 | |||
| 8de39d8d46 | |||
| 456b5e50b5 | |||
| 6bdcac4c45 | |||
| 7b2f3a0887 | |||
| e1e5cd881e | |||
| b28868cf72 | |||
| 78ba188814 | |||
| ffd944f1c1 | |||
| df0f5569d1 | |||
| c8dc2dee78 | |||
| f323633883 | |||
| 272f43cae7 | |||
| 527d64e68b | |||
| c986d6ce78 | |||
| ee679931ab | |||
| fb54abb087 | |||
| 946cc8ae4d | |||
| e6db3b556e | |||
| 80881406ef | |||
| 588c93ff36 | |||
| 290a31c614 | |||
| ac41eb4fac | |||
| 06efce6fa2 | |||
| 45fb396343 | |||
| c7b96d8579 | |||
| 08bf5c4d8c | |||
| 4784d35ec4 | |||
| 95e80ef6f8 | |||
| 53d253d1f0 | |||
| 5be441699b | |||
| ccea7799c4 | |||
| 755bda4bf5 | |||
| ed36e29ec4 | |||
| 3a40225872 | |||
| 9753499a77 | |||
| 3894d1923c | |||
| 7963f68929 | |||
| 2baadce9c6 | |||
| f65d46ff2f | |||
| 28cc8dc745 | |||
| b6b03e261a | |||
| 3824f7a44c | |||
| 2aec572a2f | |||
| b52654b03d | |||
| c9dadf92fe | |||
| 83d22b4df9 | |||
| 2edbbe716d | |||
| d563b943ed | |||
| ac12895430 | |||
| fbd9092755 | |||
| f39d0ede70 | |||
| 1d54e38818 | |||
| 260c2b7477 | |||
| 398aeb31b3 | |||
| 846bd99cdd | |||
| ebca729cd1 | |||
| 1597e2e6b8 | |||
| 24be2232b5 | |||
| 56d509b09b | |||
| 287e2250e0 | |||
| a696ac14f0 | |||
| 0c83e6f52a | |||
| 9b3af5878f | |||
| 862a1c36ef | |||
| b77c6b1b97 | |||
| 59861241ad | |||
| 1e8b89a5ce | |||
| 7cea667a3e | |||
| 293b53bb00 | |||
| 739fdecc09 | |||
| 390414e635 | |||
| e1da396e5d | |||
| 992ff9818c | |||
| 6d75d452aa | |||
| c7dd439d4f | |||
| a7f06d2ae6 | |||
| f72db440b5 | |||
| 732671f639 | |||
| d4c7fcd050 | |||
| 318c784b3e | |||
| 80df4f3b1c | |||
| 047c6210ad | |||
| a455c3cc49 | |||
| 99a0b320a3 | |||
| df2c1c4d5d | |||
| 2eab2d79b7 | |||
| b83f8bd825 | |||
| 9f5eb8f021 | |||
| e3d64fb0e2 | |||
| 1a9d78c58d | |||
| 64c6869708 | |||
| afd8697baa | |||
| b652f840f2 | |||
| 349fbb1eac | |||
| 3399395234 | |||
| f52e9bffd6 | |||
| 7be4d69868 | |||
| 36f02f4041 | |||
| 08d649de2f | |||
| 0235e4c7a1 | |||
| de00a55751 | |||
| ba6fd13d38 | |||
| 2ecd3b033d | |||
| db7732ee6c | |||
| 9b9aa14ef7 | |||
| bff9f190aa | |||
| 867dcd3d67 | |||
| cb25f48bf6 | |||
| 76a37d542e | |||
| c30f74e506 | |||
| 1768f3e5dd | |||
| 28fde2f320 | |||
| 511d7c3304 | |||
| 885b5bbe30 | |||
| 289a8e824d | |||
| 524ccf6d42 | |||
| eaa77f6918 | |||
| 2984dcdbe5 | |||
| 111a84bd1c | |||
| 32c4bcbd3e | |||
| 31252c1fe4 | |||
| dd09993f37 | |||
| c0727abccc | |||
| 9a27dca38f | |||
| ca3c79e997 | |||
| 1d24014a8b | |||
| 9da241b2d0 | |||
| fef7d65685 | |||
| 0230fff141 | |||
| da5cbcaf86 | |||
| 0707a2fa0e | |||
| d370d130fb | |||
| c96df5a350 | |||
| 41e863a0f0 | |||
| 9bc2bbf782 | |||
| 586cdb63e4 | |||
| 2506683cc3 | |||
| bcfa4eec25 | |||
| 59674ba8f4 | |||
| e497363d60 | |||
| e166747170 | |||
| 79ab6c8963 | |||
| 2d5b801a28 | |||
| beb19b389b | |||
| 539caa897a | |||
| a816ccd496 | |||
| 3a2f5634ee | |||
| 4cee145764 | |||
| 14289cfb3e | |||
| 9c45420bd8 | |||
| b4c6fb6334 | |||
| 686fec77cb | |||
| f5051cca83 | |||
| 6f748c31ca | |||
| 56583717fe | |||
| 1d93297a3a | |||
| 7c63374093 | |||
| 0a39d7d91e | |||
| 139ed7409f | |||
| e995c0d1bf | |||
| 9ec5b3f9a1 | |||
| 223209ecaa | |||
| 8d6b19533f | |||
| 17b65d3c8a | |||
| 847a79c5f9 | |||
| 24db6d5518 |
@@ -1,3 +1,247 @@
|
||||
Overview of changes in GTK+ 3.16.7
|
||||
==================================
|
||||
|
||||
* Bugs fixed:
|
||||
345345 PrintOperation::paginate is not emitted for class handler
|
||||
579466 gtk_entry_completion_insert_action documentation is misleading
|
||||
751721 No release event for shift key when both shift keys were pressed
|
||||
753621 Calculate screen physical size
|
||||
753628 user options of wrong printer are used
|
||||
753644 Switching from Multipress input method to None immediately kills...
|
||||
754535 Cursor disappears only on adding characters
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
Czech
|
||||
German
|
||||
Hungarian
|
||||
Indonesian
|
||||
Lithuanian
|
||||
Polish
|
||||
Portuguese
|
||||
Swedish
|
||||
|
||||
|
||||
Overview of changes in GTK+ 3.16.6
|
||||
==================================
|
||||
|
||||
* OS X: Partial aspect ratio support
|
||||
|
||||
* Revert a problematic change to scroll event handling
|
||||
|
||||
* Bug fixes:
|
||||
741800 GTK3 apps have huge rendering pauses/hangs over SSH connection
|
||||
751401 crash on DnD
|
||||
751625 build error with pure wayland
|
||||
752016 testgmenu: use the menu binding code
|
||||
752093 Improvement to GtkImageMenuItem long description and code snippet
|
||||
752520 Crash getting a NULL visual in glx_pixmap_get
|
||||
|
||||
* Translation updates:
|
||||
Czech
|
||||
Hungarian
|
||||
Lithuanian
|
||||
Polish
|
||||
Slovenian
|
||||
|
||||
|
||||
Overview of changes in GTK+ 3.16.5
|
||||
==================================
|
||||
|
||||
* Bug fixes:
|
||||
750489 gtk settings c910 warning unexpected annotation element type command
|
||||
750605 icontheme: don't modify symbolic SVG dimensions when recoloring
|
||||
750690 Recent Chooser Widget doesn't expand
|
||||
750718 Improve documentation for deprecated properties
|
||||
750870 gtk3 does apparently ignore replayed events?
|
||||
750888 Fix return value error in _gtk_text_handle_set_direction
|
||||
750994 X11: First mouse wheel event ignored after right click or Alt+Tab...
|
||||
751018 Widget: GtkMenuButton+GtkPopover gtk_toggle_button_set_active() n...
|
||||
751050 Moving the mouse while a stepper is activated causes the scrollba...
|
||||
751082 GtkTreeView draw performance is bad when contents are not larger ...
|
||||
751227 file picker list box height stretches to match extra widgets area...
|
||||
751443 resource_path value cleared in gtk_image_set_from_resource
|
||||
751739 Deadlock in X11 when setting XSetErrorHandler while another threa...
|
||||
751752 Memleak when both opening shm and opening file in tmp fail
|
||||
751754 GtkSwitch: calling gtk_switch_set_active in the handler for notif...
|
||||
Fix ridge/groove border rendering
|
||||
GtkListBoxRow: propagate in the draw vfunc
|
||||
|
||||
* Translation updates:
|
||||
German
|
||||
|
||||
|
||||
Overview of changes in GTK+ 3.16.4
|
||||
==================================
|
||||
|
||||
* Bug fixes:
|
||||
693738 gtk print dialog shows "Getting printer information failed" for...
|
||||
719683 Escaping issue "Failed to set text from markup due to error par...
|
||||
745957 GTK+/Quartz >= 3.14.8: Symbol not found: _gtk_drag_cancel (MyPa...
|
||||
749451 Windows have no border
|
||||
749593 Miscellaneous test fixes
|
||||
749893 Crash when trying to drag a tab from a populated GtkNotebook in...
|
||||
750058 bad options for the keybindings in css instructions generate a ...
|
||||
750384 GtkDialog can not be moved when gtk_dialog_run from GtkListBox ...
|
||||
750477 GtkFileChooserButton's label isn't xalign=0'ed
|
||||
750505 Main grid overlaps GtkPopover
|
||||
|
||||
* Translation updates:
|
||||
Czech
|
||||
Occitan
|
||||
Polish
|
||||
Slovenian
|
||||
|
||||
|
||||
Overview of changes in GTK+ 3.16.3
|
||||
==================================
|
||||
|
||||
* Bug fixes:
|
||||
737175 most horizontal sliders are inverted when scrolled with mouse...
|
||||
746916 File chooser search does not work over remote network shares
|
||||
746925 [HighContrast] Backdrop active (sensitive) GtkSwitch should l...
|
||||
747634 gdk_set_program_class() breaks --class
|
||||
747805 Split Headerbar unmaximize
|
||||
747808 window: fix initial shadow width for maximized/fullscreen win...
|
||||
748013 Adwaita: keyboard navigation outline on first/last button in ...
|
||||
748014 W32: Tilting mousewheel left/right does not scroll horizontally
|
||||
748061 GtkMessageDialog: Minor documentation update
|
||||
748341 GdkOffscreenWindow should not segfault on gdk_window_beep()
|
||||
748346 build: Avoid xgettext crash on MSYS2
|
||||
748500 GtkSearchEntry docs incorrectly link to themselves
|
||||
748615 GtkWindow: Get the correct shadow width even before window is...
|
||||
748640 Documentation misses out example source files when not buildi...
|
||||
748782 fontchooser should reload list of families/styles on theme ch...
|
||||
748783 Remove PANGO_ENABLE_BACKEND from gtksettings.c
|
||||
748992 GtkFontChooserWidget: Remove unused struct field
|
||||
749009 notify test fails without a session bus
|
||||
749012 GtkStack: Don't emit notify::visible-child during destruction
|
||||
749021 GtkStackSwitcher: Don't emit notify::visible-child when setti...
|
||||
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
Czech
|
||||
Danish
|
||||
French
|
||||
Icelandic
|
||||
Occitan
|
||||
Russian
|
||||
Slovenian
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of changes in GTK+ 3.16.2
|
||||
==================================
|
||||
|
||||
* Bug fixes:
|
||||
746706 Serious accessible event spewage from Gtk+ table cells
|
||||
747288 [HighContrast] Insensitive backdrop ListBoxRow have an...
|
||||
747471 [wayland] gdk_screen_get_monitor_geometry() returns in...
|
||||
747539 popover: Remove signal handlers in dispose
|
||||
747608 Scrollbar hiding / unhiding does not work with a stylus
|
||||
747689 [HighContrast] Selected ListBoxRow’s Label is white on...
|
||||
Avoid a crash in GtkApplication
|
||||
Avoid a crash with GtkTreeview rubberbanding
|
||||
GtkApplication: Prevent more crashes around shutdown
|
||||
Prevent tab close button size changes
|
||||
|
||||
* Translation updates:
|
||||
Icelandic
|
||||
Swedish
|
||||
|
||||
|
||||
Overview of changes in GTK+ 3.16.1
|
||||
==================================
|
||||
|
||||
* Improve client-side decorations without a compositor
|
||||
|
||||
* Bug fixes:
|
||||
132197 Horizontal Scrolling Using Modifier Key and Scroll Wheel
|
||||
402168 Add underline-color and strikethrough-color to GtkTextTag properties
|
||||
613833 Unnecessary queue_resize() for GtkImage
|
||||
671362 Fixes for GtkRadioMenuItem
|
||||
734741 GtkScale's fill-level starts at the very left if show-fill-level is set
|
||||
737175 most horizontal sliders are inverted when scrolled with mouse wheel
|
||||
746222 Improve CSD windows without a compositor
|
||||
746253 has-tooltip property interferes with event-compression
|
||||
746301 Opening "Sound" panel generates pixman error
|
||||
746391 inspector: Make it easier to cut'n'paste advice message
|
||||
746468 gtkcairoblur is slow
|
||||
746586 critical warnings in a11y if focus widget is destroyed
|
||||
746602 Invalid writes through dangling weak pointers in DND code cause crashes
|
||||
746688 GtkProgressBar doesn't respect its style properties
|
||||
746712 Range ignores the "inverted" property
|
||||
746746 gtk3-demo 'OpenGL Area' crashes on systems with old OpenGL version
|
||||
746784 GtkBooleanCellAccessible emits state-changed:checked signals instead...
|
||||
746817 GtkRadioButton keynav uses wrong succession
|
||||
746821 W32: Maximized window is obscured by the taskbar
|
||||
746862 popover clears shadow of underlying widgets
|
||||
746893 gtk_list_box_bind_model is not introspectable
|
||||
746904 make it possible to disable libcanberra
|
||||
746961 new scroll bar "hides" after click+drag+release while mouse is still...
|
||||
747096 small cleanup in textbuffer clipoard handling
|
||||
747133 overshoot animation is stopped on libinput-managed touchpads
|
||||
747305 x11/gl: Use after free in glx_pixmap_get()
|
||||
747406 Fix indicator proximity checks
|
||||
747407 Make indicators pop out when needed
|
||||
|
||||
* GtkListBox
|
||||
- There has been a minor API break on the return value of the
|
||||
GtkListBoxCreateWidgetFunc callback. Previously, we would leak a
|
||||
full reference returned by this callback and now we free it.
|
||||
|
||||
* Translation updates:
|
||||
Basque
|
||||
Catalan
|
||||
Czech
|
||||
Galician
|
||||
Greek
|
||||
Hebrew
|
||||
Hungarian
|
||||
Italian
|
||||
Korean
|
||||
Lithuanian
|
||||
Polish
|
||||
Russian
|
||||
Slovak
|
||||
Slovenian
|
||||
Spanish
|
||||
Tajik
|
||||
Vietnamese
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.16.0
|
||||
==================================
|
||||
|
||||
* Theming: Fixes for the HighContrast theme
|
||||
|
||||
* Wayland: Fix Clipboard handling
|
||||
|
||||
* Bug fixes:
|
||||
746148 Overlay controls unusable in HighContrast
|
||||
746149 “Close tab” buttons change the tab high on hover when using...
|
||||
746188 insensitive ModelButtons are not drawn insensitive
|
||||
746358 insensitive active backdrop GtkSwitches should probably loo...
|
||||
746368 the “selected color” mark is always black, even for black
|
||||
746369 “no date selection” (white on white)
|
||||
746370 GtkExpander doesn't show it is expanded when using HighCont...
|
||||
746386 clipboard crash when other client becomes the selection owner
|
||||
|
||||
* Translation updates:
|
||||
Basque
|
||||
Bosnian
|
||||
Bulgarian
|
||||
Chinese (Taiwan)
|
||||
Hungarian
|
||||
Indonesian
|
||||
Japanese
|
||||
Norwegian bokmål
|
||||
Serbian
|
||||
Swedish
|
||||
Turkish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.15.12
|
||||
===================================
|
||||
|
||||
|
||||
@@ -76,8 +76,8 @@ Even better are git-formatted patches. (Use git format-patch)
|
||||
Release notes for 3.16
|
||||
======================
|
||||
|
||||
* GTK+ now includes an OpenGL rendering widget. To support GL on various
|
||||
platforms, GTK+ uses libepoxy.
|
||||
* GTK+ now includes an OpenGL rendering widget. To support GL on
|
||||
various platforms, GTK+ uses libepoxy.
|
||||
|
||||
* GTK+ no longer uses gtk-update-icon-cache during its build. The
|
||||
--enable-gtk2-dependency configure option has been removed.
|
||||
@@ -99,7 +99,7 @@ Release notes for 3.16
|
||||
has non-scrolling parts similar to treeview headers, there is no need
|
||||
to implement this vfunc.
|
||||
|
||||
* The GtkSearchEntry widget has gained a number of new signal that
|
||||
* The GtkSearchEntry widget has gained a number of new signals that
|
||||
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.
|
||||
|
||||
@@ -54,13 +54,26 @@ def gen_gtk_filelist(srcroot, subdir, dest):
|
||||
'gtk_base_c_sources',
|
||||
'gtk_clipboard_dnd_c_sources'])
|
||||
|
||||
vars_depr = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'deprecated', 'Makefile.inc'),
|
||||
vars = {},
|
||||
conds = {},
|
||||
filters = ['deprecated_h_sources',
|
||||
'deprecated_c_sources'])
|
||||
|
||||
vars_a11y = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'a11y', 'Makefile.inc'),
|
||||
vars = {},
|
||||
conds = {},
|
||||
filters = ['a11y_h_sources',
|
||||
'a11y_c_sources'])
|
||||
|
||||
vars['gtk_other_src'] = 'gtkprintoperation-win32.c gtktypebuiltins.h gtktypebuiltins.c'
|
||||
|
||||
files = vars['gtkinclude_HEADERS'].split() + \
|
||||
vars['a11yinclude_HEADERS'].split() + \
|
||||
vars['deprecatedinclude_HEADERS'].split() + \
|
||||
vars_a11y['a11y_h_sources'].split() + \
|
||||
vars_depr['deprecated_h_sources'].split() + \
|
||||
vars['gtk_base_c_sources'].split() + \
|
||||
vars['gtk_clipboard_dnd_c_sources'].split() + \
|
||||
vars_a11y['a11y_c_sources'].split() + \
|
||||
vars_depr['deprecated_c_sources'].split() + \
|
||||
vars['gtk_other_src'].split()
|
||||
|
||||
sources = [i for i in files \
|
||||
|
||||
@@ -292,7 +292,7 @@ copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtksepar
|
||||
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparatortoolitem.h
|
||||
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-3.0\gtk\gtksettings.h
|
||||
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-3.0\gtk\gtkshow.h
|
||||
copy ..\..\..\gtk\gtksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtksidebar.h
|
||||
copy ..\..\..\gtk\gtkstacksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtkstacksidebar.h
|
||||
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-3.0\gtk\gtksizegroup.h
|
||||
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-3.0\gtk\gtksizerequest.h
|
||||
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-3.0\gtk\gtksocket.h
|
||||
|
||||
@@ -288,7 +288,7 @@ copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtksepar
|
||||
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparatortoolitem.h

|
||||
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-3.0\gtk\gtksettings.h

|
||||
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-3.0\gtk\gtkshow.h

|
||||
copy ..\..\..\gtk\gtksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtksidebar.h

|
||||
copy ..\..\..\gtk\gtkstacksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtkstacksidebar.h

|
||||
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-3.0\gtk\gtksizegroup.h

|
||||
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-3.0\gtk\gtksizerequest.h

|
||||
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-3.0\gtk\gtksocket.h

|
||||
|
||||
+35
-11
@@ -9,9 +9,9 @@
|
||||
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
|
||||
|
||||
m4_define([gtk_major_version], [3])
|
||||
m4_define([gtk_minor_version], [15])
|
||||
m4_define([gtk_micro_version], [12])
|
||||
m4_define([gtk_interface_age], [0])
|
||||
m4_define([gtk_minor_version], [16])
|
||||
m4_define([gtk_micro_version], [7])
|
||||
m4_define([gtk_interface_age], [7])
|
||||
m4_define([gtk_binary_age],
|
||||
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
|
||||
m4_define([gtk_version],
|
||||
@@ -348,8 +348,7 @@ backend_immodules=
|
||||
have_gio_unix=no
|
||||
GDK_BACKENDS=
|
||||
GDK_EXTRA_LIBS=
|
||||
# expoxy.pc has Cflags: -I${includedir}, but pkg-config swallows that :-(
|
||||
GDK_EXTRA_CFLAGS="-I${prefix}/include"
|
||||
GDK_EXTRA_CFLAGS=
|
||||
GDK_WINDOWING=
|
||||
PANGO_PACKAGES="pango pangocairo"
|
||||
|
||||
@@ -474,6 +473,7 @@ if test "$enable_mir_backend" = "yes"; then
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_MIR"
|
||||
MIR_PACKAGES="$MIR_DEPENDENCIES"
|
||||
have_gio_unix=yes
|
||||
|
||||
AM_CONDITIONAL(USE_MIR, true)
|
||||
else
|
||||
@@ -667,7 +667,7 @@ ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`"
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
AC_MSG_CHECKING([whether xgettext supports ui files])
|
||||
if $ac_cv_path_XGETTEXT --output=- --language=Glade $srcdir/gtk/ui/gtkfilechooserwidget.ui > /dev/null 2>&1; then
|
||||
if $ac_cv_path_XGETTEXT --output=- --color=no --language=Glade $srcdir/gtk/ui/gtkfilechooserwidget.ui > /dev/null 2>&1; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
@@ -1660,12 +1660,35 @@ AM_CONDITIONAL(HAVE_COLORD, test "x$have_colord" = "xyes")
|
||||
# Check for libcanberra (only used in examples)
|
||||
##################################################
|
||||
|
||||
PKG_CHECK_MODULES(LIBCANBERRA, libcanberra-gtk3,
|
||||
have_libcanberra=yes, have_libcanberra=no)
|
||||
if test "$have_libcanberra" = "yes"; then
|
||||
AC_DEFINE(HAVE_LIBCANBERRA, 1, [define if we have libcanberra])
|
||||
AC_ARG_ENABLE(libcanberra,
|
||||
[AS_HELP_STRING([--enable-libcanberra],
|
||||
[enable libcanberra support in examples [default=auto]])],
|
||||
[enable_libcanberra="$enableval"],
|
||||
[enable_libcanberra=auto])
|
||||
|
||||
AC_MSG_CHECKING([whether to use libcanberra])
|
||||
if test "$enable_libcanberra" != "no"; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
have_libcanberra=no
|
||||
if test "$enable_libcanberra" != "no"; then
|
||||
PKG_CHECK_MODULES(LIBCANBERRA, libcanberra-gtk3,
|
||||
have_libcanberra=yes, have_libcanberra=no)
|
||||
if test "$enable_libcanberra" = "yes"; then
|
||||
if test "$have_libcanberra" = "no"; then
|
||||
AC_MSG_ERROR([--enable-libcanberra specified, but not available])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$have_libcanberra" = "yes"; then
|
||||
AC_DEFINE(HAVE_LIBCANBERRA, 1, [define if we have libcanberra])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_LIBCANBERRA, test "x$have_libcanberra" = "xyes")
|
||||
|
||||
##################################################
|
||||
# Checks for gtk-doc and docbook-tools
|
||||
##################################################
|
||||
@@ -1703,7 +1726,7 @@ if test "$enable_man" != no; then
|
||||
dnl check for DocBook XSL stylesheets in the local catalog
|
||||
JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
|
||||
[DocBook XSL Stylesheets], [have_docbook_style=yes],[have_docbook_style=no])
|
||||
if test "$have_docbook_dtd" != yes; then
|
||||
if test "$have_docbook_style" != yes; then
|
||||
if test "$enable_man" = yes ; then
|
||||
AC_MSG_ERROR([DocBook XSL Stylesheets are required for --enable-man])
|
||||
fi
|
||||
@@ -1938,6 +1961,7 @@ echo " Print backends: $PRINT_BACKENDS"
|
||||
echo " Dynamic modules: $build_dynamic_modules"
|
||||
echo " Included immodules: $included_immodules"
|
||||
echo " colord support: $have_colord"
|
||||
echo " libcanberra support: $have_libcanberra"
|
||||
echo " Introspection: $found_introspection"
|
||||
echo " Debugging: $enable_debug"
|
||||
echo " Documentation: $enable_gtk_doc"
|
||||
|
||||
@@ -173,7 +173,7 @@ dist_appsicon32_DATA = data/32x32/gtk3-demo.png data/32x32/gtk3-demo-symbolic.sy
|
||||
dist_appsicon48_DATA = data/48x48/gtk3-demo.png data/48x48/gtk3-demo-symbolic.symbolic.png
|
||||
dist_appsicon256_DATA = data/256x256/gtk3-demo.png data/256x256/gtk3-demo-symbolic.symbolic.png
|
||||
|
||||
update_icon_cache = gtk-update-icon-cache --ignore-theme-index --force
|
||||
update_icon_cache = $(top_builddir)/gtk/gtk-update-icon-cache --ignore-theme-index --force
|
||||
|
||||
install-data-hook: install-update-icon-cache
|
||||
uninstall-hook: uninstall-update-icon-cache
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
*
|
||||
* Demonstrates migrating a window between different displays.
|
||||
* A display is a mouse and keyboard with some number of
|
||||
* associated monitors. The neat thing about having multiple
|
||||
* associated monitors. The neat thing about having multiple
|
||||
* displays is that they can be on a completely separate
|
||||
* computers, as long as there is a network connection to the
|
||||
* computer where the application is running.
|
||||
@@ -26,9 +26,6 @@
|
||||
* - Using GtkDialog
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#undef GDK_DISABLE_DEPRECATED
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
|
||||
@@ -220,6 +220,9 @@ realize (GtkWidget *widget)
|
||||
{
|
||||
gtk_gl_area_make_current (GTK_GL_AREA (widget));
|
||||
|
||||
if (gtk_gl_area_get_error (GTK_GL_AREA (widget)) != NULL)
|
||||
return;
|
||||
|
||||
init_buffers (&position_buffer, NULL);
|
||||
init_shaders (&program, &mvp_location);
|
||||
}
|
||||
@@ -230,6 +233,9 @@ unrealize (GtkWidget *widget)
|
||||
{
|
||||
gtk_gl_area_make_current (GTK_GL_AREA (widget));
|
||||
|
||||
if (gtk_gl_area_get_error (GTK_GL_AREA (widget)) != NULL)
|
||||
return;
|
||||
|
||||
glDeleteBuffers (1, &position_buffer);
|
||||
glDeleteProgram (program);
|
||||
}
|
||||
@@ -271,6 +277,9 @@ static gboolean
|
||||
render (GtkGLArea *area,
|
||||
GdkGLContext *context)
|
||||
{
|
||||
if (gtk_gl_area_get_error (area) != NULL)
|
||||
return FALSE;
|
||||
|
||||
/* Clear the viewport */
|
||||
glClearColor (0.5, 0.5, 0.5, 1.0);
|
||||
glClear (GL_COLOR_BUFFER_BIT);
|
||||
|
||||
@@ -128,7 +128,7 @@ key_press_event (GtkWidget *text_view,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Links can also be activated by clicking.
|
||||
/* Links can also be activated by clicking or tapping.
|
||||
*/
|
||||
static gboolean
|
||||
event_after (GtkWidget *text_view,
|
||||
@@ -136,15 +136,30 @@ event_after (GtkWidget *text_view,
|
||||
{
|
||||
GtkTextIter start, end, iter;
|
||||
GtkTextBuffer *buffer;
|
||||
GdkEventButton *event;
|
||||
gdouble ex, ey;
|
||||
gint x, y;
|
||||
|
||||
if (ev->type != GDK_BUTTON_RELEASE)
|
||||
return FALSE;
|
||||
if (ev->type == GDK_BUTTON_RELEASE)
|
||||
{
|
||||
GdkEventButton *event;
|
||||
|
||||
event = (GdkEventButton *)ev;
|
||||
event = (GdkEventButton *)ev;
|
||||
if (event->button != GDK_BUTTON_PRIMARY)
|
||||
return FALSE;
|
||||
|
||||
if (event->button != GDK_BUTTON_PRIMARY)
|
||||
ex = event->x;
|
||||
ey = event->y;
|
||||
}
|
||||
else if (ev->type == GDK_TOUCH_END)
|
||||
{
|
||||
GdkEventTouch *event;
|
||||
|
||||
event = (GdkEventTouch *)ev;
|
||||
|
||||
ex = event->x;
|
||||
ey = event->y;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
|
||||
@@ -156,13 +171,13 @@ event_after (GtkWidget *text_view,
|
||||
|
||||
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
|
||||
GTK_TEXT_WINDOW_WIDGET,
|
||||
event->x, event->y, &x, &y);
|
||||
ex, ey, &x, &y);
|
||||
|
||||
gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, x, y);
|
||||
|
||||
follow_if_link (text_view, &iter);
|
||||
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean hovering_over_link = FALSE;
|
||||
|
||||
@@ -164,6 +164,7 @@ gtk_message_row_update (GtkMessageRow *row)
|
||||
s = g_date_time_format (t, "%X - %e %b %Y");
|
||||
gtk_label_set_text (priv->detailed_time_label, s);
|
||||
g_free (s);
|
||||
g_date_time_unref (t);
|
||||
|
||||
gtk_widget_set_visible (GTK_WIDGET(priv->n_favorites_label),
|
||||
priv->message->n_favorites != 0);
|
||||
@@ -295,7 +296,7 @@ gtk_message_row_new (GtkMessage *message)
|
||||
static int
|
||||
gtk_message_row_sort (GtkMessageRow *a, GtkMessageRow *b, gpointer data)
|
||||
{
|
||||
return a->priv->message->time - b->priv->message->time;
|
||||
return b->priv->message->time - a->priv->message->time;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -358,6 +359,7 @@ do_listbox (GtkWidget *do_widget)
|
||||
}
|
||||
|
||||
g_strfreev (lines);
|
||||
g_bytes_unref (data);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
|
||||
+104
-5
@@ -158,9 +158,8 @@ activate_run (GSimpleAction *action,
|
||||
GtkTreeIter iter;
|
||||
|
||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
|
||||
gtk_tree_selection_get_selected (selection, &model, &iter);
|
||||
|
||||
run_example_for_row (window, model, &iter);
|
||||
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
||||
run_example_for_row (window, model, &iter);
|
||||
}
|
||||
|
||||
/* Stupid syntax highlighting.
|
||||
@@ -543,7 +542,7 @@ add_data_tab (const gchar *demoname)
|
||||
* not an image. Let's try something else then.
|
||||
*/
|
||||
g_object_ref_sink (widget);
|
||||
gtk_widget_destroy (widget);
|
||||
g_object_unref (widget);
|
||||
|
||||
bytes = g_resources_lookup_data (resource_name, 0, NULL);
|
||||
g_assert (bytes);
|
||||
@@ -1027,6 +1026,101 @@ activate (GApplication *app)
|
||||
g_object_unref (builder);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
auto_quit (gpointer data)
|
||||
{
|
||||
g_application_quit (G_APPLICATION (data));
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
static void
|
||||
list_demos (void)
|
||||
{
|
||||
Demo *d, *c;
|
||||
|
||||
d = gtk_demos;
|
||||
|
||||
while (d->title)
|
||||
{
|
||||
c = d->children;
|
||||
if (d->name)
|
||||
g_print ("%s\n", d->name);
|
||||
d++;
|
||||
while (c && c->title)
|
||||
{
|
||||
if (c->name)
|
||||
g_print ("%s\n", c->name);
|
||||
c++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
command_line (GApplication *app,
|
||||
GApplicationCommandLine *cmdline)
|
||||
{
|
||||
GVariantDict *options;
|
||||
const gchar *name = NULL;
|
||||
gboolean autoquit = FALSE;
|
||||
gboolean list = FALSE;
|
||||
Demo *d, *c;
|
||||
GDoDemoFunc func = 0;
|
||||
GtkWidget *window, *demo;
|
||||
|
||||
activate (app);
|
||||
|
||||
options = g_application_command_line_get_options_dict (cmdline);
|
||||
g_variant_dict_lookup (options, "run", "&s", &name);
|
||||
g_variant_dict_lookup (options, "autoquit", "b", &autoquit);
|
||||
g_variant_dict_lookup (options, "list", "b", &list);
|
||||
|
||||
if (list)
|
||||
{
|
||||
list_demos ();
|
||||
g_application_quit (app);
|
||||
return;
|
||||
}
|
||||
|
||||
if (name == NULL)
|
||||
goto out;
|
||||
|
||||
window = gtk_application_get_windows (GTK_APPLICATION (app))->data;
|
||||
|
||||
d = gtk_demos;
|
||||
|
||||
while (d->title)
|
||||
{
|
||||
c = d->children;
|
||||
if (g_strcmp0 (d->name, name) == 0)
|
||||
{
|
||||
func = d->func;
|
||||
goto out;
|
||||
}
|
||||
d++;
|
||||
while (c && c->title)
|
||||
{
|
||||
if (g_strcmp0 (c->name, name) == 0)
|
||||
{
|
||||
func = c->func;
|
||||
goto out;
|
||||
}
|
||||
c++;
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
if (func)
|
||||
{
|
||||
demo = (func) (window);
|
||||
|
||||
gtk_window_set_transient_for (GTK_WINDOW (demo), GTK_WINDOW (window));
|
||||
gtk_window_set_modal (GTK_WINDOW (demo), TRUE);
|
||||
}
|
||||
|
||||
if (autoquit)
|
||||
g_timeout_add_seconds (1, auto_quit, app);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
@@ -1046,14 +1140,19 @@ main (int argc, char **argv)
|
||||
}
|
||||
/* -- End of hack -- */
|
||||
|
||||
app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE);
|
||||
app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE|G_APPLICATION_HANDLES_COMMAND_LINE);
|
||||
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
||||
app_entries, G_N_ELEMENTS (app_entries),
|
||||
app);
|
||||
|
||||
g_application_add_main_option (G_APPLICATION (app), "run", 0, 0, G_OPTION_ARG_STRING, "Run an example", "EXAMPLE");
|
||||
g_application_add_main_option (G_APPLICATION (app), "list", 0, 0, G_OPTION_ARG_NONE, "List examples", NULL);
|
||||
g_application_add_main_option (G_APPLICATION (app), "autoquit", 0, 0, G_OPTION_ARG_NONE, "Quit after a delay", NULL);
|
||||
|
||||
g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
|
||||
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
|
||||
g_signal_connect (app, "command-line", G_CALLBACK (command_line), NULL);
|
||||
|
||||
g_application_run (G_APPLICATION (app), argc, argv);
|
||||
|
||||
|
||||
+388
-8
@@ -1,8 +1,388 @@
|
||||
1|GTK+ and friends|@GTKtoolkit|GTK+ 3.8.0 (STABLE) released: wayland, Multi-application Broadway, improved CSS support and more ... http://ur1.ca/d6yms #gtk #gtk3|1364338800|0||4|2
|
||||
2|Daniel Svensson|@dsvensson|Bringing an application up to the new features in GTK 3.x = tons of negative diffs, awesome work by @GTKtoolkit devs <3|1382565600|0|GTK+ and friends|0|1
|
||||
3|GTK+ and friends|@GTKtoolkit|GLib status update and a warning: http://ur1.ca/awsm1 #glib|1384383600
|
||||
4|GTK+ and friends|@GTKtoolkit|GProperty status: http://ur1.ca/awslh #glib|1384383300
|
||||
5|GTK+ and friends|@GTKtoolkit|GTK+ 3.6.2 (STABLE) available: http://ur1.ca/awsl2 #gtk #gtk3|1384383000
|
||||
6|GTK+ and friends|@GTKtoolkit|GLib 2.34.2 (STABLE) available: http://ur1.ca/awskn #glib|1384383000
|
||||
7|GTK+ and friends|@GTKtoolkit|GTK+ 3.6.0 (STABLE) released: http://ur1.ca/aj4e0 #gtk #gtk3|1381528800
|
||||
8|GTK+ and friends|@GTKtoolkit|GLib 2.34.0 (STABLE) released: http://ur1.ca/aj4du #glib|1381522800
|
||||
1|GTK+ and friends|GTKtoolkit|@breizhodrome yeah, that's for the OpenGL support that has been added recently|1416751697|0||2|1
|
||||
2|Emmanuele Bassi|ebassi|RT @ebassi: embloggeration happened: http://t.co/9ukkNuSzuc — help out supporting GL on windows and macos in GTK+ 3.16.|1416086824|0|GTKtoolkit|0|9
|
||||
3|Matthew Waters|ystreet00|RT @ystreet00: .@GTKtoolkit + @gstreamer integration using the new #gtk #opengl support https://t.co/IeBpFjbjes http://t.co/WptPHCfFIb|1416086780|0|GTKtoolkit|0|13
|
||||
4|Emmanuele Bassi|ebassi|RT @ebassi: embloggeration happened — OpenGL integration lands in GTK+ — http://t.co/sUGwcvZhRg|1413214719|0|GTKtoolkit|0|8
|
||||
5|Allan Day|allanday|RT @allanday: New Human Interface Guidelines coming for @gnome and @GTKtoolkit . http://t.co/SMNndyo6rl|1408615736|0|GTKtoolkit|0|12
|
||||
6|Christian Hergert|hergertme|RT @hergertme: being able to set opacity on an individual widget in gtk ... you've come a long way since 2.x days.|1408601183|0|GTKtoolkit|0|2
|
||||
7|Richard Brown|sysrich|RT @sysrich: hmm, good thing Iike eating with chopsticks #GUADEC http://t.co/7aG9CYpdZg|1406543731|0|GTKtoolkit|0|82
|
||||
8|Javier Jardón|jjardon|RT @jjardon: #GNOME 3.13.4 has just been released from Strasbourg, this year #GUADEC city. Enjoy! https://t.co/hgHDVOWvRC|1406303072|0|GTKtoolkit|0|6
|
||||
9|GNOME|gnome|RT @gnome: This year's @guadec schedule has been published. Lots of great talks on there, as usual. https://t.co/rpGPxIRCuB|1405929795|0|GTKtoolkit|0|20
|
||||
10|GTK+ and friends|GTKtoolkit|New features of GtkInspector : http://t.co/EOgcv1lh8D #gtk #gtk3|1402076874|0||2|3
|
||||
11|The Valeyard|breizhodrome|RT @breizhodrome: @GTKtoolkit and his multipoint gesture, good thing for mobile applications :) #Gtk|1402076810|0|GTKtoolkit|0|1
|
||||
12|GTK+ and friends|GTKtoolkit|@Gin_Cheng sorry about that, should be fixed now|1402076785|0||0|0
|
||||
13|GTK+ and friends|GTKtoolkit|@teadriven sorry about that, should be fixed now|1402076751|0||0|0
|
||||
14|Javier Jardón|jjardon|RT @jjardon: #GNOME 3.13.2 (developer version) released! Try it, brake it, file bugs! https://t.co/cyCLBCtqKo|1401318926|0|GTKtoolkit|0|2
|
||||
15|GTK+ and friends|GTKtoolkit|Gtkparasite has been integrated in #GTK+: Introducing gtkinspector: http://t.co/dP3DzgPNM3 #gtk3|1400231807|0||8|11
|
||||
16|GTK+ and friends|GTKtoolkit|GTK+ 3.12 released! Improvements in Wayland, Broadway, OSX ... New widgets: GtkFlowBox,GtkActionBar and GtkPopover: https://t.co/5hBIlfrxc3|1395842503|0||5|8
|
||||
17|Javier Jardón|jjardon|RT @jjardon: Second beta of #GNOME 3.12 just released! https://t.co/8oTfZaatVr|1394147916|0|GTKtoolkit|0|3
|
||||
18|Javier Jardón|jjardon|RT @jjardon: First beta of GNOME 3.12 (3.11.90) has just been released. Enjoy! https://t.co/d5wzYWXUnv #gnome|1393006697|0|GTKtoolkit|0|4
|
||||
19|GTK+ and friends|GTKtoolkit|Some thoughts on portability by @desrt : http://t.co/zyFT6i4we3 #glib|1392903834|0||1|0
|
||||
20|GTK+ and friends|GTKtoolkit|Popovers support merged in master: http://t.co/5JE0RLhEDo Thanks @garnacho for getting this done! #gtk3|1390500627|0||5|7
|
||||
21|GTK+ and friends|GTKtoolkit|The continuous build environment now generates 64-bit #GTK+ Windows bundles! Read the announcement from @tarnyko : https://t.co/wXVOAzCYTt|1386169565|0||6|10
|
||||
22|GTK+ and friends|GTKtoolkit|GTK+ 3 packages for Windows available! Thanks for the hard work of @tarnyko to make this possible!\nhttp://t.co/U9JgsGoBLm|1382633636|0||7|23
|
||||
23|GTK+ and friends|GTKtoolkit|Status of support of high resolution displays in #GTK+ (and #GNOME ) http://t.co/SPQN2E6Qxo Thanks to Brion Vibber for the donation!|1372531560|0||2|3
|
||||
24|Javier Jardón|jjardon|RT @jjardon: Firefox GTK+3 port ready for testing https://t.co/onpxJaTKO5 #gtk #gtk3|1371557291|0|GTKtoolkit|0|22
|
||||
25|GTK+ and friends|GTKtoolkit|GTK+ 3.8.0 (STABLE) released: wayland, Multi-application Broadway, improved CSS support and more ... http://t.co/RlLmrNPyYs #gtk #gtk3|1364435230|0||0|5
|
||||
26|Daniel Svensson|dsvensson|RT @dsvensson: Bringing an application up to the new features in GTK 3.x = tons of negative diffs, awesome work by @GTKtoolkit devs <3|1352906611|0|GTKtoolkit|0|3
|
||||
27|GTK+ and friends|GTKtoolkit|GLib status update and a warning: http://t.co/quQP8dLf #glib|1352905826|0||1|1
|
||||
28|GTK+ and friends|GTKtoolkit|GProperty status: http://t.co/Nk28V2Rh #glib|1352905797|0||1|1
|
||||
29|GTK+ and friends|GTKtoolkit|GTK+ 3.6.2 (STABLE) available: http://t.co/ah87o7cC #gtk #gtk3|1352905768|0||1|2
|
||||
30|GTK+ and friends|GTKtoolkit|GLib 2.34.2 (STABLE) available: http://t.co/yavkTJwr #glib|1352905722|0||2|1
|
||||
31|GTK+ and friends|GTKtoolkit|GTK+ 3.6.0 (STABLE) released: http://t.co/3NDAT5K9 #gtk #gtk3|1350075620|0||0|4
|
||||
32|GTK+ and friends|GTKtoolkit|GLib 2.34.0 (STABLE) released: http://t.co/eWRD7hNy #glib|1350075583|0||0|6
|
||||
33|GTK+ and friends|GTKtoolkit|GLib 2.33.10 (UNSTABLE) released: http://t.co/3BCdOPDy #glib|1347299317|0||2|2
|
||||
34|Javier Jardón|jjardon|RT @jjardon: GnomeGoals status update: https://t.co/q5j7mJ1c #gnome|1342143404|0|GTKtoolkit|0|1
|
||||
35|Emmanuele Bassi|ebassi|RT @ebassi: Saturday, 28/07, 11:45 - I'll be talking about Rainbows and Unicorns @ GUADEC https://t.co/WOiF6QU6|1341984820|0|GTKtoolkit|0|2
|
||||
36|Harvey|cd0|RT @cd0: According to the sourcecode zipball the browser in the samsung smart tvs (UNxxES8xxx) is webkit-gtk 20120109. Not bad. @GTKtoolkit|1341712733|0|GTKtoolkit|0|3
|
||||
37|Claudio Saavedra|csaavedra|RT @csaavedra: Accelerated compositing in WebKitGTK+: http://t.co/yxl0BooF #webkit #gnome|1341712291|0|GTKtoolkit|0|2
|
||||
38|GTK+ and friends|GTKtoolkit|GTK+ 3.5.6 (UNSTABLE) released, now featuring GtkSearchEntry and GtkMenuButton http://t.co/adHtm2OA #gtk #gtk3|1341689740|0||0|3
|
||||
39|GTK+ and friends|GTKtoolkit|GTK+ 3.4.0 (STABLE) released: http://t.co/KPSfJQSg #gtk #gtk3|1332870781|0||0|17
|
||||
40|Javier Jardón|jjardon|RT @jjardon: GTK+ 2.24.9 (STABLE) released: https://t.co/OgcL5jnR #gtk|1327437929|0|GTKtoolkit|0|2
|
||||
41|GTK+ and friends|GTKtoolkit|Multitouch is near… by @garnacho http://t.co/68iK8m9S #gtk #gtk3|1327090575|0||1|7
|
||||
42|GTK+ and friends|GTKtoolkit|@dylanmccall Follow this bug: https://t.co/9vCpBVSm|1326802580|0||0|0
|
||||
43|GTK+ and friends|GTKtoolkit|@cd0 Nice. Please, report any issue next time ;)|1326802460|0||0|0
|
||||
44|GTK+ and friends|GTKtoolkit|RFC: new features http://t.co/uiqYWx4O #gtk #gtk3|1326802266|0||1|2
|
||||
45|GTK+ and friends|GTKtoolkit|@cd0 Did you file a bug?|1326776652|0||0|0
|
||||
46|GTK+ and friends|GTKtoolkit|@dylanmccall You mean this? http://t.co/BXbocqE9|1326776459|0||0|0
|
||||
47|GTK+ and friends|GTKtoolkit|@trufae https://t.co/xlq75hDL|1326776153|0||0|0
|
||||
48|GTK+ and friends|GTKtoolkit|RFC: UI design: http://t.co/Lu8Gnnfg #gtk #gtk3|1326305191|0||2|2
|
||||
49|GTK+ and friends|GTKtoolkit|#win32 users: GTK+ 2.24.8 bundles available here: http://t.co/WhuY2XoN It not needed to use 2.16 anymore #gtk|1323190462|0||1|4
|
||||
50|GTK+ and friends|GTKtoolkit|RFC: Model-View-Controller http://t.co/Lmw4lW9V #gtk #gtk3|1321546108|0||1|1
|
||||
51|GTK+ and friends|GTKtoolkit|RFC:boxes http://t.co/eZABFgTp #gtk #gtk3|1321546061|0||2|1
|
||||
52|GTK+ and friends|GTKtoolkit|GTK+ 2.24.8 (stable) released: update of the win32 backend, it now works at least as well as the old 2.16.x http://t.co/6wrhs7hm #gtk|1321297367|0||0|2
|
||||
53|GTK+ and friends|GTKtoolkit|GTK + #Clutter next step(s): http://t.co/UDIezbyW #gtk #gtk4|1318265984|0||3|4
|
||||
54|GTK+ and friends|GTKtoolkit|Tutorial for #Python, #GStreamer and #GTK 3: http://t.co/hvfRx18E #gtk3|1317781925|0||5|0
|
||||
55|GTK+ and friends|GTKtoolkit|@jonobacon nice, but pyGTK is deprecated, use pygobject instead|1317353873|0||1|0
|
||||
56|GTK+ and friends|GTKtoolkit|GTK+ 3.2 (STABLE) released: http://t.co/EqHjTmol #gtk #gtk3|1317043650|0||0|11
|
||||
57|GTK+ and friends|GTKtoolkit|New D-Bus features in GLib 2.30: http://t.co/rzHui2Q2 #gtk #glib|1316732697|0||3|4
|
||||
58|Lanedo GmbH|LanedoTweets|RT @TimJanik: New #GTK+ building instructions for #Mac OS X now up in the #GNOME wiki: http://t.co/lLt2fb1B|1316646621|0|GTKtoolkit|0|3
|
||||
59|GTK+ and friends|GTKtoolkit|GTK+ 3.1.90 (UNSTABLE) released: http://t.co/KRz34jp #gtk #gtk3|1315961535|0||0|3
|
||||
60|Lanedo GmbH|LanedoTweets|RT @TimJanik: There's a Win32 security advisory for Gtk+, it's recommended to upgrade to latest Gtk+ (2.24.6) if you haven't yet: http:/ ...|1315914861|0|GTKtoolkit|0|5
|
||||
61|GTK+ and friends|GTKtoolkit|GTK+ 4.0 and #Clutter 2.0: rainbows and unicorns: http://t.co/SKbl0vQ #gtk #gtk4|1314883483|0||2|14
|
||||
62|GTK+ and friends|GTKtoolkit|Some #Glib plans for the next cycle: http://t.co/a6YybK0 #gtk|1314883427|0||0|3
|
||||
63|Nat Friedman|natfriedman|RT @natfriedman: Any Gtk+ experts who want to make some consulting money fixing bugs in Gtk/Mac, email me: nat@xamarin.com.|1314355269|0|GTKtoolkit|0|28
|
||||
64|Kristian Rietveld|krietvel|RT @krietvel: Blog post: 'Merged “treemodel-fix” branch into GTK+: call for testing, blog post series' http://t.co/yAUnneo #gtk|1314096198|0|GTKtoolkit|0|2
|
||||
65|GTK+ and friends|GTKtoolkit|@ArcherSeven Help improving the patch here: http://t.co/r74hP79|1313493595|0||0|0
|
||||
66|GTK+ and friends|GTKtoolkit|GTK+ 3.1.12 (UNSTABLE) released: http://t.co/3iPAlNq Try the new Font Dialog! #gtk #gtk3|1313493256|0||0|4
|
||||
67|GTK+ and friends|GTKtoolkit|@cimi @DanielFore Patches always welcomed!|1313493010|0||0|0
|
||||
68|GTK+ and friends|GTKtoolkit|a11y branch was merged into master: http://mail.gnome.org/archives/gtk-devel-list/2011-July/msg00004.html #gtk #gtk3|1309962425|0||0|2
|
||||
69|GTK+ and friends|GTKtoolkit|Another update in the effort to improve #a11y in #gtk: http://mail.gnome.org/archives/gtk-devel-list/2011-June/msg00057.html #gtk3|1309606597|0||0|0
|
||||
70|GTK+ and friends|GTKtoolkit|@cd0 What is wrong in that page? freetype already appears as a required dependency. Anyway patches always welcomed ;)|1307359139|0||0|0
|
||||
71|GTK+ and friends|GTKtoolkit|Of course, everyone is welcomed to improve the #gtk website. git repo: http://ur1.ca/4bwbw bugzilla: http://ur1.ca/4bwc1|1307038767|0||0|1
|
||||
72|GTK+ and friends|GTKtoolkit|Check out the new #gtk website!!: www.gtk.org|1307036644|0||0|4
|
||||
73|GTK+ and friends|GTKtoolkit|@jikri Take a look to http://live.gnome.org/action/login/GTK+/Roadmap and http://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html|1306673774|0||0|0
|
||||
74|GTK+ and friends|GTKtoolkit|Introducing Cossa, a GTK+ theme previewer for gedit, by @garnacho http://ur1.ca/4ate8 #gtk #gtk3|1306672611|0||1|5
|
||||
75|GTK+ and friends|GTKtoolkit|#GProperty, new API for Property and Accessor declaration, by @ebassi : http://ur1.ca/47lgk #gtk #glib|1305717028|0||0|2
|
||||
76|GTK+ and friends|GTKtoolkit|GLib 2.29.4 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-May/msg00012.html #gtk #glib|1304593138|0||0|2
|
||||
77|GTK+ and friends|GTKtoolkit|RT @acruiz: Gtk+ FontSelection progress http://bit.ly/iikP2f #gtk #gtk3|1303089979|0||0|1
|
||||
78|GTK+ and friends|GTKtoolkit|RT @krietvel: New blog post: CoreText backend now in Pango master http://bit.ly/dTE0a1 #gtk #pango #osx|1303089938|0||0|0
|
||||
79|GTK+ and friends|GTKtoolkit|GTK+ 3.0.9 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00087.html #gtk #gtk3|1302883958|0||0|0
|
||||
80|GTK+ and friends|GTKtoolkit|GLib 2.28.6 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00074.html #gtk #glib|1302780112|0||0|3
|
||||
81|GTK+ and friends|GTKtoolkit|GTK+ 3.1.2 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00072.html #gtk #gtk3|1302737279|0||0|2
|
||||
82|GTK+ and friends|GTKtoolkit|GLib 2.29.2 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00071.html #gtk #glib|1302702936|0||0|3
|
||||
83|Kristian Høgsberg|hoegsberg|RT @hoegsberg: yay, merged the Wayland GTK+ backend to the master branch - no, it's still not compete.|1302621000|0|GTKtoolkit|0|9
|
||||
84|GTK+ and friends|GTKtoolkit|Someone willing to help with the client side decorations branch? http://git.gnome.org/browse/gtk+/log/?h=client-side-decorations #gtk #gtk3|1302620918|0||1|1
|
||||
85|GTK+ and friends|GTKtoolkit|#Wayland GTK+ backend merged in master: http://git.gnome.org/browse/gtk+/commit/?id=c7514e8f0d19a833257497caff413bb4dfae6eb4 #gtk #gtk3|1302620838|0||1|9
|
||||
86|GTK+ and friends|GTKtoolkit|gtkmm 3.0.0 (STABLE) released: http://mail.gnome.org/archives/gtkmm-list/2011-April/msg00025.html #gtk #cpp|1302355894|0||0|3
|
||||
87|GTK+ and friends|GTKtoolkit|RT @alex_igalia: WebKit2 MiniBrowser for the GTK+ port running! http://ur1.ca/3t3ov #gtk #webkit|1302261488|0||1|0
|
||||
88|GTK+ and friends|GTKtoolkit|#GNOME3 is out, using all the power of #gtk3 , congrats everyone! #gtk #gnome|1302219444|0||0|2
|
||||
89|GTK+ and friends|GTKtoolkit|HTML5 backend update, now with real toplevel windows!! http://blogs.gnome.org/alexl/2011/04/07/broadway-update-2/ #gtk #gtk3|1302218981|0||2|10
|
||||
90|GTK+ and friends|GTKtoolkit|Glade 3.10 (STABLE) released: With support for GTK+3, pygobject and all the new stuff: http://ur1.ca/3s8wk #rad #gtk|1302032523|0||0|6
|
||||
91|GTK+ and friends|GTKtoolkit|GTK+ 3.0.8 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00009.html #gtk #gtk3|1301878240|0||0|4
|
||||
92|GTK+ and friends|GTKtoolkit|GTK+ latest performance improvements (with video): http://blogs.gnome.org/otte/2011/03/30/the-book-was-better/ #gtk #gtk3|1301594293|0||1|6
|
||||
93|GTK+ and friends|GTKtoolkit|Benjamin Otte is improving GTK+ performance with some impressive results, check latest commits #gtk #gtk3|1301409776|0||1|2
|
||||
94|Javier Jardón|jjardon|RT @jjardon: Also nice to see that a firefox GTK+3 port was started: https://bugzilla.mozilla.org/show_bug.cgi?id=627699 #gtk #gtk3 #fi ...|1301166992|0|GTKtoolkit|0|8
|
||||
95|GTK+ and friends|GTKtoolkit|RT @krietvel: Oh yea, I still have to upstream the CoreText backend I wrote for Pango. Completely forgot about that. #gtk|1301149034|0||0|0
|
||||
96|GTK+ and friends|GTKtoolkit|GTK+ 3.0.5 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00099.html #gtk #gtk3|1300925808|0||0|1
|
||||
97|GTK+ and friends|GTKtoolkit|Nice article of @cgwalters about analyzing memory use in #glib with #SystemTap: http://ur1.ca/3m0ak #gtk|1300672197|0||2|1
|
||||
98|GTK+ and friends|GTKtoolkit|GLib 2.28.3 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00065.html #gtk #glib|1300374677|0||0|2
|
||||
99|GTK+ and friends|GTKtoolkit|GTK+ HTML backend merged: http://blogs.gnome.org/alexl/2011/03/15/gtk-html-backend-update/ #gtk #gtk3|1300334447|0||3|4
|
||||
100|GTK+ and friends|GTKtoolkit|GTK+ 3.0.3 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00059.html #gtk #gtk3|1300151113|0||0|5
|
||||
101|GTK+ and friends|GTKtoolkit|PyGObject (new gobject introspection-based bindings) 2.28.0 (STABLE) released: http://ur1.ca/3fcsp #python #gtk|1299620983|0||0|1
|
||||
102|GTK+ and friends|GTKtoolkit|GTK+ team meeting now in #gtk-devel on irc.gimp.net #gtk|1299615099|0||0|1
|
||||
103|GTK+ and friends|GTKtoolkit|REMINDER: GTK+ Team IRC Meeting - 2011-03-08 at 20:00 UTC: http://ur1.ca/3ezpn Agenda: http://ur1.ca/3ezpp #gtk|1299517986|0||0|0
|
||||
104|GTK+ and friends|GTKtoolkit|GTK+ 3.0.2 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00010.html #gtk|1299517909|0||1|3
|
||||
105|GTK+ and friends|GTKtoolkit|PyGObject, the new Python introspection based bindings almost ready for the 2.28 stable release: http://ur1.ca/3dfaj #python #gtk|1299081554|0||0|5
|
||||
106|GTK+ and friends|GTKtoolkit|GTK+ 3.0.1 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00088.html #gtk|1298379744|0||0|4
|
||||
107|GTK+ and friends|GTKtoolkit|More features/ideas for gtk+ 3.2: pictures: https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00038.html #gtk|1297815657|0||1|2
|
||||
108|GTK+ and friends|GTKtoolkit|New features/ideas for gtk+ 3.2: Translucent TextViews : http://blogs.gnome.org/tvb/2011/02/14/translucent-textviews/ #gtk|1297707521|0||1|2
|
||||
109|GTK+ and friends|GTKtoolkit|Blog post of our tireless maintainer, Matthias Clasen: http://blogs.fedoraproject.org/wp/mclasen/2011/02/10/gtk-3-is-here/ #gtk #gtk3|1297378021|0||0|5
|
||||
110|GTK+ and friends|GTKtoolkit|Highlights: Cairo-based, XI2, new theming API, Flexible geometry management, Multiple backend support for GDK, easy application support ...|1297373117|0||0|3
|
||||
111|GTK+ and friends|GTKtoolkit|GTK+ 3.0 released!! : http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00020.html gtk!|1297372977|0||1|20
|
||||
112|GTK+ and friends|GTKtoolkit|GLib 2.28.0 (stable) released: https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00014.html #gtk #glib|1297196093|0||0|2
|
||||
113|GTK+ and friends|GTKtoolkit|GTK+ 2.99.3 released: latest beta before GTK+3 http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00004.html #gtk|1296609072|0||1|1
|
||||
114|GTK+ and friends|GTKtoolkit|Glade 3.9.2 released: off screen, workspace new look, GtkComboBoxText, GtkFileFilter, GtkApplication and more! http://ur1.ca/335is #gtk #rad|1296608221|0||1|0
|
||||
115|GTK+ and friends|GTKtoolkit|GTK+ 2.24 ( STABLE ) released: This will be the latest 2.x release. http://ur1.ca/32cft #gtk|1296438857|0||2|0
|
||||
116|GTK+ and friends|GTKtoolkit|More progress on #Glade, the GTK+ #interface #designer: http://ur1.ca/2uzpa Note that Glade 3.8 -> #gtk2 and Glade 3.10-> #gtk3 #gtk|1295186227|0||0|2
|
||||
117|GTK+ and friends|GTKtoolkit|RT @prcutler RT @fcrozat: First shot at GNOME3 evaluation usb stick : http://bit.ly/i1wM8X #gnome #gnome3 #gnome-shell #opensuse #gnome|1295186033|0||1|0
|
||||
118|GTK+ and friends|GTKtoolkit|If you want to try the #wayland backend, checkout this branch: http://git.gnome.org/browse/gtk+/log/?h=gdk-backend-wayland #gtk|1294739562|0||1|5
|
||||
119|GTK+ and friends|GTKtoolkit|GTK+ 2.99.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00005.html #gtk|1294738413|0||0|0
|
||||
120|GTK+ and friends|GTKtoolkit|GTK+ 2.99: It is now possible to include multiple GDK backends in a single library. Use --enable-{x11,win32,quartz}-backend #gtk|1294344201|0||0|0
|
||||
121|GTK+ and friends|GTKtoolkit|GTK+ 2.99: The removal of GSEALEd struct members has been completed in this release #gtk|1294344070|0||0|1
|
||||
122|GTK+ and friends|GTKtoolkit|GTK+ 2.99.0 (unstable) released http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00001.html #gtk|1294344044|0||0|2
|
||||
123|GTK+ and friends|GTKtoolkit|GLib 2.27.90 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00000.html #glib|1294343933|0||0|0
|
||||
124|GTK+ and friends|GTKtoolkit|Glade 3.9.0 (unstalbe) released: snapshot leading up to Glade 3.10 that will depend on GTK+3 http://ur1.ca/2rir0 #gtk #rad|1294343894|0||0|1
|
||||
125|GTK+ and friends|GTKtoolkit|Glade 3.7.3 (unstable) released: snapshot leading up to Glade 3.8 that\nwill depend on GTK+ 2.24 http://ur1.ca/2riqg #gtk|1294343835|0||0|0
|
||||
126|GTK+ and friends|GTKtoolkit|RT @hoegsberg: Multi-backend support in GTK+: http://bit.ly/gDwugJ - switch between #Wayland and X11 by setting GDK_BACKEND #gtk|1294201849|0||0|0
|
||||
127|GTK+ and friends|GTKtoolkit|RT @krietvel Blog post \"GDK 3.0 on Mac OS X\" http://bit.ly/ihr9kH or how GDK became awesome in GTK+ 3.0. #gtk #osx|1293728637|0||0|1
|
||||
128|GTK+ and friends|GTKtoolkit|RT @krietvel Blog post \"Refactoring GtkTreeView using GtkCellArea\" http://bit.ly/g9aArE #gtk|1293728607|0||0|0
|
||||
129|GTK+ and friends|GTKtoolkit|Also, the treeview-refactor branch has been merged too|1293036166|0||1|0
|
||||
130|GTK+ and friends|GTKtoolkit|New in GTK+ 2.91.7: gdk-backend branch have been merged: the goal is allowing to build a single gdk library that contains multiple backends|1293036118|0||0|0
|
||||
131|GTK+ and friends|GTKtoolkit|GTK+ 2.91.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00155.html #gtk|1293035980|0||1|2
|
||||
132|GTK+ and friends|GTKtoolkit|GTK+ 2.23.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00156.html #gtk|1293035865|0||0|2
|
||||
133|GTK+ and friends|GTKtoolkit|GLib 2.27.5 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00152.html #gtk #glib|1293035786|0||0|0
|
||||
134|GTK+ and friends|GTKtoolkit|Glade 3.7.2 (unstable) released: http://lists.ximian.com/pipermail/glade-devel/2010-December/001853.html #gtk #RAD|1292589571|0||0|0
|
||||
135|Andrea Cimitan|cimi|RT @cimi: reading migration docs, later Murrine will start to be ported over GtkStyleContext (so CSS fun :))|1291813590|0|GTKtoolkit|0|1
|
||||
136|GTK+ and friends|GTKtoolkit|Work to building multiple backends on the same system started: http://ur1.ca/2ieid #gtk|1291614285|0||0|2
|
||||
137|GTK+ and friends|GTKtoolkit|RT @garnacho : gtk-style-context landed in GTK+ master, if gnome3 looks temporarily uglier that was me :) #gtk #gnome|1291613819|0||0|0
|
||||
138|Stormy|storming|RT @storming: Anyone know of any call centers that use GNOME? Potential funding for a11y work if we do ...|1291387291|0|GTKtoolkit|0|4
|
||||
139|GTK+ and friends|GTKtoolkit|Final part of the Benjamin Otte GTK3 rendering\ncleanup has landed: http://ur1.ca/2hrc9 #gtk|1291375493|0||0|0
|
||||
140|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.5 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-December/msg00000.html #gtk #bindings #cplusplus|1291212942|0||0|0
|
||||
141|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm 2.27.4 (unstable) released: http://ur1.ca/2h77z #glib #bindings #cplusplus|1291212883|0||0|0
|
||||
142|GTK+ and friends|GTKtoolkit|GtkAppChooser landed in master: https://bugzilla.gnome.org/show_bug.cgi?id=582557#c10 #gtk|1291212784|0||0|0
|
||||
143|GTK+ and friends|GTKtoolkit|larger changes in GTK+ soon: GtkStyleContext, rendering-cleanup, app-chooser branch, GtkRadioGroup branch, http://ur1.ca/2gs5u #gtk|1291211812|0||2|0
|
||||
144|GTK+ and friends|GTKtoolkit|New widget: GtkSwitch http://blogs.fedoraproject.org/wp/mclasen/2010/11/29/onoff/ thanks to @ebassi and Matthias Clasen for the review #gtk|1291211711|0||2|1
|
||||
145|GTK+ and friends|GTKtoolkit|GTK+ html backend (broadway branch) landed: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00103.html #gtk|1291211452|0||0|1
|
||||
146|GTK+ and friends|GTKtoolkit|GTK+ 2.91.5 (unstalbe) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00109.html #gtk|1291211337|0||0|1
|
||||
147|GTK+ and friends|GTKtoolkit|GLib 2.27.4 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00108.html #gtk #glib|1291211331|0||0|0
|
||||
148|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.4 released: http://mail.gnome.org/archives/gtkmm-list/2010-November/msg00095.html #gtk #cplusplus #bindings|1290451737|0||0|0
|
||||
149|GTK+ and friends|GTKtoolkit|Introducing GtkCellArea: height-for-width geometry management for GtkTreeViews http://ur1.ca/2e5pe #gtk|1290310899|0||1|2
|
||||
150|Javier Jardón|jjardon|RT @jjardon: gtk+3 packages landed in #Debian experimental: http://packages.debian.org/experimental/libgtk3.0-0 #gtk|1290036413|0|GTKtoolkit|0|2
|
||||
151|GTK+ and friends|GTKtoolkit|WIP Porting guide to migrate from GTK+2 to GTK+3: http://ur1.ca/1xbzs #gtk #xfce #lxde #gnome|1290036396|0||4|6
|
||||
152|GTK+ and friends|GTKtoolkit|#GSettings is fast (really): http://blogs.gnome.org/desrt/2010/11/15/gsettings-is-fast/ #gtk #glib|1289853926|0||1|2
|
||||
153|GTK+ and friends|GTKtoolkit|Help making Glade ready for GTK+ 3: http://blogs.gnome.org/johannes/2010/11/15/help-making-glade-ready-for-3-0/ #gtk|1289853600|0||1|0
|
||||
154|GTK+ and friends|GTKtoolkit|Anyone up to fix it? RT @vwduder: I wish #gtk wouldn't actually show the window until all of the contents have been rendered to the drawable|1289434823|0||0|0
|
||||
155|GTK+ and friends|GTKtoolkit|PyGObject 2.27.0 (unstable) released: http://mail.gnome.org/archives/python-hackers-list/2010-November/msg00013.html #python #bindings #gtk|1289431671|0||0|0
|
||||
156|GTK+ and friends|GTKtoolkit|glibmm 2.27.3 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-November/msg00058.html #glib #cplusplus #bindings|1289387769|0||0|0
|
||||
157|GTK+ and friends|GTKtoolkit|GLib 2.27.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00043.html #gtk #glib|1289322725|0||0|1
|
||||
158|GTK+ and friends|GTKtoolkit|GTK+ 2.91.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00010.html #gtk|1288758787|0||0|1
|
||||
159|GTK+ and friends|GTKtoolkit|GLib 2.27.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00002.html #gtk #glib|1288758720|0||0|0
|
||||
160|GTK+ and friends|GTKtoolkit|Gtk 3.0 motto: \"We are fixing it!\"|1288630204|0||1|4
|
||||
161|GTK+ and friends|GTKtoolkit|Recent Openismus contributions to @GtkToolkit http://bit.ly/amuAdX Thank you guys!|1288343314|0||0|0
|
||||
162|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.2 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00058.html #gtk #cplusplus|1288098381|0||0|0
|
||||
163|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm (unstable) 2.27.1 released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00059.html #gtk #cplusplus|1288098335|0||0|0
|
||||
164|GTK+ and friends|GTKtoolkit|GTK+ 2.91.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00230.html #gtk|1288058960|0||0|0
|
||||
165|GTK+ and friends|GTKtoolkit|GLib 2.27.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00222.html #gtk #glib|1288049934|0||0|1
|
||||
166|GTK+ and friends|GTKtoolkit|@garnacho shows off 3.0 CSS awesomness as a result of his work at #gtkhackfest http://bit.ly/aV99F|1288015424|0||0|0
|
||||
167|GTK+ and friends|GTKtoolkit|GtkGrid landed:new container similar to GtkTable without unnecessary restrictions.It does height-for-width geometry management. #gtkhackfest|1287759681|0||0|1
|
||||
168|GTK+ and friends|GTKtoolkit|RT @bertogg: The GTK+ artillery: http://flic.kr/p/8M16nu http://flic.kr/p/8M16d7 #gtkhackfest #gtk|1287744902|0||0|0
|
||||
169|GTK+ and friends|GTKtoolkit|GtkScrollable interface landed in master: http://git.gnome.org/browse/gtk+/commit/?id=55196a705f00564a44647bfc97981db0a783369a #gtk|1287744793|0||0|0
|
||||
170|Kristian Rietveld|krietvel|RT @krietvel: Blogged on \"Optimizing legacy code\". Or \"Color space conversion is more expensive than you might think\". http://bit.ly/duA ...|1287711819|0|GTKtoolkit|0|1
|
||||
171|GTK+ and friends|GTKtoolkit|Rounded corners in GtkEntry (thanks Boram Park!) http://ur1.ca/257f0 #gtk #gtkhackfest|1287711709|0||0|6
|
||||
172|Berto Garcia|bertogg|RT @bertogg: Ryan and Benjamin discussing GtkStyle at the Hercules Tower #gtkhackfest http://twitgoo.com/1pw774|1287708209|0|GTKtoolkit|0|1
|
||||
173|GTK+ and friends|GTKtoolkit|RT @bertogg Working late at night #gtkhackfest http://twitgoo.com/1pvw46 #gtk|1287602614|0||0|0
|
||||
174|GTK+ and friends|GTKtoolkit|WIP docs of the new theme API : http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00134.html #gtkhackfest #gtk|1287564745|0||0|0
|
||||
175|GTK+ and friends|GTKtoolkit|GtkApplication landed in master: http://ur1.ca/24fhe Feedback welcome #gtk #gtkhackfest|1287564609|0||0|0
|
||||
176|Emmanuele Bassi|ebassi|RT @ebassi: lots of discussions at the #gtkhackfest - it's great to see the roadmap for 4.0 take shape|1287564383|0|GTKtoolkit|0|2
|
||||
177|Berto Garcia|bertogg|RT @bertogg: Update from the GTK+ Hackfest 2010: http://blogs.igalia.com/berto/2010/10/19/gtk-hackfest-2010/ #gtkhackfest|1287564380|0|GTKtoolkit|0|3
|
||||
178|Berto Garcia|bertogg|RT @bertogg: Photos from the #gtkhackfest in Coruña: http://www.flickr.com/photos/tags/gtkhackfest2010/ #igalia #gnome|1287564365|0|GTKtoolkit|0|2
|
||||
179|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.1 released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00033.html #gtk #cplusplus|1287478956|0||1|0
|
||||
180|GTK+ and friends|GTKtoolkit|The #gtkhackfest started today. Thanks a lot to the event sponsors: #igalia, #lanedo, #codethink and the #GNOME foundation.|1287447826|0||0|2
|
||||
181|GTK+ and friends|GTKtoolkit|#gtkhackfest started today at the #igalia offices in A Coruña http://live.gnome.org/Hackfests/GTK2010 #gnome #gtk|1287422775|0||0|0
|
||||
182|GTK+ and friends|GTKtoolkit|libnotify, gtk API changes in 2.91.1: http://mail.gnome.org/archives/desktop-devel-list/2010-October/msg00193.html #gtk #gnome #xfce #lxde|1287324866|0||0|0
|
||||
183|GTK+ and friends|GTKtoolkit|GTK+ 2.91.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00127.html #gtk|1287324761|0||0|1
|
||||
184|GTK+ and friends|GTKtoolkit|GTK+ 2.23.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00128.html #gtk|1287324697|0||0|1
|
||||
185|GTK+ and friends|GTKtoolkit|RT @bratschegnome: Backported gtk window resize grips to 2.x and posted to ppa:bratsche/gtk for any #ubuntu people who want to use/test it.|1287156390|0||0|1
|
||||
186|GTK+ and friends|GTKtoolkit|Resize grip in all the GtkWindows now: http://blogs.fedoraproject.org/wp/mclasen/2010/10/09/getting-a-grip/ thanks to @bratschegnome #gtk|1286600672|0||0|1
|
||||
187|GTK+ and friends|GTKtoolkit|@judsontwit You have some tips for porting here: http://live.gnome.org/PyGObject/IntrospectionPorting No many changes needed #python|1286298188|0||0|0
|
||||
188|GTK+ and friends|GTKtoolkit|@UstunOzgur take a look here: http://live.gnome.org/PyGTK and here: http://live.gnome.org/PyGObject|1286297979|0||0|0
|
||||
189|Kristian Rietveld|krietvel|RT @krietvel: Just pushed the last patch that finishes the transition of the OS X backend to the new rendering goodness. #gtk|1286297494|0|GTKtoolkit|0|1
|
||||
190|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.0 (#C++ bindings) released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00000.html #gtk|1286128646|0||0|1
|
||||
191|GTK+ and friends|GTKtoolkit|GTK+ 2.91.0 (unstable) released: http://ur1.ca/1xbzr The rendering cleanup work has landed. Porting guide here: http://ur1.ca/1xbzs #gtk|1286073059|0||0|0
|
||||
192|GTK+ and friends|GTKtoolkit|Anyone up to the challenge of writing a WebP gdkpixbuf loader?|1285950573|0||0|3
|
||||
193|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: Clutter 1.4.0 - new stable release! grab it while it's hot, on www.clutter-project.org|1285731448|0|GTKtoolkit|0|10
|
||||
194|GTK+ and friends|GTKtoolkit|We strongly recommend not using PyGTK for new projects and to port existing applications from #PyGTK to #PyGObject #python #gtk|1285721997|0||5|39
|
||||
195|GTK+ and friends|GTKtoolkit|ANNOUNCE: PyGObject 2.26.0 released:http://mail.gnome.org/archives/python-hackers-list/2010-September/msg00019.html #gtk #python #bindings|1285721968|0||0|0
|
||||
196|GTK+ and friends|GTKtoolkit|ANNOUNCE: GLib 2.26.0 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00284.html #glib #gtk|1285721379|0||0|0
|
||||
197|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.22.0 (STABLE) released: http://mail.gnome.org/archives/gtkmm-list/2010-September/msg00095.html #gtk #c++ #bindings|1285721312|0||0|0
|
||||
198|GTK+ and friends|GTKtoolkit|PyGTK 2.22.0 released: http://ur1.ca/1sc2n Note that new and existing PyGtk applications are recommended to use PyGObject|1285596826|0||0|0
|
||||
199|GTK+ and friends|GTKtoolkit|GTK+ 2.22.0 ( STABLE ) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00263.html #gtk|1285286958|0||2|5
|
||||
200|GTK+ and friends|GTKtoolkit|Last call for the people interested in attending the #GTK+ hackfest in A Coruña: Please sign up at latest tomorrow! http://ur1.ca/1r2gt|1285255897|0||0|2
|
||||
201|GTK+ and friends|GTKtoolkit|#GLib status update: GLib 2.25.17 and 2.27.0 released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00232.html #gtk|1285245997|0||0|0
|
||||
202|GTK+ and friends|GTKtoolkit|Thoughts about #GtkTreeView refactoring: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00260.html #gtk|1285245546|0||0|1
|
||||
203|GTK+ and friends|GTKtoolkit|GTK+ 2.21.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00204.html #gtk|1284485086|0||0|0
|
||||
204|GTK+ and friends|GTKtoolkit|New GObject API added: g_object_class_install_properties(), an efficient way to install properties: http://ur1.ca/1mh3s #gobject #glib #gtk|1284484816|0||0|0
|
||||
205|GTK+ and friends|GTKtoolkit|legacy-free grid container proposed by @havocp: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00089.html #gtk|1283965732|0||0|1
|
||||
206|GTK+ and friends|GTKtoolkit|Minutes of the #GTK team meeting - 2010-09-07: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00115.html|1283965715|0||0|0
|
||||
207|GTK+ and friends|GTKtoolkit|New work to get #DirectFB backend in a good state, thanks Lionel Landwerlin! #gtk http://ur1.ca/1k0hx|1283965546|0||0|0
|
||||
208|GTK+ and friends|GTKtoolkit|GTK+ 2.21.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00291.html #gtk|1283198533|0||0|0
|
||||
209|GTK+ and friends|GTKtoolkit|GObject Introspection status: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00254.html #gtk #glib|1282939837|0||1|2
|
||||
210|GTK+ and friends|GTKtoolkit|GDateTime, the new time & date API just landed in Glib: https://bugzilla.gnome.org/show_bug.cgi?id=50076#c85 #gtk #glib|1282699797|0||0|1
|
||||
211|GTK+ and friends|GTKtoolkit|CSS-like styling for #GTK+ thanks to Carlos Garnacho: http://blogs.gnome.org/carlosg/2010/08/23/css-like-styling-for-gtk/ #gtk|1282602303|0||0|3
|
||||
212|GTK+ and friends|GTKtoolkit|RT @migueldeicaza: Gtk+ getting cascading stylesheets: http://blogs.gnome.org/carlosg/2010/08/23/css-like-styling-for-gtk/|1282594548|0||0|1
|
||||
213|andreasn1|andreasn1|RT @andreasn1: ♺ @hbons: thanks to gtk+ maintainer mclasen we can now ditch icon-naming-utils :)|1282356193|0|GTKtoolkit|0|2
|
||||
214|GTK+ and friends|GTKtoolkit|GTK+ schedule: glib 2.26 and #gtk+ 2.22 for #GNOME 2.32 (Sep'10). glib 2.28, gtk+ 2.24 and gtk+ 3.0 for Dec'10 http://ur1.ca/16o49|1282256544|0||0|0
|
||||
215|GTK+ and friends|GTKtoolkit|@thomasvs I saw someone with an N900 in my lift yesterday, had the same thought|1282217985|0||0|0
|
||||
216|Simón P.|spenap|RT @spenap: GObject Introspection has landed in Grilo! http://bit.ly/9f4DAa #mswl #igalia #pygobject #gobject-introspection|1282166595|0|GTKtoolkit|0|4
|
||||
217|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ Team Meeting - 2010-08-17: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00155.html #gtk|1282094165|0||0|0
|
||||
218|GTK+ and friends|GTKtoolkit|GTK+ 2.90.6 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00146.html #gtk|1282061092|0||0|0
|
||||
219|Emmanuele Bassi|ebassi|RT @ebassi: http://bit.ly/9gabxR - @cluttertoolkit + gobject-introspection + pygobject. say goodbye to pyclutter!|1282043493|0|GTKtoolkit|0|3
|
||||
220|GTK+ and friends|GTKtoolkit|GTK+ 2.21.6 (unstable) Relased: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00127.html #gtk|1282006494|0||0|0
|
||||
221|Stormy|storming|RT @storming: Novell is looking for a GNOME developer to work on SUSE Linux. http://linkd.in/bEAUUj|1282001084|0|GTKtoolkit|0|19
|
||||
222|Tommi Komulainen|tko|RT @tko: I want my libglib-gslist.so and libglib-glist.so .. and some popcorn. maybe just popcorn|1282000936|0|GTKtoolkit|0|1
|
||||
223|GTK+ and friends|GTKtoolkit|GLib 2.25.14 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00123.html #gtk|1282000398|0||0|0
|
||||
224|Emmanuele Bassi|ebassi|RT @ebassi: I'm pretty pleased with the API that landed in json-glib for 0.12|1281810990|0|GTKtoolkit|0|1
|
||||
225|GTK+ and friends|GTKtoolkit|The @ebassi implementation to support common licenses in about dialog has been added to #GTK: http://ur1.ca/11u5a|1281436699|0||0|0
|
||||
226|GTK+ and friends|GTKtoolkit|Web inspector support lands in #WebKitGtk+ check the screencast demo http://blog.kov.eti.br/?p=118|1281376660|0||1|0
|
||||
227|GTK+ and friends|GTKtoolkit|#GTK+ #Python developers are recommended to use the\nGObject-Introspection features available in PyGObject. http://live.gnome.org/PyGObject|1281362391|0||0|0
|
||||
228|GTK+ and friends|GTKtoolkit|PyGTK 2.21.0 (unstable) released: http://ur1.ca/11gse . 2.22 will be the last release in the PyGTK series.|1281362089|0||0|0
|
||||
229|GTK+ and friends|GTKtoolkit|#GTK+ Hackfest, October 18-22, A Coruña, Spain. http://ur1.ca/11f6u . Add yourself if you are interested in attending http://ur1.ca/11f6v|1281350218|0||0|4
|
||||
230|GTK+ and friends|GTKtoolkit|Benjamin Otte's proposal for GTK+ drawing API: gtk_widget_draw(): http://ur1.ca/11f5m #gtk|1281350013|0||2|0
|
||||
231|GTK+ and friends|GTKtoolkit|Some drawing APIs have been deprecated in GTK+ 2.22. Start porting your drawing to Cairo! http://ur1.ca/11f4t|1281349855|0||0|0
|
||||
232|GTK+ and friends|GTKtoolkit|GLib 2.24.2 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00057.html #gtk|1281349547|0||0|0
|
||||
233|GTK+ and friends|GTKtoolkit|glib (unstable) 2.25.13 released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00052.html #gtk|1281201884|0||0|0
|
||||
234|GTK+ and friends|GTKtoolkit|glib 2.25.12 is here! http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00052.html There have been many API changes in GDBus.|1280601329|0||0|0
|
||||
235|Chema Casanova|txenoo|RT @txenoo: Dispoñible a foto de grupo de #guadeces2010 http://www.flickr.com/photos/davizin/4822344878/ gracias a David Cabrero|1280002637|0|GTKtoolkit|0|2
|
||||
236|Andrea Cimitan|cimi|RT @cimi: Gtk+ 3.0 theming engines... let's start the discussion :)|1279678340|0|GTKtoolkit|0|1
|
||||
237|Alberto Ruiz|acruiz|RT @acruiz: Marker support in GtkScrollbar http://bit.ly/cKUTeW|1279580539|0|GTKtoolkit|0|2
|
||||
238|GTK+ and friends|GTKtoolkit|RT @ebassi: today I moved #clutter-gtk to depend on #gtk3; tomorrow w I'll fix the double-events bug; on wednesday I'll rework the API|1279561116|0||0|0
|
||||
239|Sandy Armstrong|sandyarmstrong|RT @sandyarmstrong: @awafaa gconf is obsolete, fool|1279301600|0|GTKtoolkit|0|1
|
||||
240|Jonh Wendell|jwendell|RT @jwendell: #vinagre ported to GtkApplication :) !gtk|1279228583|0|GTKtoolkit|0|1
|
||||
241|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: #clutter 1.3.8 is the first snapshot with cally, the accessibility library for clutter apps and toolkits|1278972910|0|GTKtoolkit|0|4
|
||||
242|GTK+ and friends|GTKtoolkit|GTK+ 2.90.5 released: http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00021.html #gtk|1278952963|0||0|0
|
||||
243|GTK+ and friends|GTKtoolkit|Glib 2.25.11 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00019.html #gtk|1278952925|0||0|0
|
||||
244|Johan Dahlin|johandahlin|RT @johandahlin: New blog post: Using LLVM to speed up function invocation in a dynamic language binding http://bit.ly/dA6IjH|1278620689|0|GTKtoolkit|0|4
|
||||
245|GTK+ and friends|GTKtoolkit|GTK+ bindings for #Falcon announced: http://mail.gnome.org/archives/gtk-list/2010-June/msg00183.html #gtk|1278000421|0||0|0
|
||||
246|GTK+ and friends|GTKtoolkit|#GSettings / #dconf is ready: http://mail.gnome.org/archives/desktop-devel-list/2010-June/msg00226.html . Please port your modules! #gtk|1277909398|0||0|1
|
||||
247|GTK+ and friends|GTKtoolkit|More work in height-for-width layout system for GTK+ : http://blogs.gnome.org/tvb/2010/06/30/gtk-learns-height-for-width-episode-ii/ #gtk|1277909313|0||0|0
|
||||
248|GTK+ and friends|GTKtoolkit|GLib 2.25.10 (unstable) released: http://ur1.ca/0ee7o WARNING: There have been API changes in GDBus. #gtk|1277685452|0||0|1
|
||||
249|GTK+ and friends|GTKtoolkit|gdk-pixbuf is now a standalone package: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00172.html #gtk|1277685365|0||0|1
|
||||
250|GTK+ and friends|GTKtoolkit|GTK+ 2.90.4 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00182.html #gtk|1277685274|0||0|0
|
||||
251|GTK+ and friends|GTKtoolkit|GTK+ 2.21.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00183.html #gtk|1277685237|0||0|0
|
||||
252|GTK+ and friends|GTKtoolkit|We are open to fix API that make the life of #bindings harder but only by addition+rename, or addition+deprecation. File bugs, please #gtk|1277312749|0||0|0
|
||||
253|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-06-22: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00155.html #gtk|1277312445|0||0|0
|
||||
254|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting 2010-06-22. In #gtk-devel on irc.gnome.org at 20:00 UTC. Agenda: http://ur1.ca/q6jh #gtk|1277226823|0||0|0
|
||||
255|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: the new #clutter website is now live: http://www.clutter-project.org|1276948072|0|GTKtoolkit|0|5
|
||||
256|GTK+ and friends|GTKtoolkit|Proposed #GNOME goal: Port your #PyGTK to the new #PyGI bindings http://bit.ly/cvfzO8|1276941335|0||1|2
|
||||
257|Christian Hergert|hergertme|RT @vwduder: im sad because @ebassi doesn't like my in/out param comments :-)|1276904611|0|GTKtoolkit|0|1
|
||||
258|Guillaume Mazoyer|gmazoyer|RT @gmazoyer: ♺ @GTKtoolkit: #java bindings version 4.0.16 released: http://article.gmane.org/gmane.comp.gnome.bindings.java/1796 #gtk|1276889421|0|GTKtoolkit|0|1
|
||||
259|GTK+ and friends|GTKtoolkit|#java bindings version 4.0.16 released: http://article.gmane.org/gmane.comp.gnome.bindings.java/1796 #gtk|1276885917|0||0|0
|
||||
260|GTK+ and friends|GTKtoolkit|RT @cwiiis: MxIconTheme and MxIcon respect system's icon theme (and changes) now in #mx master :) Made possible by @thosw's XSettings work|1276883019|0||0|0
|
||||
261|GTK+ and friends|GTKtoolkit|#javascript mailing list just created. Discuss its usage in GObject libraries: GTK+, Glib ... http://ur1.ca/08lwz by @jwendell #gtk|1276842639|0||0|0
|
||||
262|GTK+ and friends|GTKtoolkit|Note fot Win32 users: XP theming is back in 2.90.3 . Please test. #gtk|1276829697|0||0|0
|
||||
263|GTK+ and friends|GTKtoolkit|GTK+ 2.90.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00137.html #gtk|1276829633|0||0|0
|
||||
264|GTK+ and friends|GTKtoolkit|GLib 2.25.9 (unstable) released: http://ur1.ca/08hrl WARNING: API changes in GDBus, GSettings and GApplication #gtk|1276829581|0||0|0
|
||||
265|scaroo|scaroo|RT @scaroo: #SeedKit does RGBA window with css shadows and stuff : http://dl.dropbox.com/u/5746554/seedkit-does-rgba.png|1276734086|0|GTKtoolkit|0|1
|
||||
266|scaroo|scaroo|RT @scaroo: Great #SeedKit showcase from @cldx3000 : http://bit.ly/cRDosJ :D|1276734071|0|GTKtoolkit|0|1
|
||||
267|Lluis Sanchez Gual|slluis|RT @slluis: MonoDevelop 2.4 released! http://monodevelop.com/Download/MonoDevelop_2.4_Released|1276699438|0|GTKtoolkit|0|35
|
||||
268|GTK+ and friends|GTKtoolkit|RT @bertogg: GNOME Developer Training at GUADEC, with Claudio Saavedra, Fernando Herrera, Dave Neary and me: http://is.gd/cPkpJ|1276687240|0||0|0
|
||||
269|SparkleShare|SparkleShare|RT @sparkleshare: Let's start sparkling!|1276619215|0|GTKtoolkit|0|7
|
||||
270|Haakon Sporsheim|haaspors|RT @haakonsporsheim: I built my first app for #android today using jni and #glib :P Sweet :)|1276472258|0|GTKtoolkit|0|4
|
||||
271|GTK+ and friends|GTKtoolkit|Converting libraries and plugins to use GTK+3: http://mail.gnome.org/archives/desktop-devel-list/2010-June/msg00142.html #gtk|1276390360|0||1|0
|
||||
272|GTK+ and friends|GTKtoolkit|Call to GNOME maintainers: #GNOME 2.31.4 to ship GTK+ 2.90: http://bit.ly/bnuk3e #gtk|1276390311|0||0|0
|
||||
273|GTK+ and friends|GTKtoolkit|API changes in GLib master: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00079.html #gtk|1276390197|0||1|0
|
||||
274|GTK+ and friends|GTKtoolkit|GLib 2.25.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00036.html #gtk|1276390151|0||0|0
|
||||
275|Johan Dahlin|johandahlin|RT @johandahlin: is adding introspection support for GstMiniObject and other weird instantitiable GTypes. Still left: gjs/pygi support.|1276384704|0|GTKtoolkit|0|3
|
||||
276|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: So, yes: we dropped the copyright waiver on Clutter and Cogl. Contributions welcome!|1276281694|0|GTKtoolkit|0|12
|
||||
277|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm (C++ GTK+ bindings) 2.90 (unstable) released: http://ur1.ca/06nhn #gtk|1276182909|0||0|0
|
||||
278|Juanje Ojeda |juanjeojeda|RT @juanjeojeda: Progress on Gtk+ multitouch support: http://bit.ly/amIUiL #gtk #multitouch /via @garnacho|1276158728|0|GTKtoolkit|0|2
|
||||
279|GTK+ and friends|GTKtoolkit|GTK+ 2.90.2 (unstable) released: http://ur1.ca/06k6o Feedback about GtkApplication apreciated #gtk|1276141907|0||0|0
|
||||
280|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-06-08: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00044.html #gtk|1276040191|0||0|0
|
||||
281|GTK+ and friends|GTKtoolkit|RT @bratschegnome: @federicomena http://mzl.la/9PoFhD is nice I used to have CSD whr you can drag gtk+ from anywr in a window|1276038852|0||0|0
|
||||
282|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting 2010-06-08.In #gtk-devel on irc.gnome.org at 20:00 UTC.Agenda: http://ur1.ca/q6jh Everyone is invited to attend|1276010278|0||0|0
|
||||
283|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm (C++ Glib bindings) 2.25.1 (unstable) released: http://ur1.ca/067ff #gtk|1276007921|0||0|0
|
||||
284|GTK+ and friends|GTKtoolkit|GLib 2.25.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00036.html #gtk|1276003038|0||0|1
|
||||
285|GTK+ and friends|GTKtoolkit|New version of #pygi (the new #python bindings based in #GObjectIntrospection) released: http://ur1.ca/0623c|1275945620|0||0|3
|
||||
286|GTK+ and friends|GTKtoolkit|RT @ebassi: aaaand GBinding (a libexo-like binding between object properties) is mostly done: http://ur1.ca/05fz1 #gtk #glib|1275653238|0||1|0
|
||||
287|GTK+ and friends|GTKtoolkit|RT @ebassi: plus, I have a GIO branch with GController and friends|1275653044|0||0|0
|
||||
288|GTK+ and friends|GTKtoolkit|RT @ebassi submitted my patch for creating a GObjectController and get bulk notification #gtk|1275653008|0||0|0
|
||||
289|GTK+ and friends|GTKtoolkit|GTK+ 2.21.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00157.html #gtk|1275271768|0||0|0
|
||||
290|GTK+ and friends|GTKtoolkit|#dtrace and #systemtap support added to #Glib. Enjoy! https://bugzilla.gnome.org/show_bug.cgi?id=606044 #gtk|1275056183|0||0|2
|
||||
291|GTK+ and friends|GTKtoolkit|GTK+ 2.90.1 (unstable) released: http://ur1.ca/03hbv . Multiple input device support, flippable widgets and more ...|1274845319|0||1|0
|
||||
292|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-05-25: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00147.html #gtk #meeting|1274826674|0||0|0
|
||||
293|GTK+ and friends|GTKtoolkit|[REMINDER] GTK+ team IRC meeting 2010-05-25 at 20:00 UTC. Join us in #gtk-devel on irc.gnome.org. Agenda: http://ur1.ca/q6jh #gtk #meeting|1274801128|0||0|1
|
||||
294|GTK+ and friends|GTKtoolkit|Gtk2Hs 0.11.0 (Haskell bindings) released: http://haskell.org/gtk2hs/archives/2010/05/25/gtk2hs-0110-released/ #gtk #haskell|1274800929|0||0|0
|
||||
295|GTK+ and friends|GTKtoolkit|dconf 0.3.1 released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00145.html #gtk|1274800819|0||0|0
|
||||
296|GTK+ and friends|GTKtoolkit|GLib 2.25.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00144.html #gtk|1274800611|0||0|0
|
||||
297|GTK+ and friends|GTKtoolkit|XI2 @garnacho 's branch ready for review (xi2-for-master): http://mail.gnome.org/archives/gtk-devel-list/2010-May/thread.html #gtk|1274472793|0||0|0
|
||||
298|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtk-doc 1.15 released: http://mail.gnome.org/archives/gtk-doc-list/2010-May/msg00000.html #gtk|1274446357|0||0|0
|
||||
299|GTK+ and friends|GTKtoolkit|Ryan Lortie (@desrt) just released #dconf 0.3: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00128.html #gtk|1274311034|0||0|0
|
||||
300|GTK+ and friends|GTKtoolkit|GLib 2.25.6 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00127.html #gtk|1274310863|0||0|0
|
||||
301|GTK+ and friends|GTKtoolkit|GLib 2.25.6 (unstable) released:|1274310818|0||0|0
|
||||
302|GTK+ and friends|GTKtoolkit|GLib 2.25.5 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00078.html #gtk|1273891783|0||0|0
|
||||
303|GTK+ and friends|GTKtoolkit|Glade 3.7.1 released with lot of improvements: http://ur1.ca/011bc Thanks to #Openismus who helped sponsor this release #gtk|1273885948|0||0|0
|
||||
304|GTK+ and friends|GTKtoolkit|GDBus merged in Glib master http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00066.html #gtk|1273837079|0||0|1
|
||||
305|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-05-11 : http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00047.html #gtk|1273636581|0||0|0
|
||||
306|GTK+ and friends|GTKtoolkit|[REMINDER] GTK+ team IRC meeting - 2010-05-11 at 20:00 UTC. Join us in #gtk-devel on irc.gnome.org. Agenda: http://ur1.ca/q6jh #gtk #meeting|1273606386|0||0|0
|
||||
307|GTK+ and friends|GTKtoolkit|GTK+ 2.90.0 (unstable) released. This is the first development release leading toward 3.0. http://ur1.ca/006p2 #gtk #gtk3|1273553873|0||0|5
|
||||
308|GTK+ and friends|GTKtoolkit|Changes in GTK+ master that affect third parties: http://mail.gnome.org/archives/devel-announce-list/2010-May/msg00001.html #gtk #gtk3|1273531549|0||0|0
|
||||
309|GTK+ and friends|GTKtoolkit|Have dark themes is more easy now thanks to Bastian Nocera work: http://bit.ly/dBJzgn #gtk|1273531264|0||0|2
|
||||
310|GTK+ and friends|GTKtoolkit|GTK+ 2.21.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00026.html #gtk|1273285878|0||0|0
|
||||
311|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ IRC team meeting - 2010-05-04: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00010.html #gtk|1273024620|0||0|0
|
||||
312|GTK+ and friends|GTKtoolkit|GTK+ 2.20.1 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00004.html #gtk|1272983158|0||0|0
|
||||
313|GTK+ and friends|GTKtoolkit|GLib 2.24.1 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00005.html #gtk|1272983138|0||0|0
|
||||
314|GTK+ and friends|GTKtoolkit|Next GTK+ team meeting: 2010-05-04 at 20:00 UTC. More info and agenda: http://ur1.ca/q6jh . As always, everyone is invited to attend. #gtk|1272848781|0||1|0
|
||||
315|GTK+ and friends|GTKtoolkit|#Perl bindings: Gtk2 1.230 (unstable) available: http://mail.gnome.org/archives/gtk-perl-list/2010-April/msg00120.html #gtk|1272341271|0||0|0
|
||||
316|Emmanuele Bassi|ebassi|RT @ebassi: for the first time in ages I was able to work a bit on #gtkperl and add missing 2.16 and 2.18 wrappers|1272139155|0|GTKtoolkit|0|1
|
||||
317|GTK+ and friends|GTKtoolkit|GLib 2.25.3 (unstable) released with more #GSettings fixes: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00090.html #gtk|1272118354|0||0|1
|
||||
318|GTK+ and friends|GTKtoolkit|GLib 2.25.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00079.html|1272028911|0||0|0
|
||||
319|GTK+ and friends|GTKtoolkit|GTK+ Learns height-for-width geometry. Thanks Tristan Van Berkom and #Openismus for sponsoring him! http://ur1.ca/wiz3 #gtk|1271969484|0||1|2
|
||||
320|GTK+ and friends|GTKtoolkit|#GSettings porting guide available: http://ur1.ca/w2xl . Feedback welcomed!: http://ur1.ca/w2xn #gtk|1271777672|0||4|4
|
||||
321|GTK+ and friends|GTKtoolkit|Major change in Glib 2.25.0: #GSettings framework has been merged. This provides the API to replace #GConf.|1271715090|0||0|0
|
||||
322|GTK+ and friends|GTKtoolkit|GLib 2.25.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00066.html #gtk|1271714608|0||0|1
|
||||
323|GTK+ and friends|GTKtoolkit|GSettings status update by Matthias Clasen: http://blogs.fedoraproject.org/wp/mclasen/2010/04/17/gsettings/ #gtk #gsettingshackfest|1271519572|0||0|0
|
||||
324|GTK+ and friends|GTKtoolkit|GNOME Python Hackfest: Day 1 (by John (J5) Palmieri): http://www.j5live.com/2010/04/14/gnome-python-hackfest-day-1/ #python #pythonhackfest|1271291950|0||0|1
|
||||
325|GTK+ and friends|GTKtoolkit|Colin Walters: PyGTK, PyGI and PyGTK-on-PyGI #python #pythonhackfest http://ur1.ca/v5kw|1271291792|0||0|0
|
||||
326|GTK+ and friends|GTKtoolkit|Python Hackfest started.Ttwo concrete goals: porting PyGObject to #Python 3.x and giving a push to PyGI. http://ur1.ca/v5jc|1271291075|0||0|0
|
||||
327|GTK+ and friends|GTKtoolkit|GSettings Hackfest: Day 1 (by Vincent UNTZ) http://www.vuntz.net/journal/post/2010/04/13/GSettings-Hackfest:-Day-1 #gtk|1271290824|0||0|0
|
||||
328|GTK+ and friends|GTKtoolkit|GSettings Hackfest started. Thanks to #Novell for sponsoring.Also to #RedHat, #Codethink and #Lanedo for sending people! http://ur1.ca/v5i4|1271290481|0||1|0
|
||||
329|GTK+ and friends|GTKtoolkit|Xan Lopez from #Igalia attends the WebKit Contribution Meeting at the Apple HQ in Cupertino http://bit.ly/bHCqcC|1271247431|0||0|2
|
||||
330|GTK+ and friends|GTKtoolkit|Kristian Rietveld advances the #GTK+ Quartz/Mac OS X backend http://bit.ly/cJzV2o|1271247006|0||2|0
|
||||
331|GTK+ and friends|GTKtoolkit|#Openismus sponsors Tristan Van Berkom to complete the work on #GTK+ Natural Layout http://bit.ly/9FD3JC|1271246851|0||0|1
|
||||
332|GTK+ and friends|GTKtoolkit|RT @bilboed Having trouble reading GObject or GStreamer code ? Here's a small step-by-step rundown : http://is.gd/bk7mD|1270738689|0||0|1
|
||||
333|GTK+ and friends|GTKtoolkit|Colin Walters shares his thoughts about the new #GTK+ application class and its relationship with #GNOME 3 http://bit.ly/cvcHIG|1270482931|0||0|0
|
||||
334|Lucas Rocha|lucasratmundo|RT @lucasratmundo: GNOME Shell has been officially proposed as a GNOME module: http://bit.ly/d1yKE2|1269993362|0|GTKtoolkit|0|3
|
||||
335|Johan Dahlin|johandahlin|RT @johandahlin: New blog post http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/|1269993352|0|GTKtoolkit|0|1
|
||||
336|GTK+ and friends|GTKtoolkit|New Glib STABLE release: 2.24 http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00149.html #gtk|1269892314|0||0|0
|
||||
337|GTK+ and friends|GTKtoolkit|Help the GNOME Foundation to hire a sysadmin for GNOME! http://www.gnome.org/friends|1269658993|0||0|1
|
||||
338|GTK+ and friends|GTKtoolkit|Our friends from #Openismus sponsor #Glade 3 improvements http://bit.ly/9GqLDl|1269656334|0||0|0
|
||||
339|GTK+ and friends|GTKtoolkit|♺ @johandahlin: just commited the last remaining piece for cairo support in #gjs. World domination here we come|1269646821|0||0|0
|
||||
340|FedericoMenaQuintero|federicomena|RT @federicomena: Yay, the patch for glade is done - https://bugzilla.gnome.org/show_bug.cgi?id=594231|1269616128|0|GTKtoolkit|0|1
|
||||
341|Jorge Castro|castrojo|RT @castrojo: Become a Friend of GNOME: http://wp.me/poAPi-da|1269616083|0|GTKtoolkit|0|2
|
||||
342|Johan Dahlin|johandahlin|RT @johandahlin: just commited the last remaining piece for cairo support in #gjs. World domination here we come|1269616001|0|GTKtoolkit|0|2
|
||||
343|Jono Bacon|jonobacon|RT @jonobacon: New Acire and Python Snippets website! http://is.gd/aZGnF - still a work in progress, working on it as we speak! #pythons ...|1269615964|0|GTKtoolkit|0|5
|
||||
344|GTK+ and friends|GTKtoolkit|Python Snippets: project to gather an archive of simple Python (with GTK+) examples http://ur1.ca/rru1 !gtk @jonobacon|1269555086|0||0|2
|
||||
345|GTK+ and friends|GTKtoolkit|#yorbafoundation is hiring #Vala/#Gtk+ developers and summer interns in California to create multimedia apps http://yorba.org/jobs|1269479714|0||0|1
|
||||
346|GTK+ and friends|GTKtoolkit|♺ @ploum: now that I have to use Qt and Qt documentation, I've only one word : #gtk rocks ! ( yeah for #gnome people)|1269441827|0||0|2
|
||||
347|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ Team Meeting: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00134.html #gtk|1269391167|0||0|0
|
||||
348|GTK+ and friends|GTKtoolkit|New GTK+ STABLE release: 2.20 http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00132.html #gtk|1269374138|0||1|1
|
||||
349|GTK+ and friends|GTKtoolkit|Reminder: GTK+ meeting today at 20:00 UTC. Where: #gtk-devel on irc.gnome.orgAgenda: http://live.gnome.org/GTK+/Meetings|1269358583|0||0|0
|
||||
350|GTK+ and friends|GTKtoolkit|GLib 2.23.6 (development branch) released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00131.html #gtk|1269264623|0||0|0
|
||||
351|GNOME|gnome|RT @gnome: RT @rubenv GNOME was accepted for Google Summer of Code 2010! Looking for an IT student job that earns a lot? http://bit.ly/c ...|1269106193|0|GTKtoolkit|0|5
|
||||
352|FedericoMenaQuintero|federicomena|RT @federicomena: Untested code is broken code, even if it compiles. #yay #me|1269106077|0|GTKtoolkit|0|1
|
||||
353|Summer of Code|gsoc|RT @gsoc: Mentor organizations for #GSoC have been announced! http://bit.ly/bVMPWe|1268956782|0|GTKtoolkit|0|31
|
||||
354|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: just released clutter-gtk 0.10.4 - depending on clutter 1.2 and gtk+ 2.19|1268956726|0|GTKtoolkit|0|1
|
||||
355|GTK+ and friends|GTKtoolkit|Support for Class private data will be available in Glib 2.24: https://bugzilla.gnome.org/show_bug.cgi?id=521707|1268848373|0||0|2
|
||||
356|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting: March 23, at 20:00. http://ur1.ca/q6jg . Agenda: http://ur1.ca/q6jh #gtk|1268845861|0||0|1
|
||||
357|GTK+ and friends|GTKtoolkit|GTK+ 2.18.9 (stable branch) released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00115.html #gtk|1268844918|0||0|0
|
||||
358|GTK+ and friends|GTKtoolkit|GLib 2.22.5 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/thread.html #gtk|1268748183|0||0|0
|
||||
359|GTK+ and friends|GTKtoolkit|GTK+ 2.18.8 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00078.html #gtk|1268700945|0||0|0
|
||||
360|GTK+ and friends|GTKtoolkit|@chrisblizzard There's a .zip bundle indeed http://bit.ly/9ZkQCM|1268698714|0||0|0
|
||||
361|Alberto Ruiz|acruiz|RT @acruiz: libmodel and GTK+ from Codethink Labs! http://aruiz.synaptia.net/siliconisland/2010/03/libmodel-and-gtk-from-codethink-labs.html|1268698629|0|GTKtoolkit|0|3
|
||||
362|GTK+ and friends|GTKtoolkit|New version of the User Interface Designer #Glade released: 3.7.0 http://ur1.ca/phww #gtk|1268458482|0||0|0
|
||||
363|GTK+ and friends|GTKtoolkit|GTK+ 2.19.7 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00044.html #gtk|1268174602|0||0|0
|
||||
364|GTK+ and friends|GTKtoolkit|#GTK + future idea: automatic composite widgets using #GtkBuilder under the hood http://ur1.ca/oxly|1268157762|0||0|0
|
||||
365|GTK+ and friends|GTKtoolkit|GLib 2.23.5 is released, congrats to @desrt for his first release http://bit.ly/a3th6S|1268070995|0||0|1
|
||||
366|GTK+ and friends|GTKtoolkit|The first #PyGTK hackfest ever has been announced, 3.0 and Introspection are the major themes http://bit.ly/9Bd31g|1267875279|0||1|1
|
||||
367|GTK+ and friends|GTKtoolkit|Kristian Rietveld gives an update of the GTK+/Quartz MacOSX native port http://bit.ly/cZ84VN|1267832356|0||2|0
|
||||
368|Jono Bacon|jonobacon|RT @jonobacon: Merged in more python-snippets: desktop widget, drag and open in PyGTK, GStreamer video playback, and a bunch of fixes! h ...|1267831925|0|GTKtoolkit|0|3
|
||||
369|GTK+ and friends|GTKtoolkit|#Openismus is looking for C/C++ GTK+/Qt trainees http://bit.ly/c16WEp|1267831840|0||0|0
|
||||
370|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: clutter 1.2.0 - first stable release, with lots of new API - http://bit.ly/ckdS6R|1267561885|0|GTKtoolkit|0|9
|
||||
371|GTK+ and friends|GTKtoolkit|#Lanedo is hiring GTK+/GNOME hackers! http://bit.ly/d6fTWQ|1267560392|0||0|1
|
||||
372|GTK+ and friends|GTKtoolkit|You can help to make a difference too, help the #GTK+ maintainers to improve the documetnation infrastructure! http://bit.ly/dmJifE|1267538283|0||0|1
|
||||
373|GTK+ and friends|GTKtoolkit|Designers bring back excitement around the #GNOME project http://bit.ly/9Zcx8c|1267202696|0||0|1
|
||||
374|GTK+ and friends|GTKtoolkit|#webkit #gtk gets ARGB support, allowing it to set a transparent background! http://bit.ly/cBeouj|1267146282|0||0|2
|
||||
375|GTK+ and friends|GTKtoolkit|Follow GNOME TV on Vimeo http://is.gd/96PlT|1267050829|0||0|1
|
||||
376|GTK+ and friends|GTKtoolkit|Extensive article on the state of #WebKitGtk http://is.gd/95En2|1267031517|0||0|0
|
||||
377|GTK+ and friends|GTKtoolkit|@ploum Are you hitting !PyGTK or !GTK+ bugs? Are they already reported upstream?|1267029810|0||0|0
|
||||
378|GTK+ and friends|GTKtoolkit|#GNUStep gets #GTK+ theming http://is.gd/95vHl more at http://is.gd/95wt8|1267029498|0||0|1
|
||||
379|GTK+ and friends|GTKtoolkit|GTK+ 2.19.6 released: http://mail.gnome.org/archives/gtk-devel-list/2010-February/msg00050.html #gtk|1266966985|0||0|0
|
||||
380|GTK+ and friends|GTKtoolkit|Did you know that #GTK+ is the official toolkit for the #LiMo software stack? http://bit.ly/cuEdHx|1266925406|0||0|0
|
||||
381|GTK+ and friends|GTKtoolkit|@lmedinas publishes a #javascript #example on how to put an status icon with #Gtk+ http://bit.ly/9py1uC Thanks a lot Luis!|1266886644|0||1|1
|
||||
382|GTK+ and friends|GTKtoolkit|♺ @ebassi: I should really finish up the GDom API as well|1266880653|0||0|0
|
||||
383|GTK+ and friends|GTKtoolkit|♺ @ebassi: I hope to work on this for the next GIO release, and the GTK+ side for 3.0|1266880641|0||0|0
|
||||
384|GTK+ and friends|GTKtoolkit|♺ @ebassi: just updated the ApplicationClass design wiki page with the stuff @Cwiiis did for Mx - http://bit.ly/cfAOJk|1266880559|0||0|0
|
||||
385|GTK+ and friends|GTKtoolkit|#GTK+ Kick Start tutorial for #Vala http://www.vimeo.com/9617309 OGG: http://bit.ly/czegmp|1266874471|0||0|1
|
||||
386|GTK+ and friends|GTKtoolkit|@migheldeicaza shows off #monodevelop on #macosx deploying and debugging #gtk sharp apps on a #MeeGo device http://bit.ly/9XR0Pg|1266874171|0||1|1
|
||||
387|GTK+ and friends|GTKtoolkit|#GTK+ is the first toolkit to expose the #Xorg multitouch stack through #XI2 http://bit.ly/9tniKu - Nice work @garnacho!|1266863259|0||0|1
|
||||
388|GTK+ and friends|GTKtoolkit|This is the official GTK+ first micropost!|1266856657|0||0|1
|
||||
|
||||
@@ -47,7 +47,7 @@ dist_appsicon32_DATA = data/32x32/gtk3-widget-factory.png data/32x32/gtk3-widget
|
||||
dist_appsicon48_DATA = data/48x48/gtk3-widget-factory.png data/48x48/gtk3-widget-factory-symbolic.symbolic.png
|
||||
dist_appsicon256_DATA = data/256x256/gtk3-widget-factory.png data/256x256/gtk3-widget-factory-symbolic.symbolic.png
|
||||
|
||||
update_icon_cache = gtk-update-icon-cache --ignore-theme-index --force
|
||||
update_icon_cache = $(top_builddir)/gtk/gtk-update-icon-cache --ignore-theme-index --force
|
||||
|
||||
install-data-hook: install-update-icon-cache
|
||||
uninstall-hook: uninstall-update-icon-cache
|
||||
|
||||
@@ -3627,6 +3627,7 @@ microphone-sensitivity-medium-symbolic</property>
|
||||
<object class="GtkToolbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="toolbar-style">icons</property>
|
||||
<property name="icon-size">1</property>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="toolbutton1">
|
||||
|
||||
@@ -261,6 +261,8 @@ GTKDOC_LIBS = \
|
||||
# Extra options to supply to gtkdoc-mkdb
|
||||
MKDB_OPTIONS=--output-format=xml --name-space=gtk
|
||||
|
||||
MKHTML_OPTIONS="--path=\"$(abs_srcdir):$(top_srcdir)/examples\""
|
||||
|
||||
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE)
|
||||
content_files = \
|
||||
version.xml \
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
<cmdsynopsis>
|
||||
<command>gtk3-demo</command>
|
||||
<arg choice="opt">--help</arg>
|
||||
<arg choice="opt">--list</arg>
|
||||
<arg choice="opt">--run <replaceable>EXAMPLE</replaceable></arg>
|
||||
<arg choice="opt">--autoquit</arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
@@ -53,6 +56,20 @@ other used resources, such as ui files and icons.
|
||||
<term><option>-h</option>, <option>--help</option></term>
|
||||
<listitem><para>Show help options</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>--list</option></term>
|
||||
<listitem><para>List available examples.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-run <replaceable>EXAMPLE</replaceable></option></term>
|
||||
<listitem><para>Run the named example. Use <option>--list</option> to
|
||||
see the available examples.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>--autoquit</option></term>
|
||||
<listitem><para>Quit after a short timeout. This is intended for use
|
||||
with <option>--run</option>, e.g. when profiling.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
|
||||
@@ -825,19 +825,33 @@ map_named_shm (char *name, gsize size)
|
||||
|
||||
int fd;
|
||||
void *ptr;
|
||||
char *filename = NULL;
|
||||
|
||||
fd = shm_open(name, O_RDONLY, 0600);
|
||||
fd = shm_open (name, O_RDONLY, 0600);
|
||||
if (fd == -1)
|
||||
{
|
||||
perror ("Failed to shm_open");
|
||||
return NULL;
|
||||
filename = g_build_filename (g_get_tmp_dir (), name, NULL);
|
||||
fd = open (filename, O_RDONLY);
|
||||
if (fd == -1)
|
||||
{
|
||||
perror ("Failed to map shm");
|
||||
g_free (filename);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
ptr = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
ptr = mmap (0, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
|
||||
(void) close(fd);
|
||||
(void) close (fd);
|
||||
|
||||
shm_unlink (name);
|
||||
if (filename)
|
||||
{
|
||||
unlink (filename);
|
||||
g_free (filename);
|
||||
}
|
||||
else
|
||||
shm_unlink (name);
|
||||
|
||||
return ptr;
|
||||
|
||||
|
||||
@@ -524,10 +524,11 @@ _gdk_broadway_server_window_set_transient_for (GdkBroadwayServer *server,
|
||||
}
|
||||
|
||||
static void *
|
||||
map_named_shm (char *name, gsize size)
|
||||
map_named_shm (char *name, gsize size, gboolean *is_shm)
|
||||
{
|
||||
#ifdef G_OS_UNIX
|
||||
|
||||
char *filename = NULL;
|
||||
int fd;
|
||||
void *ptr;
|
||||
int res;
|
||||
@@ -535,10 +536,24 @@ map_named_shm (char *name, gsize size)
|
||||
fd = shm_open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
|
||||
if (fd == -1)
|
||||
{
|
||||
if (errno != EEXIST)
|
||||
g_error ("Unable to allocate shared mem for window");
|
||||
return NULL;
|
||||
if (errno == EEXIST)
|
||||
return NULL;
|
||||
|
||||
filename = g_build_filename (g_get_tmp_dir (), name, NULL);
|
||||
|
||||
fd = open (filename, O_RDWR | O_CREAT | O_EXCL, 0600);
|
||||
g_free (filename);
|
||||
if (fd == -1)
|
||||
{
|
||||
if (errno != EEXIST)
|
||||
g_error ("Unable to allocate shared mem for window");
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
*is_shm = FALSE;
|
||||
}
|
||||
else
|
||||
*is_shm = TRUE;
|
||||
|
||||
res = ftruncate (fd, size);
|
||||
g_assert (res != -1);
|
||||
@@ -547,7 +562,10 @@ map_named_shm (char *name, gsize size)
|
||||
res = posix_fallocate (fd, 0, size);
|
||||
if (res != 0 && errno == ENOSPC)
|
||||
{
|
||||
shm_unlink (name);
|
||||
if (filename)
|
||||
unlink (filename);
|
||||
else
|
||||
shm_unlink (name);
|
||||
g_error ("Not enough shared memory for window surface");
|
||||
}
|
||||
#endif
|
||||
@@ -579,6 +597,7 @@ map_named_shm (char *name, gsize size)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*is_shm = TRUE;
|
||||
res = ftruncate (fd, size);
|
||||
g_assert (res != -1);
|
||||
|
||||
@@ -614,7 +633,7 @@ make_valid_fs_char (char c)
|
||||
|
||||
/* name must have at least space for 34 bytes */
|
||||
static gpointer
|
||||
create_random_shm (char *name, gsize size)
|
||||
create_random_shm (char *name, gsize size, gboolean *is_shm)
|
||||
{
|
||||
guint32 r;
|
||||
int i, o;
|
||||
@@ -638,7 +657,7 @@ create_random_shm (char *name, gsize size)
|
||||
}
|
||||
name[o++] = 0;
|
||||
|
||||
ptr = map_named_shm (name, size);
|
||||
ptr = map_named_shm (name, size, is_shm);
|
||||
if (ptr)
|
||||
return ptr;
|
||||
}
|
||||
@@ -650,6 +669,7 @@ typedef struct {
|
||||
char name[36];
|
||||
void *data;
|
||||
gsize data_size;
|
||||
gboolean is_shm;
|
||||
} BroadwayShmSurfaceData;
|
||||
|
||||
static void
|
||||
@@ -660,7 +680,14 @@ shm_data_destroy (void *_data)
|
||||
#ifdef G_OS_UNIX
|
||||
|
||||
munmap (data->data, data->data_size);
|
||||
shm_unlink (data->name);
|
||||
if (data->is_shm)
|
||||
shm_unlink (data->name);
|
||||
else
|
||||
{
|
||||
char *filename = g_build_filename (g_get_tmp_dir (), data->name, NULL);
|
||||
unlink (filename);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
#elif defined(G_OS_WIN32)
|
||||
|
||||
@@ -689,7 +716,7 @@ _gdk_broadway_server_create_surface (int width,
|
||||
|
||||
data = g_new (BroadwayShmSurfaceData, 1);
|
||||
data->data_size = width * height * sizeof (guint32);
|
||||
data->data = create_random_shm (data->name, data->data_size);
|
||||
data->data = create_random_shm (data->name, data->data_size, &data->is_shm);
|
||||
|
||||
surface = cairo_image_surface_create_for_data ((guchar *)data->data,
|
||||
CAIRO_FORMAT_ARGB32, width, height, width * sizeof (guint32));
|
||||
|
||||
@@ -61,24 +61,24 @@ struct _GdkColor
|
||||
|
||||
#define GDK_TYPE_COLOR (gdk_color_get_type ())
|
||||
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_get_type)
|
||||
GType gdk_color_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_copy)
|
||||
GdkColor *gdk_color_copy (const GdkColor *color);
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_free)
|
||||
void gdk_color_free (GdkColor *color);
|
||||
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_hash)
|
||||
guint gdk_color_hash (const GdkColor *color);
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_equal)
|
||||
gboolean gdk_color_equal (const GdkColor *colora,
|
||||
const GdkColor *colorb);
|
||||
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_parse)
|
||||
gboolean gdk_color_parse (const gchar *spec,
|
||||
GdkColor *color);
|
||||
GDK_DEPRECATED_IN_3_14
|
||||
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_to_string)
|
||||
gchar * gdk_color_to_string (const GdkColor *color);
|
||||
|
||||
|
||||
|
||||
@@ -130,6 +130,7 @@ static int gdk_initialized = 0; /* 1 if the library is initi
|
||||
*/
|
||||
|
||||
static gchar *gdk_progclass = NULL;
|
||||
static gboolean gdk_progclass_overridden;
|
||||
|
||||
static GMutex gdk_threads_mutex;
|
||||
|
||||
@@ -208,6 +209,7 @@ static gboolean
|
||||
gdk_arg_class_cb (const char *key, const char *value, gpointer user_data, GError **error)
|
||||
{
|
||||
gdk_set_program_class (value);
|
||||
gdk_progclass_overridden = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1025,10 +1027,16 @@ gdk_get_program_class (void)
|
||||
* Sets the program class. The X11 backend uses the program class to set
|
||||
* the class name part of the `WM_CLASS` property on
|
||||
* toplevel windows; see the ICCCM.
|
||||
*
|
||||
* The program class can still be overridden with the --class command
|
||||
* line option.
|
||||
*/
|
||||
void
|
||||
gdk_set_program_class (const char *program_class)
|
||||
{
|
||||
if (gdk_progclass_overridden)
|
||||
return;
|
||||
|
||||
g_free (gdk_progclass);
|
||||
|
||||
gdk_progclass = g_strdup (program_class);
|
||||
|
||||
+4
-3
@@ -52,7 +52,8 @@ get_vertex_type_name (int type)
|
||||
}
|
||||
|
||||
static guint
|
||||
create_shader (int type, const char const *code)
|
||||
create_shader (int type,
|
||||
const char *code)
|
||||
{
|
||||
guint shader;
|
||||
int status;
|
||||
@@ -85,8 +86,8 @@ create_shader (int type, const char const *code)
|
||||
|
||||
static void
|
||||
make_program (GdkGLContextProgram *program,
|
||||
const char const *vertex_shader_code,
|
||||
const char const *fragment_shader_code)
|
||||
const char *vertex_shader_code,
|
||||
const char *fragment_shader_code)
|
||||
{
|
||||
guint vertex_shader, fragment_shader;
|
||||
int status;
|
||||
|
||||
+3
-3
@@ -255,14 +255,14 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
|
||||
/**
|
||||
* GdkGLContext:display:
|
||||
*
|
||||
* The #GdkWindow the gl context is bound to.
|
||||
* The #GdkDisplay used to create the #GdkGLContext.
|
||||
*
|
||||
* Since: 3.16
|
||||
*/
|
||||
obj_pspecs[PROP_DISPLAY] =
|
||||
g_param_spec_object ("display",
|
||||
P_("Display"),
|
||||
P_("The GDK display the context is from"),
|
||||
P_("The GDK display used to create the GL context"),
|
||||
GDK_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
@@ -294,7 +294,7 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
|
||||
obj_pspecs[PROP_SHARED_CONTEXT] =
|
||||
g_param_spec_object ("shared-context",
|
||||
P_("Shared context"),
|
||||
P_("The GL context this context share data with"),
|
||||
P_("The GL context this context shares data with"),
|
||||
GDK_TYPE_GL_CONTEXT,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
|
||||
@@ -669,6 +669,12 @@ gdk_offscreen_window_set_opacity (GdkWindow *window, gdouble opacity)
|
||||
{
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_offscreen_window_beep (GdkWindow *window)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
|
||||
{
|
||||
@@ -701,7 +707,7 @@ gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
|
||||
impl_class->destroy_foreign = NULL;
|
||||
impl_class->get_shape = NULL;
|
||||
impl_class->get_input_shape = NULL;
|
||||
impl_class->beep = NULL;
|
||||
impl_class->beep = gdk_offscreen_window_beep;
|
||||
|
||||
impl_class->focus = NULL;
|
||||
impl_class->set_type_hint = NULL;
|
||||
|
||||
+8
-2
@@ -619,7 +619,10 @@ gdk_screen_get_height (GdkScreen *screen)
|
||||
* @screen: a #GdkScreen
|
||||
*
|
||||
* Gets the width of @screen in millimeters.
|
||||
* Note that on some X servers this value will not be correct.
|
||||
*
|
||||
* Note that this value is somewhat ill-defined when the screen
|
||||
* has multiple monitors of different resolution. It is recommended
|
||||
* to use the monitor dimensions instead.
|
||||
*
|
||||
* Returns: the width of @screen in millimeters.
|
||||
*
|
||||
@@ -638,7 +641,10 @@ gdk_screen_get_width_mm (GdkScreen *screen)
|
||||
* @screen: a #GdkScreen
|
||||
*
|
||||
* Returns the height of @screen in millimeters.
|
||||
* Note that on some X servers this value will not be correct.
|
||||
*
|
||||
* Note that this value is somewhat ill-defined when the screen
|
||||
* has multiple monitors of different resolution. It is recommended
|
||||
* to use the monitor dimensions instead.
|
||||
*
|
||||
* Returns: the heigth of @screen in millimeters.
|
||||
*
|
||||
|
||||
@@ -207,6 +207,10 @@ typedef enum
|
||||
* reserved values such as %GDK_MODIFIER_RESERVED_13_MASK. Your code
|
||||
* should preserve and ignore them. You can use %GDK_MODIFIER_MASK to
|
||||
* remove all reserved values.
|
||||
*
|
||||
* Also note that the GDK X backend interprets button press events for button
|
||||
* 4-7 as scroll events, so %GDK_BUTTON4_MASK and %GDK_BUTTON5_MASK will never
|
||||
* be set.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
|
||||
+25
-5
@@ -3111,7 +3111,6 @@ gdk_window_end_paint (GdkWindow *window)
|
||||
{
|
||||
surface = gdk_window_ref_impl_surface (window);
|
||||
cr = cairo_create (surface);
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
cairo_set_source_surface (cr, window->current_paint.surface, 0, 0);
|
||||
gdk_cairo_region (cr, window->current_paint.region);
|
||||
@@ -3123,6 +3122,7 @@ gdk_window_end_paint (GdkWindow *window)
|
||||
cairo_destroy (cr);
|
||||
|
||||
cairo_surface_flush (surface);
|
||||
cairo_surface_destroy (surface);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5979,10 +5979,25 @@ gdk_window_set_background_rgba (GdkWindow *window,
|
||||
const GdkRGBA *rgba)
|
||||
{
|
||||
cairo_pattern_t *pattern;
|
||||
GdkRGBA prev_rgba;
|
||||
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
g_return_if_fail (rgba != NULL);
|
||||
|
||||
/*
|
||||
* If the new RGBA matches the previous pattern, ignore the change so that
|
||||
* we do not invalidate the window contents.
|
||||
*/
|
||||
if ((window->background != NULL) &&
|
||||
(cairo_pattern_get_type (window->background) == CAIRO_PATTERN_TYPE_SOLID) &&
|
||||
(cairo_pattern_get_rgba (window->background,
|
||||
&prev_rgba.red,
|
||||
&prev_rgba.green,
|
||||
&prev_rgba.blue,
|
||||
&prev_rgba.alpha) == CAIRO_STATUS_SUCCESS) &&
|
||||
gdk_rgba_equal (&prev_rgba, rgba))
|
||||
return;
|
||||
|
||||
pattern = cairo_pattern_create_rgba (rgba->red, rgba->green,
|
||||
rgba->blue, rgba->alpha);
|
||||
|
||||
@@ -9743,6 +9758,8 @@ gdk_window_set_geometry_hints (GdkWindow *window,
|
||||
const GdkGeometry *geometry,
|
||||
GdkWindowHints geom_mask)
|
||||
{
|
||||
g_return_if_fail (geometry != NULL || geom_mask == 0);
|
||||
|
||||
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_geometry_hints (window, geometry, geom_mask);
|
||||
}
|
||||
|
||||
@@ -11084,7 +11101,10 @@ gdk_window_get_unscaled_size (GdkWindow *window,
|
||||
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
|
||||
|
||||
if (impl_class->get_unscaled_size)
|
||||
return impl_class->get_unscaled_size (window, unscaled_width, unscaled_height);
|
||||
{
|
||||
impl_class->get_unscaled_size (window, unscaled_width, unscaled_height);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
scale = gdk_window_get_scale_factor (window);
|
||||
@@ -11100,9 +11120,9 @@ gdk_window_get_unscaled_size (GdkWindow *window,
|
||||
/**
|
||||
* gdk_window_set_opaque_region:
|
||||
* @window: a top-level or non-native #GdkWindow
|
||||
* @region: a region
|
||||
* @region: (allow-none): a region, or %NULL
|
||||
*
|
||||
* For optimizization purposes, compositing window managers may
|
||||
* For optimisation purposes, compositing window managers may
|
||||
* like to not draw obscured regions of windows, or turn off blending
|
||||
* during for these regions. With RGB windows with no transparency,
|
||||
* this is just the shape of the window, but with ARGB32 windows, the
|
||||
@@ -11111,7 +11131,7 @@ gdk_window_get_unscaled_size (GdkWindow *window,
|
||||
*
|
||||
* This function only works for toplevel windows.
|
||||
*
|
||||
* GTK+ will automatically update this property automatically if
|
||||
* GTK+ will update this property automatically if
|
||||
* the @window background is opaque, as we know where the opaque regions
|
||||
* are. If your window background is not opaque, please update this
|
||||
* property in your #GtkWidget::style-updated handler.
|
||||
|
||||
+3
-3
@@ -30,13 +30,13 @@
|
||||
#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())
|
||||
#define GDK_IS_MIR_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_WINDOW))
|
||||
|
||||
GDK_AVAILABLE_IN_3_10
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
GType gdk_mir_display_get_type (void);
|
||||
|
||||
GDK_AVAILABLE_IN_3_10
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
|
||||
|
||||
GDK_AVAILABLE_IN_3_10
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
GType gdk_mir_window_get_type (void);
|
||||
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
|
||||
@@ -33,6 +33,8 @@ libgdk_quartz_la_SOURCES = \
|
||||
gdkdnd-quartz.h \
|
||||
gdkevents-quartz.c \
|
||||
gdkeventloop-quartz.c \
|
||||
gdkglcontext-quartz.c \
|
||||
gdkglcontext-quartz.h \
|
||||
gdkglobals-quartz.c \
|
||||
gdkkeys-quartz.c \
|
||||
gdkprivate-quartz.h \
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
*
|
||||
* gdkglcontext-quartz.c: Quartz specific OpenGL wrappers
|
||||
*
|
||||
* Copyright © 2014 Emmanuele Bassi
|
||||
* Copyright © 2014 Alexander Larsson
|
||||
* Copyright © 2014 Brion Vibber
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gdkglcontext-quartz.h"
|
||||
|
||||
#include "gdkintl.h"
|
||||
|
||||
GdkGLContext *
|
||||
gdk_quartz_window_create_gl_context (GdkWindow *window,
|
||||
gboolean attached,
|
||||
GdkGLContext *share,
|
||||
GError **error)
|
||||
{
|
||||
/* FIXME: implement */
|
||||
g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
|
||||
"Not implemented on OS X");
|
||||
return NULL;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
*
|
||||
* gdkglcontext-quartz.h: Private Quartz specific OpenGL wrappers
|
||||
*
|
||||
* Copyright © 2014 Emmanuele Bassi
|
||||
* Copyright © 2014 Red Hat, Int
|
||||
* Copyright © 2014 Brion Vibber
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_QUARTZ_GL_CONTEXT__
|
||||
#define __GDK_QUARTZ_GL_CONTEXT__
|
||||
|
||||
#include "gdkglcontextprivate.h"
|
||||
#include "gdkvisual.h"
|
||||
#include "gdkwindow.h"
|
||||
#include "gdkinternals.h"
|
||||
#include "gdkmain.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
GdkGLContext * gdk_quartz_window_create_gl_context (GdkWindow *window,
|
||||
gboolean attach,
|
||||
GdkGLContext *share,
|
||||
GError **error);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_QUARTZ_GL_CONTEXT__ */
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
#include "gdkwindowimpl.h"
|
||||
#include "gdkprivate-quartz.h"
|
||||
#include "gdkglcontext-quartz.h"
|
||||
#include "gdkquartzscreen.h"
|
||||
#include "gdkquartzcursor.h"
|
||||
|
||||
@@ -1862,7 +1863,17 @@ gdk_quartz_window_set_geometry_hints (GdkWindow *window,
|
||||
|
||||
if (geom_mask & GDK_HINT_ASPECT)
|
||||
{
|
||||
/* FIXME: Implement */
|
||||
NSSize size;
|
||||
|
||||
if (geometry->min_aspect != geometry->max_aspect)
|
||||
{
|
||||
g_warning ("Only equal minimum and maximum aspect ratios are supported on Mac OS. Using minimum aspect ratio...");
|
||||
}
|
||||
|
||||
size.width = geometry->min_aspect;
|
||||
size.height = 1.0;
|
||||
|
||||
[impl->toplevel setContentAspectRatio:size];
|
||||
}
|
||||
|
||||
if (geom_mask & GDK_HINT_WIN_GRAVITY)
|
||||
@@ -2944,6 +2955,7 @@ gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass)
|
||||
impl_class->change_property = _gdk_quartz_window_change_property;
|
||||
impl_class->delete_property = _gdk_quartz_window_delete_property;
|
||||
|
||||
impl_class->create_gl_context = gdk_quartz_window_create_gl_context;
|
||||
|
||||
impl_quartz_class->get_context = gdk_window_impl_quartz_get_context;
|
||||
impl_quartz_class->release_context = gdk_window_impl_quartz_release_context;
|
||||
|
||||
@@ -95,6 +95,9 @@ struct _GdkWaylandDeviceData
|
||||
struct wl_surface *pointer_surface;
|
||||
guint current_output_scale;
|
||||
GSList *pointer_surface_outputs;
|
||||
|
||||
/* Source/dest for non-local dnd */
|
||||
GdkWindow *foreign_dnd_window;
|
||||
};
|
||||
|
||||
struct _GdkWaylandDevice
|
||||
@@ -208,10 +211,13 @@ gdk_wayland_device_update_window_cursor (GdkWaylandDeviceData *wd)
|
||||
wd->enter_serial,
|
||||
wd->pointer_surface,
|
||||
x, y);
|
||||
wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
|
||||
wl_surface_set_buffer_scale (wd->pointer_surface, scale);
|
||||
wl_surface_damage (wd->pointer_surface, 0, 0, w, h);
|
||||
wl_surface_commit (wd->pointer_surface);
|
||||
if (buffer)
|
||||
{
|
||||
wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
|
||||
wl_surface_set_buffer_scale (wd->pointer_surface, scale);
|
||||
wl_surface_damage (wd->pointer_surface, 0, 0, w, h);
|
||||
wl_surface_commit (wd->pointer_surface);
|
||||
}
|
||||
|
||||
if (wd->grab_cursor)
|
||||
{
|
||||
@@ -623,8 +629,10 @@ data_device_enter (void *data,
|
||||
|
||||
dnd_owner = gdk_selection_owner_get_for_display (device->display, gdk_drag_get_selection (device->drop_context));
|
||||
|
||||
if (dnd_owner)
|
||||
_gdk_wayland_drag_context_set_source_window (device->drop_context, dnd_owner);
|
||||
if (!dnd_owner)
|
||||
dnd_owner = device->foreign_dnd_window;
|
||||
|
||||
_gdk_wayland_drag_context_set_source_window (device->drop_context, dnd_owner);
|
||||
|
||||
_gdk_wayland_drag_context_set_dest_window (device->drop_context,
|
||||
dest_window, serial);
|
||||
@@ -1838,6 +1846,26 @@ static const struct wl_surface_listener pointer_surface_listener = {
|
||||
pointer_surface_leave
|
||||
};
|
||||
|
||||
static GdkWindow *
|
||||
create_foreign_dnd_window (GdkDisplay *display)
|
||||
{
|
||||
GdkWindowAttr attrs;
|
||||
GdkScreen *screen;
|
||||
guint mask;
|
||||
|
||||
screen = gdk_display_get_default_screen (display);
|
||||
|
||||
attrs.x = attrs.y = 0;
|
||||
attrs.width = attrs.height = 1;
|
||||
attrs.wclass = GDK_INPUT_OUTPUT;
|
||||
attrs.window_type = GDK_WINDOW_TEMP;
|
||||
attrs.visual = gdk_screen_get_system_visual (screen);
|
||||
|
||||
mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
|
||||
|
||||
return gdk_window_new (gdk_screen_get_root_window (screen), &attrs, mask);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager,
|
||||
guint32 id,
|
||||
@@ -1857,6 +1885,7 @@ _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager,
|
||||
device->device_manager = device_manager;
|
||||
device->touches = g_hash_table_new_full (NULL, NULL, NULL,
|
||||
(GDestroyNotify) g_free);
|
||||
device->foreign_dnd_window = create_foreign_dnd_window (display);
|
||||
device->wl_seat = wl_seat;
|
||||
|
||||
wl_seat_add_listener (device->wl_seat, &seat_listener, device);
|
||||
@@ -1898,6 +1927,7 @@ _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *manager,
|
||||
/* FIXME: destroy data_device */
|
||||
g_clear_object (&device->keyboard_settings);
|
||||
g_hash_table_destroy (device->touches);
|
||||
gdk_window_destroy (device->foreign_dnd_window);
|
||||
g_free (device);
|
||||
|
||||
break;
|
||||
|
||||
@@ -193,11 +193,13 @@ gdk_registry_handle_global (void *data,
|
||||
output =
|
||||
wl_registry_bind (display_wayland->wl_registry, id, &wl_output_interface, MIN (version, 2));
|
||||
_gdk_wayland_screen_add_output (display_wayland->screen, id, output, MIN (version, 2));
|
||||
wl_display_roundtrip (display_wayland->wl_display);
|
||||
}
|
||||
else if (strcmp (interface, "wl_seat") == 0)
|
||||
{
|
||||
seat = wl_registry_bind (display_wayland->wl_registry, id, &wl_seat_interface, MIN (version, 4));
|
||||
_gdk_wayland_device_manager_add_seat (gdk_display->device_manager, id, seat);
|
||||
wl_display_roundtrip (display_wayland->wl_display);
|
||||
}
|
||||
else if (strcmp (interface, "wl_data_device_manager") == 0)
|
||||
{
|
||||
|
||||
@@ -236,7 +236,8 @@ gdk_wayland_drag_context_drop_reply (GdkDragContext *context,
|
||||
gboolean accepted,
|
||||
guint32 time_)
|
||||
{
|
||||
gdk_wayland_drop_context_set_status (context, accepted);
|
||||
if (!accepted)
|
||||
gdk_wayland_drop_context_set_status (context, accepted);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -418,6 +419,9 @@ _gdk_wayland_drag_context_set_dest_window (GdkDragContext *context,
|
||||
GdkWindow *dest_window,
|
||||
uint32_t serial)
|
||||
{
|
||||
if (context->dest_window)
|
||||
g_object_unref (context->dest_window);
|
||||
|
||||
context->dest_window = dest_window ? g_object_ref (dest_window) : NULL;
|
||||
GDK_WAYLAND_DRAG_CONTEXT (context)->serial = serial;
|
||||
gdk_wayland_drop_context_update_targets (context);
|
||||
|
||||
@@ -1001,25 +1001,52 @@ _gdk_wayland_screen_init (GdkWaylandScreen *screen_wayland)
|
||||
static void
|
||||
update_screen_size (GdkWaylandScreen *screen_wayland)
|
||||
{
|
||||
gboolean emit_changed = FALSE;
|
||||
gint width, height;
|
||||
gint width_mm, height_mm;
|
||||
gint i;
|
||||
|
||||
width = height = 0;
|
||||
width_mm = height_mm = 0;
|
||||
for (i = 0; i < screen_wayland->monitors->len; i++)
|
||||
{
|
||||
GdkWaylandMonitor *monitor = screen_wayland->monitors->pdata[i];
|
||||
|
||||
/* XXX: Largely assuming here that monitor areas
|
||||
* are contiguous and never overlap.
|
||||
*/
|
||||
if (monitor->geometry.x > 0)
|
||||
width_mm += monitor->width_mm;
|
||||
else
|
||||
width_mm = MAX (width_mm, monitor->width_mm);
|
||||
|
||||
if (monitor->geometry.y > 0)
|
||||
height_mm += monitor->height_mm;
|
||||
else
|
||||
height_mm = MAX (height_mm, monitor->height_mm);
|
||||
|
||||
width = MAX (width, monitor->geometry.x + monitor->geometry.width);
|
||||
height = MAX (height, monitor->geometry.y + monitor->geometry.height);
|
||||
}
|
||||
|
||||
if (screen_wayland->width_mm != width_mm ||
|
||||
screen_wayland->height_mm != height_mm)
|
||||
{
|
||||
emit_changed = TRUE;
|
||||
screen_wayland->width_mm = width_mm;
|
||||
screen_wayland->height_mm = height_mm;
|
||||
}
|
||||
|
||||
if (screen_wayland->width != width ||
|
||||
screen_wayland->height != height)
|
||||
{
|
||||
emit_changed = TRUE;
|
||||
screen_wayland->width = width;
|
||||
screen_wayland->height = height;
|
||||
g_signal_emit_by_name (screen_wayland, "size-changed");
|
||||
}
|
||||
|
||||
if (emit_changed)
|
||||
g_signal_emit_by_name (screen_wayland, "size-changed");
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -416,9 +416,11 @@ async_write_data_cb (GObject *object,
|
||||
res, &error);
|
||||
if (error)
|
||||
{
|
||||
g_warning ("Error writing selection data: %s", error->message);
|
||||
g_error_free (error);
|
||||
if (error->domain != G_IO_ERROR ||
|
||||
error->code != G_IO_ERROR_CANCELLED)
|
||||
g_warning ("Error writing selection data: %s", error->message);
|
||||
|
||||
g_error_free (error);
|
||||
async_write_data_free (write_data);
|
||||
return;
|
||||
}
|
||||
@@ -558,12 +560,12 @@ gdk_wayland_selection_request_target (GdkWaylandSelection *wayland_selection,
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
if (fd >= 0)
|
||||
wayland_selection->stored_selection.fd = fd;
|
||||
|
||||
if (wayland_selection->source_requested_target == target)
|
||||
if (wayland_selection->stored_selection.fd == fd &&
|
||||
wayland_selection->source_requested_target == target)
|
||||
return FALSE;
|
||||
|
||||
wayland_selection->stored_selection.fd = fd;
|
||||
|
||||
wayland_selection->source_requested_target = target;
|
||||
|
||||
if (window && target != GDK_NONE)
|
||||
@@ -668,16 +670,19 @@ data_source_cancelled (void *data,
|
||||
g_debug (G_STRLOC ": %s source = %p",
|
||||
G_STRFUNC, source);
|
||||
|
||||
context = gdk_wayland_drag_context_lookup_by_data_source (source);
|
||||
display = gdk_window_get_display (context->source_window);
|
||||
display = gdk_display_get_default ();
|
||||
|
||||
if (source == wayland_selection->dnd_source)
|
||||
gdk_wayland_selection_unset_data_source (display, atoms[ATOM_DND]);
|
||||
{
|
||||
gdk_wayland_selection_unset_data_source (display, atoms[ATOM_DND]);
|
||||
|
||||
context = gdk_wayland_drag_context_lookup_by_data_source (source);
|
||||
|
||||
if (context)
|
||||
gdk_wayland_drag_context_undo_grab (context);
|
||||
}
|
||||
else if (source == wayland_selection->clipboard_source)
|
||||
gdk_wayland_selection_unset_data_source (display, atoms[ATOM_CLIPBOARD]);
|
||||
|
||||
if (context)
|
||||
gdk_wayland_drag_context_undo_grab (context);
|
||||
}
|
||||
|
||||
static const struct wl_data_source_listener data_source_listener = {
|
||||
@@ -893,9 +898,10 @@ _gdk_wayland_display_convert_selection (GdkDisplay *display,
|
||||
return;
|
||||
}
|
||||
|
||||
wl_data_offer_accept (wayland_selection->offer,
|
||||
_gdk_wayland_display_get_serial (GDK_WAYLAND_DISPLAY (display)),
|
||||
gdk_atom_name (target));
|
||||
if (target != gdk_atom_intern_static_string ("TARGETS"))
|
||||
wl_data_offer_accept (wayland_selection->offer,
|
||||
_gdk_wayland_display_get_serial (GDK_WAYLAND_DISPLAY (display)),
|
||||
gdk_atom_name (target));
|
||||
|
||||
buffer_data = g_hash_table_lookup (wayland_selection->selection_buffers,
|
||||
target);
|
||||
|
||||
@@ -216,6 +216,7 @@ static struct {
|
||||
#endif
|
||||
{ "help", IDC_HELP },
|
||||
{ "ibeam", IDC_IBEAM },
|
||||
{ "left_ptr_watch", IDC_APPSTARTING },
|
||||
{ "sizeall", IDC_SIZEALL },
|
||||
{ "sizenesw", IDC_SIZENESW },
|
||||
{ "sizens", IDC_SIZENS },
|
||||
|
||||
@@ -135,6 +135,8 @@ static UINT sync_timer = 0;
|
||||
|
||||
static int debug_indent = 0;
|
||||
|
||||
static int both_shift_pressed[2]; /* to store keycodes for shift keys */
|
||||
|
||||
static void
|
||||
assign_object (gpointer lhsp,
|
||||
gpointer rhs)
|
||||
@@ -1837,6 +1839,7 @@ gdk_event_translate (MSG *msg,
|
||||
RECT rect, *drag, orig_drag;
|
||||
POINT point;
|
||||
MINMAXINFO *mmi;
|
||||
LONG style;
|
||||
HWND hwnd;
|
||||
HCURSOR hcursor;
|
||||
BYTE key_state[256];
|
||||
@@ -2108,6 +2111,38 @@ gdk_event_translate (MSG *msg,
|
||||
|
||||
fill_key_event_string (event);
|
||||
|
||||
/* Only one release key event is fired when both shift keys are pressed together
|
||||
and then released. In order to send the missing event, press events for shift
|
||||
keys are recorded and sent together when the release event occurs.
|
||||
Other modifiers (e.g. ctrl, alt) don't have this problem. */
|
||||
if (msg->message == WM_KEYDOWN && msg->wParam == VK_SHIFT)
|
||||
{
|
||||
int pressed_shift = msg->lParam & 0xffffff; /* mask shift modifier */
|
||||
if (both_shift_pressed[0] == 0)
|
||||
both_shift_pressed[0] = pressed_shift;
|
||||
else if (both_shift_pressed[0] != pressed_shift)
|
||||
both_shift_pressed[1] = pressed_shift;
|
||||
}
|
||||
|
||||
if (msg->message == WM_KEYUP && msg->wParam == VK_SHIFT)
|
||||
{
|
||||
if (both_shift_pressed[0] != 0 && both_shift_pressed[1] != 0)
|
||||
{
|
||||
gint tmp_retval;
|
||||
MSG fake_release = *msg;
|
||||
int pressed_shift = msg->lParam & 0xffffff;
|
||||
|
||||
if (both_shift_pressed[0] == pressed_shift)
|
||||
fake_release.lParam = both_shift_pressed[1];
|
||||
else
|
||||
fake_release.lParam = both_shift_pressed[0];
|
||||
|
||||
both_shift_pressed[0] = both_shift_pressed[1] = 0;
|
||||
gdk_event_translate (&fake_release, &tmp_retval);
|
||||
}
|
||||
both_shift_pressed[0] = both_shift_pressed[1] = 0;
|
||||
}
|
||||
|
||||
/* Reset MOD1_MASK if it is the Alt key itself */
|
||||
if (msg->wParam == VK_MENU)
|
||||
event->key.state &= ~GDK_MOD1_MASK;
|
||||
@@ -2449,6 +2484,7 @@ gdk_event_translate (MSG *msg,
|
||||
break;
|
||||
|
||||
case WM_MOUSEWHEEL:
|
||||
case WM_MOUSEHWHEEL:
|
||||
GDK_NOTE (EVENTS, g_print (" %d", (short) HIWORD (msg->wParam)));
|
||||
|
||||
/* WM_MOUSEWHEEL is delivered to the focus window. Work around
|
||||
@@ -2499,8 +2535,13 @@ gdk_event_translate (MSG *msg,
|
||||
|
||||
event = gdk_event_new (GDK_SCROLL);
|
||||
event->scroll.window = window;
|
||||
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
|
||||
GDK_SCROLL_UP : GDK_SCROLL_DOWN;
|
||||
|
||||
if (msg->message == WM_MOUSEWHEEL)
|
||||
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
|
||||
GDK_SCROLL_UP : GDK_SCROLL_DOWN;
|
||||
else if (msg->message == WM_MOUSEHWHEEL)
|
||||
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
|
||||
GDK_SCROLL_RIGHT : GDK_SCROLL_LEFT;
|
||||
event->scroll.time = _gdk_win32_get_next_tick (msg->time);
|
||||
event->scroll.x = (gint16) point.x;
|
||||
event->scroll.y = (gint16) point.y;
|
||||
@@ -3044,6 +3085,8 @@ gdk_event_translate (MSG *msg,
|
||||
mmi->ptMaxPosition.x, mmi->ptMaxPosition.y,
|
||||
mmi->ptMaxSize.x, mmi->ptMaxSize.y));
|
||||
|
||||
style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE);
|
||||
|
||||
if (impl->hint_flags & GDK_HINT_MIN_SIZE)
|
||||
{
|
||||
rect.left = rect.top = 0;
|
||||
@@ -3072,7 +3115,10 @@ gdk_event_translate (MSG *msg,
|
||||
mmi->ptMaxTrackSize.x = maxw > 0 && maxw < G_MAXSHORT ? maxw : G_MAXSHORT;
|
||||
mmi->ptMaxTrackSize.y = maxh > 0 && maxh < G_MAXSHORT ? maxh : G_MAXSHORT;
|
||||
}
|
||||
else
|
||||
/* Assume that these styles are incompatible with CSD,
|
||||
* so there's no reason for us to override the defaults.
|
||||
*/
|
||||
else if ((style & (WS_BORDER | WS_THICKFRAME)) == 0)
|
||||
{
|
||||
HMONITOR winmon;
|
||||
MONITORINFO moninfo;
|
||||
@@ -3085,6 +3131,8 @@ gdk_event_translate (MSG *msg,
|
||||
{
|
||||
mmi->ptMaxTrackSize.x = moninfo.rcWork.right - moninfo.rcWork.left;
|
||||
mmi->ptMaxTrackSize.y = moninfo.rcWork.bottom - moninfo.rcWork.top;
|
||||
mmi->ptMaxPosition.x = moninfo.rcWork.left;
|
||||
mmi->ptMaxPosition.y = moninfo.rcWork.top;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -164,6 +164,8 @@ handle_special (guint vk,
|
||||
*ksymp = GDK_KEY_Meta_R; break;
|
||||
case VK_APPS:
|
||||
*ksymp = GDK_KEY_Menu; break;
|
||||
case VK_DECIMAL:
|
||||
*ksymp = GDK_KEY_KP_Decimal; break;
|
||||
case VK_MULTIPLY:
|
||||
*ksymp = GDK_KEY_KP_Multiply; break;
|
||||
case VK_ADD:
|
||||
|
||||
@@ -758,6 +758,7 @@ _gdk_win32_message_to_string (UINT msg)
|
||||
CASE (WM_MBUTTONUP);
|
||||
CASE (WM_MBUTTONDBLCLK);
|
||||
CASE (WM_MOUSEWHEEL);
|
||||
CASE (WM_MOUSEHWHEEL);
|
||||
CASE (WM_XBUTTONDOWN);
|
||||
CASE (WM_XBUTTONUP);
|
||||
CASE (WM_XBUTTONDBLCLK);
|
||||
|
||||
@@ -90,6 +90,9 @@
|
||||
#ifndef WM_APPCOMMAND
|
||||
#define WM_APPCOMMAND 0x319
|
||||
#endif
|
||||
#ifndef WM_MOUSEHWHEEL
|
||||
#define WM_MOUSEHWHEEL 0x20E
|
||||
#endif
|
||||
|
||||
#ifndef CF_DIBV5
|
||||
#define CF_DIBV5 17
|
||||
|
||||
+46
-39
@@ -499,10 +499,13 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
|
||||
XIButtonState button_state = { 0 };
|
||||
XIModifierState mod_state;
|
||||
XIGroupState group_state;
|
||||
Bool retval;
|
||||
|
||||
display = gdk_device_get_display (device);
|
||||
screen = gdk_display_get_default_screen (display);
|
||||
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
|
||||
/* This function really only works if the mouse pointer is held still
|
||||
* during its operation. If it moves from one leaf window to another
|
||||
* than we'll end up with inaccurate values for win_x, win_y
|
||||
@@ -549,18 +552,18 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
|
||||
/* Free previous button mask, if any */
|
||||
g_free (button_state.mask);
|
||||
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
XIQueryPointer (xdisplay,
|
||||
device_xi2->device_id,
|
||||
xwindow,
|
||||
&root, &child,
|
||||
&xroot_x, &xroot_y,
|
||||
&xwin_x, &xwin_y,
|
||||
&button_state,
|
||||
&mod_state,
|
||||
&group_state);
|
||||
if (gdk_x11_display_error_trap_pop (display))
|
||||
retval = XIQueryPointer (xdisplay,
|
||||
device_xi2->device_id,
|
||||
xwindow,
|
||||
&root, &child,
|
||||
&xroot_x, &xroot_y,
|
||||
&xwin_x, &xwin_y,
|
||||
&button_state,
|
||||
&mod_state,
|
||||
&group_state);
|
||||
if (!retval)
|
||||
continue;
|
||||
|
||||
if (child != None)
|
||||
{
|
||||
pointer_window = child;
|
||||
@@ -609,17 +612,16 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
|
||||
last = xwindow;
|
||||
free (button_state.mask);
|
||||
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
XIQueryPointer (xdisplay,
|
||||
device_xi2->device_id,
|
||||
xwindow,
|
||||
&root, &xwindow,
|
||||
&xroot_x, &xroot_y,
|
||||
&xwin_x, &xwin_y,
|
||||
&button_state,
|
||||
&mod_state,
|
||||
&group_state);
|
||||
if (gdk_x11_display_error_trap_pop (display))
|
||||
retval = XIQueryPointer (xdisplay,
|
||||
device_xi2->device_id,
|
||||
xwindow,
|
||||
&root, &xwindow,
|
||||
&xroot_x, &xroot_y,
|
||||
&xwin_x, &xwin_y,
|
||||
&button_state,
|
||||
&mod_state,
|
||||
&group_state);
|
||||
if (!retval)
|
||||
break;
|
||||
|
||||
if (get_toplevel && last != root &&
|
||||
@@ -633,10 +635,25 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
|
||||
|
||||
gdk_x11_display_ungrab (display);
|
||||
|
||||
window = gdk_x11_window_lookup_for_display (display, last);
|
||||
impl = NULL;
|
||||
if (window)
|
||||
impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
||||
if (gdk_x11_display_error_trap_pop (display) == 0)
|
||||
{
|
||||
window = gdk_x11_window_lookup_for_display (display, last);
|
||||
impl = NULL;
|
||||
if (window)
|
||||
impl = GDK_WINDOW_IMPL_X11 (window->impl);
|
||||
|
||||
if (mask)
|
||||
*mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state, &group_state);
|
||||
|
||||
free (button_state.mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
window = NULL;
|
||||
|
||||
if (mask)
|
||||
*mask = 0;
|
||||
}
|
||||
|
||||
if (win_x)
|
||||
*win_x = (window) ? (xwin_x / impl->window_scale) : -1;
|
||||
@@ -644,10 +661,6 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
|
||||
if (win_y)
|
||||
*win_y = (window) ? (xwin_y / impl->window_scale) : -1;
|
||||
|
||||
if (mask)
|
||||
*mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state, &group_state);
|
||||
|
||||
free (button_state.mask);
|
||||
|
||||
return window;
|
||||
}
|
||||
@@ -762,10 +775,10 @@ _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state,
|
||||
{
|
||||
gint len, i;
|
||||
|
||||
/* We're only interested in the first 5 buttons */
|
||||
len = MIN (5, buttons_state->mask_len * 8);
|
||||
/* We're only interested in the first 3 buttons */
|
||||
len = MIN (3, buttons_state->mask_len * 8);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
for (i = 1; i <= len; i++)
|
||||
{
|
||||
if (!XIMaskIsSet (buttons_state->mask, i))
|
||||
continue;
|
||||
@@ -781,12 +794,6 @@ _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state,
|
||||
case 3:
|
||||
state |= GDK_BUTTON3_MASK;
|
||||
break;
|
||||
case 4:
|
||||
state |= GDK_BUTTON4_MASK;
|
||||
break;
|
||||
case 5:
|
||||
state |= GDK_BUTTON5_MASK;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1108,6 +1108,47 @@ find_frame_timings (GdkFrameClock *clock,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* _NET_WM_FRAME_DRAWN and _NET_WM_FRAME_TIMINGS messages represent time
|
||||
* as a "high resolution server time" - this is the server time interpolated
|
||||
* to microsecond resolution. The advantage of this time representation
|
||||
* is that if X server is running on the same computer as a client, and
|
||||
* the Xserver uses 'clock_gettime(CLOCK_MONOTONIC, ...)' for the server
|
||||
* time, the client can detect this, and all such clients will share a
|
||||
* a time representation with high accuracy. If there is not a common
|
||||
* time source, then the time synchronization will be less accurate.
|
||||
*/
|
||||
gint64
|
||||
server_time_to_monotonic_time (GdkX11Display *display_x11,
|
||||
gint64 server_time)
|
||||
{
|
||||
if (display_x11->server_time_query_time == 0 ||
|
||||
(!display_x11->server_time_is_monotonic_time &&
|
||||
server_time > display_x11->server_time_query_time + 10*1000*1000)) /* 10 seconds */
|
||||
{
|
||||
gint64 current_server_time = gdk_x11_get_server_time (display_x11->leader_gdk_window);
|
||||
gint64 current_server_time_usec = (gint64)current_server_time * 1000;
|
||||
gint64 current_monotonic_time = g_get_monotonic_time ();
|
||||
display_x11->server_time_query_time = current_monotonic_time;
|
||||
|
||||
/* If the server time is within a second of the monotonic time,
|
||||
* we assume that they are identical. This seems like a big margin,
|
||||
* but we want to be as robust as possible even if the system
|
||||
* is under load and our processing of the server response is
|
||||
* delayed.
|
||||
*/
|
||||
if (current_server_time_usec > current_monotonic_time - 1000*1000 &&
|
||||
current_server_time_usec < current_monotonic_time + 1000*1000)
|
||||
display_x11->server_time_is_monotonic_time = TRUE;
|
||||
|
||||
display_x11->server_time_offset = current_server_time_usec - current_monotonic_time;
|
||||
}
|
||||
|
||||
if (display_x11->server_time_is_monotonic_time)
|
||||
return server_time;
|
||||
else
|
||||
return server_time - display_x11->server_time_offset;
|
||||
}
|
||||
|
||||
GdkFilterReturn
|
||||
_gdk_wm_protocols_filter (GdkXEvent *xev,
|
||||
GdkEvent *event,
|
||||
@@ -1140,7 +1181,7 @@ _gdk_wm_protocols_filter (GdkXEvent *xev,
|
||||
guint32 d3 = xevent->xclient.data.l[3];
|
||||
|
||||
guint64 serial = ((guint64)d1 << 32) | d0;
|
||||
gint64 frame_drawn_time = ((guint64)d3 << 32) | d2;
|
||||
gint64 frame_drawn_time = server_time_to_monotonic_time (GDK_X11_DISPLAY (display), ((guint64)d3 << 32) | d2);
|
||||
gint64 refresh_interval, presentation_time;
|
||||
|
||||
GdkFrameClock *clock = gdk_window_get_frame_clock (win);
|
||||
@@ -1428,7 +1469,7 @@ _gdk_x11_display_open (const gchar *display_name)
|
||||
gdk_event_init (display);
|
||||
|
||||
attr.window_type = GDK_WINDOW_TOPLEVEL;
|
||||
attr.wclass = GDK_INPUT_OUTPUT;
|
||||
attr.wclass = GDK_INPUT_ONLY;
|
||||
attr.x = 10;
|
||||
attr.y = 10;
|
||||
attr.width = 10;
|
||||
|
||||
@@ -130,6 +130,12 @@ struct _GdkX11Display
|
||||
gint glx_error_base;
|
||||
gint glx_event_base;
|
||||
|
||||
/* Translation between X server time and system-local monotonic time */
|
||||
gint64 server_time_query_time;
|
||||
gint64 server_time_offset;
|
||||
|
||||
guint server_time_is_monotonic_time : 1;
|
||||
|
||||
guint have_glx : 1;
|
||||
|
||||
/* GLX extensions we check */
|
||||
|
||||
+31
-10
@@ -309,9 +309,9 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
|
||||
{
|
||||
Display *display = cairo_xlib_surface_get_display (surface);
|
||||
Screen *screen = cairo_xlib_surface_get_screen (surface);
|
||||
Visual *visual = cairo_xlib_surface_get_visual (surface);;
|
||||
Visual *visual = cairo_xlib_surface_get_visual (surface);
|
||||
GdkGLXPixmap *glx_pixmap;
|
||||
GLXFBConfig *fbconfigs;
|
||||
GLXFBConfig *fbconfigs, config;
|
||||
int nfbconfigs;
|
||||
XVisualInfo *visinfo;
|
||||
VisualID visualid;
|
||||
@@ -326,6 +326,9 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
|
||||
None
|
||||
};
|
||||
|
||||
if (visual == NULL)
|
||||
return NULL;
|
||||
|
||||
with_alpha = cairo_surface_get_content (surface) == CAIRO_CONTENT_COLOR_ALPHA;
|
||||
|
||||
y_inverted = FALSE;
|
||||
@@ -393,6 +396,7 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
|
||||
if (value == TRUE)
|
||||
y_inverted = TRUE;
|
||||
|
||||
config = fbconfigs[i];
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -407,7 +411,7 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
|
||||
glx_pixmap = g_slice_new0 (GdkGLXPixmap);
|
||||
glx_pixmap->y_inverted = y_inverted;
|
||||
glx_pixmap->display = display;
|
||||
glx_pixmap->drawable = glXCreatePixmap (display, fbconfigs[i],
|
||||
glx_pixmap->drawable = glXCreatePixmap (display, config,
|
||||
cairo_xlib_surface_get_drawable (surface),
|
||||
pixmap_attributes);
|
||||
|
||||
@@ -432,6 +436,11 @@ gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context,
|
||||
double sx, sy;
|
||||
float uscale, vscale;
|
||||
GdkTexturedQuad *quads;
|
||||
GdkX11Display *display_x11;
|
||||
|
||||
display_x11 = GDK_X11_DISPLAY (gdk_gl_context_get_display (paint_context));
|
||||
if (!display_x11->has_glx_texture_from_pixmap)
|
||||
return FALSE;
|
||||
|
||||
if (cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_XLIB)
|
||||
return FALSE;
|
||||
@@ -461,7 +470,6 @@ gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context,
|
||||
|
||||
glGenTextures (1, &texture_id);
|
||||
glBindTexture (target, texture_id);
|
||||
glEnable (target);
|
||||
|
||||
glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
@@ -526,7 +534,6 @@ gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context,
|
||||
glXReleaseTexImageEXT (glx_pixmap->display, glx_pixmap->drawable,
|
||||
GLX_FRONT_LEFT_EXT);
|
||||
|
||||
glDisable (target);
|
||||
glDeleteTextures (1, &texture_id);
|
||||
|
||||
glx_pixmap_destroy(glx_pixmap);
|
||||
@@ -558,17 +565,25 @@ create_gl3_context (GdkDisplay *display,
|
||||
GLX_CONTEXT_FLAGS_ARB, flags,
|
||||
None,
|
||||
};
|
||||
GLXContext res;
|
||||
|
||||
GdkX11GLContext *share_x11 = NULL;
|
||||
|
||||
if (share != NULL)
|
||||
share_x11 = GDK_X11_GL_CONTEXT (share);
|
||||
|
||||
return glXCreateContextAttribsARB (gdk_x11_display_get_xdisplay (display),
|
||||
config,
|
||||
share_x11 != NULL ? share_x11->glx_context : NULL,
|
||||
True,
|
||||
attrib_list);
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
|
||||
res = glXCreateContextAttribsARB (gdk_x11_display_get_xdisplay (display),
|
||||
config,
|
||||
share_x11 != NULL ? share_x11->glx_context : NULL,
|
||||
True,
|
||||
attrib_list);
|
||||
|
||||
if (gdk_x11_display_error_trap_pop (display))
|
||||
return NULL;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -1206,6 +1221,12 @@ gdk_x11_display_make_gl_context_current (GdkDisplay *display,
|
||||
}
|
||||
|
||||
context_x11 = GDK_X11_GL_CONTEXT (context);
|
||||
if (context_x11->glx_context == NULL)
|
||||
{
|
||||
g_critical ("No GLX context associated to the GdkGLContext; you must "
|
||||
"call gdk_gl_context_realize() first.");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
GDK_NOTE (OPENGL,
|
||||
g_print ("Making GLX context current to drawable %lu\n",
|
||||
|
||||
@@ -2963,15 +2963,15 @@ gdk_window_x11_set_background (GdkWindow *window,
|
||||
{
|
||||
GdkWindow *parent;
|
||||
|
||||
/* X throws BadMatch if the parent has a different visual when
|
||||
/* X throws BadMatch if the parent has a different depth when
|
||||
* using ParentRelative */
|
||||
parent = gdk_window_get_parent (window);
|
||||
if (parent && gdk_window_get_visual (parent) == gdk_window_get_visual (window))
|
||||
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
|
||||
GDK_WINDOW_XID (window), ParentRelative);
|
||||
else
|
||||
if (parent && window->depth != parent->depth)
|
||||
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
|
||||
GDK_WINDOW_XID (window), None);
|
||||
else
|
||||
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
|
||||
GDK_WINDOW_XID (window), ParentRelative);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -500,6 +500,7 @@ gtk_private_h_sources = \
|
||||
gtkstylecontextprivate.h \
|
||||
gtkstylepropertyprivate.h \
|
||||
gtkstyleproviderprivate.h \
|
||||
gtktextattributesprivate.h \
|
||||
gtktextbtree.h \
|
||||
gtktextbufferserialize.h \
|
||||
gtktextchildprivate.h \
|
||||
@@ -1330,7 +1331,7 @@ distclean-local:
|
||||
if HAVE_INTROSPECTION
|
||||
introspection_files = \
|
||||
$(filter-out %private.h gtktextdisplay.h gtktextlayout.h gtkx.h, $(gtkinclude_HEADERS) $(a11yinclude_HEADERS) $(deprecatedinclude_HEADERS)) \
|
||||
$(filter-out %win32.c %quartz.c, $(gtk_base_c_sources)) \
|
||||
$(filter-out %win32.c, $(gtk_base_c_sources)) \
|
||||
gtkprintoperation-unix.c \
|
||||
gtktypebuiltins.h \
|
||||
gtktypebuiltins.c
|
||||
|
||||
@@ -113,7 +113,8 @@ gtk_boolean_cell_accessible_ref_state_set (AtkObject *accessible)
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell,
|
||||
gboolean emit_signal)
|
||||
{
|
||||
GtkBooleanCellAccessible *boolean_cell = GTK_BOOLEAN_CELL_ACCESSIBLE (cell);
|
||||
gboolean active;
|
||||
@@ -131,14 +132,16 @@ gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
{
|
||||
boolean_cell->priv->cell_value = !boolean_cell->priv->cell_value;
|
||||
|
||||
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, active);
|
||||
if (emit_signal)
|
||||
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, active);
|
||||
}
|
||||
|
||||
if (boolean_cell->priv->cell_sensitive != sensitive)
|
||||
{
|
||||
boolean_cell->priv->cell_sensitive = !boolean_cell->priv->cell_sensitive;
|
||||
|
||||
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, sensitive);
|
||||
if (emit_signal)
|
||||
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_SENSITIVE, sensitive);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -419,19 +419,23 @@ _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
|
||||
/*
|
||||
* gtk_cell_accessible_update_cache:
|
||||
* @cell: the cell that is changed
|
||||
* @emit_signal: whether or not to notify the ATK bridge
|
||||
*
|
||||
* Notifies the cell that the values in the data in the row that
|
||||
* is used to feed the cell renderer with has changed. The
|
||||
* cell_changed function of @cell is called to send update
|
||||
* notifications for the properties it takes from its cell
|
||||
* renderer.
|
||||
* renderer. If @emit_signal is TRUE, also notify the ATK bridge
|
||||
* of the change. The bridge should be notified when an existing
|
||||
* cell changes; not when a newly-created cell is being set up.
|
||||
*
|
||||
* Note that there is no higher granularity available about which
|
||||
* properties changed, so you will need to make do with this
|
||||
* function.
|
||||
**/
|
||||
void
|
||||
_gtk_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
_gtk_cell_accessible_update_cache (GtkCellAccessible *cell,
|
||||
gboolean emit_signal)
|
||||
{
|
||||
GtkCellAccessibleClass *klass;
|
||||
|
||||
@@ -440,5 +444,5 @@ _gtk_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
klass = GTK_CELL_ACCESSIBLE_GET_CLASS (cell);
|
||||
|
||||
if (klass->update_cache)
|
||||
klass->update_cache (cell);
|
||||
klass->update_cache (cell, emit_signal);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,8 @@ struct _GtkCellAccessible
|
||||
struct _GtkCellAccessibleClass
|
||||
{
|
||||
GtkAccessibleClass parent_class;
|
||||
void (*update_cache) (GtkCellAccessible *cell);
|
||||
void (*update_cache) (GtkCellAccessible *cell,
|
||||
gboolean emit_signal);
|
||||
};
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
|
||||
@@ -25,7 +25,8 @@ G_BEGIN_DECLS
|
||||
void _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
|
||||
GtkCellRendererState added,
|
||||
GtkCellRendererState removed);
|
||||
void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell);
|
||||
void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell,
|
||||
gboolean emit_signal);
|
||||
void _gtk_cell_accessible_initialize (GtkCellAccessible *cell,
|
||||
GtkWidget *widget,
|
||||
AtkObject *parent);
|
||||
|
||||
@@ -64,13 +64,14 @@ gtk_container_cell_accessible_ref_child (AtkObject *obj,
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_container_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
gtk_container_cell_accessible_update_cache (GtkCellAccessible *cell,
|
||||
gboolean emit_signal)
|
||||
{
|
||||
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (cell);
|
||||
GList *l;
|
||||
|
||||
for (l = container->priv->children; l; l = l->next)
|
||||
_gtk_cell_accessible_update_cache (l->data);
|
||||
_gtk_cell_accessible_update_cache (l->data, emit_signal);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -87,7 +87,8 @@ static void add_attr (PangoAttrList *attr_li
|
||||
|
||||
/* Misc */
|
||||
|
||||
static void gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell);
|
||||
static void gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell,
|
||||
gboolean emit_signal);
|
||||
|
||||
static void atk_text_interface_init (AtkTextIface *iface);
|
||||
|
||||
@@ -132,12 +133,12 @@ gtk_text_cell_accessible_get_name (AtkObject *atk_obj)
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell,
|
||||
gboolean emit_signal)
|
||||
{
|
||||
GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (cell);
|
||||
AtkObject *obj = ATK_OBJECT (cell);
|
||||
gboolean rv = FALSE;
|
||||
gint temp_length;
|
||||
gint text_length;
|
||||
gchar *text;
|
||||
GtkCellRenderer *renderer;
|
||||
|
||||
@@ -149,48 +150,33 @@ gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
|
||||
g_object_get (renderer, "text", &text, NULL);
|
||||
g_object_unref (renderer);
|
||||
|
||||
if (text_cell->priv->cell_text)
|
||||
{
|
||||
if (text == NULL || g_strcmp0 (text_cell->priv->cell_text, text) != 0)
|
||||
{
|
||||
g_free (text_cell->priv->cell_text);
|
||||
temp_length = text_cell->priv->cell_length;
|
||||
text_cell->priv->cell_text = NULL;
|
||||
text_cell->priv->cell_length = 0;
|
||||
g_signal_emit_by_name (cell, "text-changed::delete", 0, temp_length);
|
||||
if (obj->name == NULL)
|
||||
g_object_notify (G_OBJECT (obj), "accessible-name");
|
||||
if (text)
|
||||
rv = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
rv = TRUE;
|
||||
if (text == NULL)
|
||||
text = g_strdup ("");
|
||||
text_length = g_utf8_strlen (text, -1);
|
||||
|
||||
if (rv)
|
||||
if (g_strcmp0 (text_cell->priv->cell_text, text) != 0)
|
||||
{
|
||||
if (text == NULL)
|
||||
if (text_cell->priv->cell_length && emit_signal)
|
||||
{
|
||||
text_cell->priv->cell_text = g_strdup ("");
|
||||
text_cell->priv->cell_length = 0;
|
||||
g_signal_emit_by_name (cell, "text-changed::delete",
|
||||
0, text_cell->priv->cell_length);
|
||||
}
|
||||
else
|
||||
|
||||
g_free (text_cell->priv->cell_text);
|
||||
text_cell->priv->cell_text = g_strdup (text);
|
||||
text_cell->priv->cell_length = text_length;
|
||||
|
||||
if (text_length && emit_signal)
|
||||
{
|
||||
text_cell->priv->cell_text = g_strdup (text);
|
||||
text_cell->priv->cell_length = g_utf8_strlen (text, -1);
|
||||
g_signal_emit_by_name (cell, "text-changed::insert",
|
||||
0, text_cell->priv->cell_length);
|
||||
}
|
||||
|
||||
if (obj->name == NULL && emit_signal)
|
||||
g_object_notify (G_OBJECT (obj), "accessible-name");
|
||||
}
|
||||
|
||||
g_free (text);
|
||||
|
||||
if (rv)
|
||||
{
|
||||
g_signal_emit_by_name (cell, "text-changed::insert",
|
||||
0, text_cell->priv->cell_length);
|
||||
|
||||
if (obj->name == NULL)
|
||||
g_object_notify (G_OBJECT (obj), "accessible-name");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -509,6 +509,11 @@ gtk_text_view_accessible_get_character_extents (AtkText *text,
|
||||
GdkWindow *window;
|
||||
gint x_widget, y_widget, x_window, y_window;
|
||||
|
||||
*x = 0;
|
||||
*y = 0;
|
||||
*width = 0;
|
||||
*height = 0;
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
|
||||
if (widget == NULL)
|
||||
return;
|
||||
@@ -519,6 +524,9 @@ gtk_text_view_accessible_get_character_extents (AtkText *text,
|
||||
gtk_text_view_get_iter_location (view, &iter, &rectangle);
|
||||
|
||||
window = gtk_text_view_get_window (view, GTK_TEXT_WINDOW_WIDGET);
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
gdk_window_get_origin (window, &x_widget, &y_widget);
|
||||
|
||||
*height = rectangle.height;
|
||||
|
||||
@@ -425,7 +425,7 @@ create_cell (GtkTreeView *treeview,
|
||||
cell_info_new (accessible, tree, node, column, cell);
|
||||
|
||||
set_cell_data (treeview, accessible, cell);
|
||||
_gtk_cell_accessible_update_cache (cell);
|
||||
_gtk_cell_accessible_update_cache (cell, FALSE);
|
||||
|
||||
return cell;
|
||||
}
|
||||
@@ -1705,7 +1705,7 @@ _gtk_tree_view_accessible_changed (GtkTreeView *treeview,
|
||||
continue;
|
||||
|
||||
set_cell_data (treeview, accessible, cell);
|
||||
_gtk_cell_accessible_update_cache (cell);
|
||||
_gtk_cell_accessible_update_cache (cell, TRUE);
|
||||
}
|
||||
|
||||
g_signal_emit_by_name (accessible, "visible-data-changed");
|
||||
|
||||
@@ -136,6 +136,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
widget_class->get_preferred_height_for_width = gtk_alignment_get_preferred_height_for_width;
|
||||
widget_class->get_preferred_height_and_baseline_for_width = gtk_alignment_get_preferred_height_and_baseline_for_width;
|
||||
|
||||
/**
|
||||
* GtkAlignment:xalign:
|
||||
*
|
||||
* Horizontal position of child in available space. A value of 0.0
|
||||
* will flush the child left (or right, in RTL locales); a value
|
||||
* of 1.0 will flush the child right (or left, in RTL locales).
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_halign() on the child instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_XALIGN,
|
||||
g_param_spec_float("xalign",
|
||||
@@ -146,6 +155,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
0.5,
|
||||
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
|
||||
|
||||
/**
|
||||
* GtkAlignment:yalign:
|
||||
*
|
||||
* Vertical position of child in available space. A value of 0.0
|
||||
* will flush the child to the top; a value of 1.0 will flush the
|
||||
* child to the bottom.
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_valign() on the child instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_YALIGN,
|
||||
g_param_spec_float("yalign",
|
||||
@@ -155,6 +173,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
1.0,
|
||||
0.5,
|
||||
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
|
||||
/**
|
||||
* GtkAlignment:xscale:
|
||||
*
|
||||
* If available horizontal space is bigger than needed, how much
|
||||
* of it to use for the child. A value of 0.0 means none; a value
|
||||
* of 1.0 means all.
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_hexpand() on the child instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_XSCALE,
|
||||
g_param_spec_float("xscale",
|
||||
@@ -164,6 +191,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
1.0,
|
||||
1.0,
|
||||
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
|
||||
/**
|
||||
* GtkAlignment:yscale:
|
||||
*
|
||||
* If available vertical space is bigger than needed, how much
|
||||
* of it to use for the child. A value of 0.0 means none; a value
|
||||
* of 1.0 means all.
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_vexpand() on the child instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_YSCALE,
|
||||
g_param_spec_float("yscale",
|
||||
@@ -181,6 +217,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
* The padding to insert at the top of the widget.
|
||||
*
|
||||
* Since: 2.4
|
||||
*
|
||||
* Deprecared: 3.14: Use gtk_widget_set_margin_top() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_TOP_PADDING,
|
||||
@@ -198,6 +236,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
* The padding to insert at the bottom of the widget.
|
||||
*
|
||||
* Since: 2.4
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_margin_bottom() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_BOTTOM_PADDING,
|
||||
@@ -215,6 +255,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
* The padding to insert at the left of the widget.
|
||||
*
|
||||
* Since: 2.4
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_margin_start() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_LEFT_PADDING,
|
||||
@@ -232,6 +274,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
|
||||
* The padding to insert at the right of the widget.
|
||||
*
|
||||
* Since: 2.4
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_margin_end() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_RIGHT_PADDING,
|
||||
|
||||
@@ -47,8 +47,7 @@
|
||||
* doing automatic flipping between #GTK_ARROW_LEFT and #GTK_ARROW_RIGHT,
|
||||
* depending on the text direction. To get the same effect with an image,
|
||||
* use the icon names “pan-start-symbolic“ and “pan-end-symbolic“, which
|
||||
* react to the text direction instead of “pan-left-symbolic“ and
|
||||
* “pan-right-symbolic“ which don't.
|
||||
* react to the text direction.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
@@ -1111,7 +1111,7 @@ gtk_font_selection_size_activate (GtkWidget *w,
|
||||
const gchar *text;
|
||||
|
||||
text = gtk_entry_get_text (GTK_ENTRY (priv->size_entry));
|
||||
new_size = MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
|
||||
new_size = (int) MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
|
||||
|
||||
if (priv->size != new_size)
|
||||
gtk_font_selection_set_size (fontsel, new_size);
|
||||
@@ -1130,7 +1130,7 @@ gtk_font_selection_size_focus_out (GtkWidget *w,
|
||||
const gchar *text;
|
||||
|
||||
text = gtk_entry_get_text (GTK_ENTRY (priv->size_entry));
|
||||
new_size = MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
|
||||
new_size = (int) MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
|
||||
|
||||
gtk_font_selection_set_size (fontsel, new_size);
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ struct _GtkHandleBoxPrivate
|
||||
{
|
||||
/* Properties */
|
||||
GtkPositionType handle_position;
|
||||
GtkPositionType snap_edge;
|
||||
gint snap_edge;
|
||||
GtkShadowType shadow_type;
|
||||
gboolean child_detached;
|
||||
/* Properties */
|
||||
@@ -1051,7 +1051,7 @@ gtk_handle_box_get_snap_edge (GtkHandleBox *handle_box)
|
||||
{
|
||||
g_return_val_if_fail (GTK_IS_HANDLE_BOX (handle_box), (GtkPositionType)-1);
|
||||
|
||||
return handle_box->priv->snap_edge;
|
||||
return (GtkPositionType)handle_box->priv->snap_edge;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2945,17 +2945,17 @@ gtk_icon_factory_buildable_custom_tag_end (GtkBuildable *buildable,
|
||||
}
|
||||
if (source_data->icon_name)
|
||||
gtk_icon_source_set_icon_name (icon_source, source_data->icon_name);
|
||||
if (source_data->size != -1)
|
||||
if ((gint)source_data->size != -1)
|
||||
{
|
||||
gtk_icon_source_set_size (icon_source, source_data->size);
|
||||
gtk_icon_source_set_size_wildcarded (icon_source, FALSE);
|
||||
}
|
||||
if (source_data->direction != -1)
|
||||
if ((gint)source_data->direction != -1)
|
||||
{
|
||||
gtk_icon_source_set_direction (icon_source, source_data->direction);
|
||||
gtk_icon_source_set_direction_wildcarded (icon_source, FALSE);
|
||||
}
|
||||
if (source_data->state != -1)
|
||||
if ((gint)source_data->state != -1)
|
||||
{
|
||||
gtk_icon_source_set_state (icon_source, source_data->state);
|
||||
gtk_icon_source_set_state_wildcarded (icon_source, FALSE);
|
||||
|
||||
@@ -79,6 +79,35 @@
|
||||
* consider using icons in menu items only sparingly, and for "objects" (or
|
||||
* "nouns") elements only, like bookmarks, files, and links; "actions" (or
|
||||
* "verbs") should not have icons.
|
||||
*
|
||||
* Furthermore, if you would like to display keyboard accelerator, you must
|
||||
* pack the accel label into the box using gtk_box_pack_end() and align the
|
||||
* label, otherwise the accelerator will not display correctly. The following
|
||||
* code snippet adds a keyboard accelerator to the menu item, with a key
|
||||
* binding of Ctrl+M:
|
||||
*
|
||||
* |[<!-- language="C" -->
|
||||
* GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
* GtkWidget *icon = gtk_image_new_from_icon_name ("folder-music-symbolic", GTK_ICON_SIZE_MENU);
|
||||
* GtkWidget *label = gtk_accel_label_new ("Music");
|
||||
* GtkWidget *menu_item = gtk_menu_item_new ();
|
||||
* GtkAccelGroup *accel_group = gtk_accel_group_new ();
|
||||
*
|
||||
* gtk_container_add (GTK_CONTAINER (box), icon);
|
||||
*
|
||||
* gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
|
||||
* gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
||||
*
|
||||
* gtk_widget_add_accelerator (menu_item, "activate", accel_group,
|
||||
* GDK_KEY_m, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
||||
* gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), menu_item);
|
||||
*
|
||||
* gtk_box_pack_end (GTK_BOX (box), label, TRUE, TRUE, 0);
|
||||
*
|
||||
* gtk_container_add (GTK_CONTAINER (menu_item), box);
|
||||
*
|
||||
* gtk_widget_show_all (menu_item);
|
||||
* ]|
|
||||
*/
|
||||
|
||||
|
||||
@@ -188,7 +217,8 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
|
||||
*
|
||||
* Child widget to appear next to the menu text.
|
||||
*
|
||||
* Deprecated: 3.10
|
||||
* Deprecated: 3.10: Use a #GtkMenuItem containing a #GtkBox with
|
||||
* a #GtkAccelLabel and a #GtkImage instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_IMAGE,
|
||||
@@ -205,7 +235,7 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
|
||||
*
|
||||
* Since: 2.16
|
||||
*
|
||||
* Deprecated: 3.10
|
||||
* Deprecated: 3.10: Use a named icon from the #GtkIconTheme instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_USE_STOCK,
|
||||
@@ -225,7 +255,8 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
|
||||
*
|
||||
* Since: 2.16
|
||||
*
|
||||
* Deprecated: 3.10
|
||||
* Deprecated: 3.10: Use a #GtkMenuItem containing a #GtkBox with
|
||||
* a #GtkAccelLabel and a #GtkImage instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ALWAYS_SHOW_IMAGE,
|
||||
@@ -242,7 +273,7 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
|
||||
*
|
||||
* Since: 2.16
|
||||
*
|
||||
* Deprecated: 3.10
|
||||
* Deprecated: 3.10: Use gtk_widget_add_accelerator() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ACCEL_GROUP,
|
||||
@@ -903,7 +934,7 @@ gtk_image_menu_item_new_with_mnemonic (const gchar *label)
|
||||
*
|
||||
* Returns: a new #GtkImageMenuItem.
|
||||
*
|
||||
* Deprecated: 3.10: Use gtk_menu_item_new() instead.
|
||||
* Deprecated: 3.10: Use gtk_menu_item_new_with_mnemonic() instead.
|
||||
*/
|
||||
GtkWidget*
|
||||
gtk_image_menu_item_new_from_stock (const gchar *stock_id,
|
||||
|
||||
@@ -98,6 +98,16 @@ gtk_misc_class_init (GtkMiscClass *class)
|
||||
|
||||
widget_class->realize = gtk_misc_realize;
|
||||
|
||||
/**
|
||||
* GtkMisc:xalign:
|
||||
*
|
||||
* The horizontal alignment. A value of 0.0 means left alignment (or right
|
||||
* on RTL locales); a value of 1.0 means right alignment (or left on RTL
|
||||
* locales).
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_halign() instead. If you are using
|
||||
* #GtkLabel, use #GtkLabel:xalign instead.
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_XALIGN,
|
||||
g_param_spec_float ("xalign",
|
||||
@@ -108,6 +118,15 @@ gtk_misc_class_init (GtkMiscClass *class)
|
||||
0.5,
|
||||
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
|
||||
|
||||
/**
|
||||
* GtkMisc:yalign:
|
||||
*
|
||||
* The vertical alignment. A value of 0.0 means top alignment;
|
||||
* a value of 1.0 means bottom alignment.
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_valign() instead. If you are using
|
||||
* #GtkLabel, use #GtkLabel:yalign instead.
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_YALIGN,
|
||||
g_param_spec_float ("yalign",
|
||||
@@ -118,6 +137,15 @@ gtk_misc_class_init (GtkMiscClass *class)
|
||||
0.5,
|
||||
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
|
||||
|
||||
/**
|
||||
* GtkMisc:xpad:
|
||||
*
|
||||
* The amount of space to add on the left and right of the widget, in
|
||||
* pixels.
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_margin_start() and
|
||||
* gtk_widget_set_margin_end() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_XPAD,
|
||||
g_param_spec_int ("xpad",
|
||||
@@ -128,6 +156,15 @@ gtk_misc_class_init (GtkMiscClass *class)
|
||||
0,
|
||||
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
|
||||
|
||||
/**
|
||||
* GtkMisc:ypad:
|
||||
*
|
||||
* The amount of space to add on the top and bottom of the widget, in
|
||||
* pixels.
|
||||
*
|
||||
* Deprecated: 3.14: Use gtk_widget_set_margin_top() and
|
||||
* gtk_widget_set_margin_bottom() instead
|
||||
*/
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_YPAD,
|
||||
g_param_spec_int ("ypad",
|
||||
|
||||
@@ -95,7 +95,7 @@ real_add (const GtkStockItem *items,
|
||||
gpointer old_key, old_value;
|
||||
const GtkStockItem *item = &items[i];
|
||||
|
||||
if (replace_primary && item->modifier == PRIMARY_MODIFIER)
|
||||
if (replace_primary && (guint)item->modifier == PRIMARY_MODIFIER)
|
||||
{
|
||||
item = gtk_stock_item_copy (item);
|
||||
((GtkStockItem *)item)->modifier = (NON_STATIC_MASK |
|
||||
|
||||
@@ -2288,6 +2288,7 @@ add_credits_section (GtkAboutDialog *about,
|
||||
|
||||
label = gtk_label_new (str->str);
|
||||
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
|
||||
gtk_label_set_selectable (GTK_LABEL (label), TRUE);
|
||||
g_signal_connect_swapped (label, "activate-link",
|
||||
G_CALLBACK (emit_activate_link), about);
|
||||
g_string_free (str, TRUE);
|
||||
|
||||
+6
-6
@@ -39,7 +39,7 @@
|
||||
*
|
||||
* The action will be looked up in action groups that are found among
|
||||
* the widgets ancestors. Most commonly, these will be the actions with
|
||||
* the "win" or "app" prefix that are associated with the #GtkApplicationWindow
|
||||
* the “win.” or “app.” prefix that are associated with the #GtkApplicationWindow
|
||||
* or "GtkApplication, but other action groups that are added with
|
||||
* gtk_widget_insert_action_group() will be consulted as well.
|
||||
*
|
||||
@@ -54,10 +54,10 @@
|
||||
|
||||
/**
|
||||
* GtkActionableInterface:
|
||||
* @get_action_name: virtual pointer for gtk_actionable_get_action_name()
|
||||
* @set_action_name: virtual pointer for gtk_actionable_set_action_name()
|
||||
* @get_action_target_value: virtual pointer for gtk_actionable_get_action_target_value()
|
||||
* @set_action_target_value: virtual pointer for gtk_actionable_set_action_target_value()
|
||||
* @get_action_name: virtual function for gtk_actionable_get_action_name()
|
||||
* @set_action_name: virtual function for gtk_actionable_set_action_name()
|
||||
* @get_action_target_value: virtual function for gtk_actionable_get_action_target_value()
|
||||
* @set_action_target_value: virtual function for gtk_actionable_set_action_target_value()
|
||||
*
|
||||
* The interface vtable for #GtkActionable.
|
||||
**/
|
||||
@@ -161,7 +161,7 @@ gtk_actionable_get_action_target_value (GtkActionable *actionable)
|
||||
* The target value has two purposes. First, it is used as the
|
||||
* parameter to activation of the action associated with the
|
||||
* #GtkActionable widget. Second, it is used to determine if the widget
|
||||
* should be rendered as “active” - the widget is active if the state
|
||||
* should be rendered as “active” — the widget is active if the state
|
||||
* is equal to the given target.
|
||||
*
|
||||
* Consider the example of associating a set of buttons with a #GAction
|
||||
|
||||
@@ -415,7 +415,7 @@ gtk_action_helper_set_action_name (GtkActionHelper *helper,
|
||||
return;
|
||||
|
||||
GTK_NOTE(ACTIONS,
|
||||
if (!strchr (action_name, '.'))
|
||||
if (action_name == NULL || !strchr (action_name, '.'))
|
||||
g_message ("actionhelper: action name %s doesn't look like 'app.' or 'win.' "
|
||||
"which means that it will probably not work properly.", action_name));
|
||||
|
||||
|
||||
+19
-15
@@ -69,7 +69,7 @@
|
||||
* that the GDK lock be held while invoking actions locally with
|
||||
* g_action_group_activate_action(). The same applies to actions
|
||||
* associated with #GtkApplicationWindow and to the “activate” and
|
||||
* 'open' #GApplication methods.
|
||||
* “open” #GApplication methods.
|
||||
*
|
||||
* ## Automatic resources ## {#automatic-resources}
|
||||
*
|
||||
@@ -113,8 +113,8 @@
|
||||
* session while inhibitors are present.
|
||||
*
|
||||
* ## See Also ## {#seealso}
|
||||
* HowDoI: [Using GtkApplication] (https://wiki.gnome.org/HowDoI/GtkApplication)
|
||||
* [Getting Started with GTK+: Basics] (https://developer.gnome.org/gtk3/stable/gtk-getting-started.html#id-1.2.3.3)
|
||||
* [HowDoI: Using GtkApplication](https://wiki.gnome.org/HowDoI/GtkApplication),
|
||||
* [Getting Started with GTK+: Basics](https://developer.gnome.org/gtk3/stable/gtk-getting-started.html#id-1.2.3.3)
|
||||
*/
|
||||
|
||||
enum {
|
||||
@@ -506,7 +506,9 @@ gtk_application_focus_in_event_cb (GtkWindow *window,
|
||||
priv->windows = g_list_concat (link, priv->windows);
|
||||
}
|
||||
|
||||
gtk_application_impl_active_window_changed (application->priv->impl, window);
|
||||
if (application->priv->impl)
|
||||
gtk_application_impl_active_window_changed (application->priv->impl, window);
|
||||
|
||||
g_object_notify (G_OBJECT (application), "active-window");
|
||||
|
||||
return FALSE;
|
||||
@@ -1126,7 +1128,7 @@ gtk_application_get_window_by_id (GtkApplication *application,
|
||||
*
|
||||
* The active window is the one that was most recently focused (within
|
||||
* the application). This window may not have the focus at the moment
|
||||
* if another application has it -- this is just the most
|
||||
* if another application has it — this is just the most
|
||||
* recently-focused window within this application.
|
||||
*
|
||||
* Returns: (transfer none): the active window
|
||||
@@ -1369,12 +1371,12 @@ gtk_application_get_app_menu (GtkApplication *application)
|
||||
* each window, or at the top of the screen. In some environments, if
|
||||
* both the application menu and the menubar are set, the application
|
||||
* menu will be presented as if it were the first item of the menubar.
|
||||
* Other environments treat the two as completely separate -- for
|
||||
* example, the application menu may be rendered by the desktop shell
|
||||
* while the menubar (if set) remains in each individual window.
|
||||
* Other environments treat the two as completely separate — for example,
|
||||
* the application menu may be rendered by the desktop shell while the
|
||||
* menubar (if set) remains in each individual window.
|
||||
*
|
||||
* Use the base #GActionMap interface to add actions, to respond to the user
|
||||
* selecting these menu items.
|
||||
* Use the base #GActionMap interface to add actions, to respond to the
|
||||
* user selecting these menu items.
|
||||
*
|
||||
* Since: 3.4
|
||||
*/
|
||||
@@ -1630,11 +1632,11 @@ normalise_detailed_name (const gchar *detailed_action_name)
|
||||
* @application: a #GtkApplication
|
||||
* @detailed_action_name: a detailed action name, specifying an action
|
||||
* and target to associate accelerators with
|
||||
* @accels: (array zero-terminated=1): a list of accelerators in the format understood by
|
||||
* gtk_accelerator_parse()
|
||||
* @accels: (array zero-terminated=1): a list of accelerators in the format
|
||||
* understood by gtk_accelerator_parse()
|
||||
*
|
||||
* Sets zero or more keyboard accelerators that will trigger the
|
||||
* given action. The first item in @accels will be the primary
|
||||
* given action. The first item in @accels will be the primary
|
||||
* accelerator, which may be displayed in the UI.
|
||||
*
|
||||
* To remove all accelerators for an action, use an empty, zero-terminated
|
||||
@@ -1778,14 +1780,16 @@ void
|
||||
gtk_application_handle_window_realize (GtkApplication *application,
|
||||
GtkWindow *window)
|
||||
{
|
||||
gtk_application_impl_handle_window_realize (application->priv->impl, window);
|
||||
if (application->priv->impl)
|
||||
gtk_application_impl_handle_window_realize (application->priv->impl, window);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_application_handle_window_map (GtkApplication *application,
|
||||
GtkWindow *window)
|
||||
{
|
||||
gtk_application_impl_handle_window_map (application->priv->impl, window);
|
||||
if (application->priv->impl)
|
||||
gtk_application_impl_handle_window_map (application->priv->impl, window);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -96,8 +96,7 @@
|
||||
*
|
||||
* menubar = G_MENU_MODEL (gtk_builder_get_object (builder,
|
||||
* "menubar"));
|
||||
* gtk_application_set_menubar (G_APPLICATION (app),
|
||||
* menubar);
|
||||
* gtk_application_set_menubar (G_APPLICATION (app), menubar);
|
||||
* g_object_unref (builder);
|
||||
*
|
||||
* ...
|
||||
@@ -118,7 +117,7 @@
|
||||
* Attribute values can be translated using gettext, like other #GtkBuilder
|
||||
* content. `<attribute>` elements can be marked for translation with a
|
||||
* `translatable="yes"` attribute. It is also possible to specify message
|
||||
* context and translator comments,using the context and comments attributes.
|
||||
* context and translator comments, using the context and comments attributes.
|
||||
* To make use of this, the #GtkBuilder must have been given the gettext
|
||||
* domain to use.
|
||||
*/
|
||||
|
||||
+1
-1
@@ -1132,7 +1132,7 @@ gtk_button_box_size_allocate (GtkWidget *widget,
|
||||
|
||||
/**
|
||||
* gtk_button_box_new:
|
||||
* @orientation: the box' orientation.
|
||||
* @orientation: the box's orientation.
|
||||
*
|
||||
* Creates a new #GtkButtonBox.
|
||||
*
|
||||
|
||||
+2
-1
@@ -203,6 +203,7 @@
|
||||
*
|
||||
* Additionally, since 3.10 a special <template> tag has been added
|
||||
* to the format allowing one to define a widget class’s components.
|
||||
* See the [GtkWidget documentation][composite-templates] for details.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
@@ -2430,7 +2431,7 @@ gtk_builder_add_callback_symbols (GtkBuilder *builder,
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_builder_lookup_callback_symbol:
|
||||
* gtk_builder_lookup_callback_symbol: (skip)
|
||||
* @builder: a #GtkBuilder
|
||||
* @callback_name: The name of the callback
|
||||
*
|
||||
|
||||
@@ -1216,6 +1216,8 @@ end_element (GMarkupParseContext *context,
|
||||
PropertyInfo *prop_info = state_pop_info (data, PropertyInfo);
|
||||
CommonInfo *info = state_peek_info (data, CommonInfo);
|
||||
|
||||
g_assert (info != NULL);
|
||||
|
||||
/* Normal properties */
|
||||
if (strcmp (info->tag.name, "object") == 0 ||
|
||||
strcmp (info->tag.name, "template") == 0)
|
||||
@@ -1252,6 +1254,7 @@ end_element (GMarkupParseContext *context,
|
||||
{
|
||||
SignalInfo *signal_info = state_pop_info (data, SignalInfo);
|
||||
ObjectInfo *object_info = (ObjectInfo*)state_peek_info (data, CommonInfo);
|
||||
g_assert (object_info != NULL);
|
||||
signal_info->object_name = g_strdup (object_info->id);
|
||||
object_info->signals =
|
||||
g_slist_prepend (object_info->signals, signal_info);
|
||||
|
||||
+84
-43
@@ -25,6 +25,32 @@
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* Gets the size for a single box blur.
|
||||
*
|
||||
* Much of this, the 3 * sqrt(2 * pi) / 4, is the known value for
|
||||
* approximating a Gaussian using box blurs. This yields quite a good
|
||||
* approximation for a Gaussian. For more details, see:
|
||||
* http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement
|
||||
* https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19
|
||||
*/
|
||||
#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4))
|
||||
|
||||
#define get_box_filter_size(radius) ((int)(GAUSSIAN_SCALE_FACTOR * (radius)))
|
||||
|
||||
/* Sadly, clang is picky about get_box_filter_size(2) not being a
|
||||
* constant expression, thus we have to use precomputed values.
|
||||
*/
|
||||
#define BOX_FILTER_SIZE_2 3
|
||||
#define BOX_FILTER_SIZE_3 5
|
||||
#define BOX_FILTER_SIZE_4 7
|
||||
#define BOX_FILTER_SIZE_5 9
|
||||
#define BOX_FILTER_SIZE_6 11
|
||||
#define BOX_FILTER_SIZE_7 13
|
||||
#define BOX_FILTER_SIZE_8 15
|
||||
#define BOX_FILTER_SIZE_9 16
|
||||
#define BOX_FILTER_SIZE_10 18
|
||||
|
||||
/* This applies a single box blur pass to a horizontal range of pixels;
|
||||
* since the box blur has the same weight for all pixels, we can
|
||||
* implement an efficient sliding window algorithm where we add
|
||||
@@ -60,18 +86,37 @@ blur_xspan (guchar *row,
|
||||
* only divide down after all three passes. (SSE parallel implementation
|
||||
* of the divide step is possible.)
|
||||
*/
|
||||
for (i = -d + offset; i < row_width + offset; i++)
|
||||
|
||||
#define BLUR_ROW_KERNEL(D) \
|
||||
for (i = -(D) + offset; i < row_width + offset; i++) \
|
||||
{ \
|
||||
if (i >= 0 && i < row_width) \
|
||||
sum += row[i]; \
|
||||
\
|
||||
if (i >= offset) \
|
||||
{ \
|
||||
if (i >= (D)) \
|
||||
sum -= row[i - (D)]; \
|
||||
\
|
||||
tmp_buffer[i - offset] = (sum + (D) / 2) / (D); \
|
||||
} \
|
||||
} \
|
||||
break;
|
||||
|
||||
/* We unroll the values for d for radius 2-10 to avoid a generic
|
||||
* divide operation (not radius 1, because its a no-op) */
|
||||
switch (d)
|
||||
{
|
||||
if (i >= 0 && i < row_width)
|
||||
sum += row[i];
|
||||
|
||||
if (i >= offset)
|
||||
{
|
||||
if (i >= d)
|
||||
sum -= row[i - d];
|
||||
|
||||
tmp_buffer[i - offset] = (sum + d / 2) / d;
|
||||
}
|
||||
case BOX_FILTER_SIZE_2: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_2);
|
||||
case BOX_FILTER_SIZE_3: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_3);
|
||||
case BOX_FILTER_SIZE_4: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_4);
|
||||
case BOX_FILTER_SIZE_5: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_5);
|
||||
case BOX_FILTER_SIZE_6: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_6);
|
||||
case BOX_FILTER_SIZE_7: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_7);
|
||||
case BOX_FILTER_SIZE_8: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_8);
|
||||
case BOX_FILTER_SIZE_9: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_9);
|
||||
case BOX_FILTER_SIZE_10: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_10);
|
||||
default: BLUR_ROW_KERNEL (d);
|
||||
}
|
||||
|
||||
memcpy (row, tmp_buffer, row_width);
|
||||
@@ -140,45 +185,35 @@ flip_buffer (guchar *dst_buffer,
|
||||
#undef BLOCK_SIZE
|
||||
}
|
||||
|
||||
/*
|
||||
* Gets the size for a single box blur.
|
||||
*
|
||||
* Much of this, the 3 * sqrt(2 * pi) / 4, is the known value for
|
||||
* approximating a Gaussian using box blurs. This yields quite a good
|
||||
* approximation for a Gaussian. For more details, see:
|
||||
* http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement
|
||||
* https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19
|
||||
*/
|
||||
#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4))
|
||||
|
||||
static int
|
||||
get_box_filter_size (double radius)
|
||||
{
|
||||
return GAUSSIAN_SCALE_FACTOR * radius;
|
||||
}
|
||||
|
||||
static void
|
||||
_boxblur (guchar *buffer,
|
||||
int width,
|
||||
int height,
|
||||
int radius)
|
||||
_boxblur (guchar *buffer,
|
||||
int width,
|
||||
int height,
|
||||
int radius,
|
||||
GtkBlurFlags flags)
|
||||
{
|
||||
guchar *flipped_buffer;
|
||||
int d = get_box_filter_size (radius);
|
||||
|
||||
flipped_buffer = g_malloc (width * height);
|
||||
|
||||
/* Step 1: swap rows and columns */
|
||||
flip_buffer (flipped_buffer, buffer, width, height);
|
||||
if (flags & GTK_BLUR_Y)
|
||||
{
|
||||
/* Step 1: swap rows and columns */
|
||||
flip_buffer (flipped_buffer, buffer, width, height);
|
||||
|
||||
/* Step 2: blur rows (really columns) */
|
||||
blur_rows (flipped_buffer, buffer, height, width, d);
|
||||
/* Step 2: blur rows (really columns) */
|
||||
blur_rows (flipped_buffer, buffer, height, width, d);
|
||||
|
||||
/* Step 3: swap rows and columns */
|
||||
flip_buffer (buffer, flipped_buffer, height, width);
|
||||
/* Step 3: swap rows and columns */
|
||||
flip_buffer (buffer, flipped_buffer, height, width);
|
||||
}
|
||||
|
||||
/* Step 4: blur rows */
|
||||
blur_rows (buffer, flipped_buffer, width, height, d);
|
||||
if (flags & GTK_BLUR_X)
|
||||
{
|
||||
/* Step 4: blur rows */
|
||||
blur_rows (buffer, flipped_buffer, width, height, d);
|
||||
}
|
||||
|
||||
g_free (flipped_buffer);
|
||||
}
|
||||
@@ -192,7 +227,8 @@ _boxblur (guchar *buffer,
|
||||
*/
|
||||
void
|
||||
_gtk_cairo_blur_surface (cairo_surface_t* surface,
|
||||
double radius_d)
|
||||
double radius_d,
|
||||
GtkBlurFlags flags)
|
||||
{
|
||||
int radius = radius_d;
|
||||
|
||||
@@ -200,7 +236,12 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
|
||||
g_return_if_fail (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE);
|
||||
g_return_if_fail (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_A8);
|
||||
|
||||
if (radius == 0)
|
||||
/* The code doesn't actually do any blurring for radius 1, as it
|
||||
* ends up with box filter size 1 */
|
||||
if (radius <= 1)
|
||||
return;
|
||||
|
||||
if ((flags & (GTK_BLUR_X|GTK_BLUR_Y)) == 0)
|
||||
return;
|
||||
|
||||
/* Before we mess with the surface, execute any pending drawing. */
|
||||
@@ -209,7 +250,7 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
|
||||
_boxblur (cairo_image_surface_get_data (surface),
|
||||
cairo_image_surface_get_stride (surface),
|
||||
cairo_image_surface_get_height (surface),
|
||||
radius);
|
||||
radius, flags);
|
||||
|
||||
/* Inform cairo we altered the surface contents. */
|
||||
cairo_surface_mark_dirty (surface);
|
||||
|
||||
@@ -29,8 +29,16 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef enum {
|
||||
GTK_BLUR_NONE = 0,
|
||||
GTK_BLUR_X = 1<<0,
|
||||
GTK_BLUR_Y = 1<<1,
|
||||
GTK_BLUR_REPEAT = 1<<2
|
||||
} GtkBlurFlags;
|
||||
|
||||
void _gtk_cairo_blur_surface (cairo_surface_t *surface,
|
||||
double radius);
|
||||
double radius,
|
||||
GtkBlurFlags flags);;
|
||||
int _gtk_cairo_blur_compute_pixels (double radius);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
@@ -209,7 +209,9 @@ popup_edit (GtkWidget *widget,
|
||||
focus = editor->priv->a_entry;
|
||||
}
|
||||
|
||||
if (popup)
|
||||
if (popup == editor->priv->current_popup)
|
||||
dismiss_current_popup (editor);
|
||||
else if (popup)
|
||||
{
|
||||
dismiss_current_popup (editor);
|
||||
toplevel = gtk_widget_get_toplevel (GTK_WIDGET (editor));
|
||||
|
||||
+17
-4
@@ -41,6 +41,7 @@ struct _GtkColorSwatchPrivate
|
||||
guint has_color : 1;
|
||||
guint use_alpha : 1;
|
||||
guint selectable : 1;
|
||||
guint has_menu : 1;
|
||||
|
||||
GdkWindow *event_window;
|
||||
|
||||
@@ -52,7 +53,8 @@ enum
|
||||
{
|
||||
PROP_ZERO,
|
||||
PROP_RGBA,
|
||||
PROP_SELECTABLE
|
||||
PROP_SELECTABLE,
|
||||
PROP_HAS_MENU
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -82,6 +84,7 @@ gtk_color_swatch_init (GtkColorSwatch *swatch)
|
||||
swatch->priv = gtk_color_swatch_get_instance_private (swatch);
|
||||
swatch->priv->use_alpha = TRUE;
|
||||
swatch->priv->selectable = TRUE;
|
||||
swatch->priv->has_menu = TRUE;
|
||||
|
||||
gtk_widget_set_can_focus (GTK_WIDGET (swatch), TRUE);
|
||||
gtk_widget_set_has_window (GTK_WIDGET (swatch), FALSE);
|
||||
@@ -357,7 +360,7 @@ swatch_key_press (GtkWidget *widget,
|
||||
event->keyval == GDK_KEY_KP_Enter ||
|
||||
event->keyval == GDK_KEY_KP_Space)
|
||||
{
|
||||
if (swatch->priv->has_color &&
|
||||
if (swatch->priv->has_color &&
|
||||
swatch->priv->selectable &&
|
||||
(gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_SELECTED) == 0)
|
||||
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE);
|
||||
@@ -517,7 +520,7 @@ tap_action (GtkGestureMultiPress *gesture,
|
||||
}
|
||||
else if (button == GDK_BUTTON_SECONDARY)
|
||||
{
|
||||
if (swatch->priv->has_color)
|
||||
if (swatch->priv->has_color && swatch->priv->has_menu)
|
||||
do_popup (GTK_WIDGET (swatch), button, gtk_get_current_event_time ());
|
||||
}
|
||||
}
|
||||
@@ -575,7 +578,7 @@ swatch_realize (GtkWidget *widget)
|
||||
gtk_widget_set_window (widget, window);
|
||||
g_object_ref (window);
|
||||
|
||||
swatch->priv->event_window =
|
||||
swatch->priv->event_window =
|
||||
gdk_window_new (window,
|
||||
&attributes, attributes_mask);
|
||||
gtk_widget_register_window (widget, swatch->priv->event_window);
|
||||
@@ -641,6 +644,9 @@ swatch_get_property (GObject *object,
|
||||
case PROP_SELECTABLE:
|
||||
g_value_set_boolean (value, gtk_color_swatch_get_selectable (swatch));
|
||||
break;
|
||||
case PROP_HAS_MENU:
|
||||
g_value_set_boolean (value, swatch->priv->has_menu);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -663,6 +669,9 @@ swatch_set_property (GObject *object,
|
||||
case PROP_SELECTABLE:
|
||||
gtk_color_swatch_set_selectable (swatch, g_value_get_boolean (value));
|
||||
break;
|
||||
case PROP_HAS_MENU:
|
||||
swatch->priv->has_menu = g_value_get_boolean (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -728,10 +737,14 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
|
||||
g_object_class_install_property (object_class, PROP_SELECTABLE,
|
||||
g_param_spec_boolean ("selectable", P_("Selectable"), P_("Whether the swatch is selectable"),
|
||||
TRUE, GTK_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class, PROP_HAS_MENU,
|
||||
g_param_spec_boolean ("has-menu", P_("Has Menu"), P_("Whether the swatch should offer customization"),
|
||||
TRUE, GTK_PARAM_READWRITE));
|
||||
|
||||
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COLOR_SWATCH_ACCESSIBLE);
|
||||
}
|
||||
|
||||
|
||||
/* Public API {{{1 */
|
||||
|
||||
GtkWidget *
|
||||
|
||||
+1
-1
@@ -1689,7 +1689,7 @@ gtk_container_add (GtkContainer *container,
|
||||
{
|
||||
g_warning ("Attempting to add a widget with type %s to a container of "
|
||||
"type %s, but the widget is already inside a container of type %s, "
|
||||
"please use gtk_widget_reparent()" ,
|
||||
"please remove the widget from its existing container first." ,
|
||||
g_type_name (G_OBJECT_TYPE (widget)),
|
||||
g_type_name (G_OBJECT_TYPE (container)),
|
||||
g_type_name (G_OBJECT_TYPE (parent)));
|
||||
|
||||
@@ -337,7 +337,7 @@ static GtkCssValue font_variant_values[] = {
|
||||
GtkCssValue *
|
||||
_gtk_css_font_variant_value_new (PangoVariant font_variant)
|
||||
{
|
||||
g_return_val_if_fail (font_variant < G_N_ELEMENTS (font_variant_values), NULL);
|
||||
g_return_val_if_fail ((gint)font_variant < G_N_ELEMENTS (font_variant_values), NULL);
|
||||
|
||||
return _gtk_css_value_ref (&font_variant_values[font_variant]);
|
||||
}
|
||||
|
||||
+61
-20
@@ -313,7 +313,10 @@ static gboolean
|
||||
needs_blur (const GtkCssValue *shadow)
|
||||
{
|
||||
double radius = _gtk_css_number_value_get (shadow->radius, 0);
|
||||
if (radius == 0.0)
|
||||
|
||||
/* The code doesn't actually do any blurring for radius 1, as it
|
||||
* ends up with box filter size 1 */
|
||||
if (radius <= 1.0)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
@@ -323,12 +326,15 @@ static const cairo_user_data_key_t original_cr_key;
|
||||
|
||||
static cairo_t *
|
||||
gtk_css_shadow_value_start_drawing (const GtkCssValue *shadow,
|
||||
cairo_t *cr)
|
||||
cairo_t *cr,
|
||||
GtkBlurFlags blur_flags)
|
||||
{
|
||||
cairo_rectangle_int_t clip_rect;
|
||||
cairo_surface_t *surface;
|
||||
cairo_t *blur_cr;
|
||||
gdouble radius, clip_radius;
|
||||
gboolean blur_x = (blur_flags & GTK_BLUR_X) != 0;
|
||||
gboolean blur_y = (blur_flags & GTK_BLUR_Y) != 0;
|
||||
|
||||
if (!needs_blur (shadow))
|
||||
return cr;
|
||||
@@ -338,12 +344,22 @@ gtk_css_shadow_value_start_drawing (const GtkCssValue *shadow,
|
||||
radius = _gtk_css_number_value_get (shadow->radius, 0);
|
||||
clip_radius = _gtk_cairo_blur_compute_pixels (radius);
|
||||
|
||||
if (blur_flags & GTK_BLUR_REPEAT)
|
||||
{
|
||||
if (!blur_x)
|
||||
clip_rect.width = 1;
|
||||
if (!blur_y)
|
||||
clip_rect.height = 1;
|
||||
}
|
||||
|
||||
/* Create a larger surface to center the blur. */
|
||||
surface = cairo_surface_create_similar_image (cairo_get_target (cr),
|
||||
CAIRO_FORMAT_A8,
|
||||
clip_rect.width + 2 * clip_radius,
|
||||
clip_rect.height + 2 * clip_radius);
|
||||
cairo_surface_set_device_offset (surface, clip_radius - clip_rect.x, clip_radius - clip_rect.y);
|
||||
clip_rect.width + (blur_x ? 2 * clip_radius : 0),
|
||||
clip_rect.height + (blur_y ? 2 * clip_radius : 0));
|
||||
cairo_surface_set_device_offset (surface,
|
||||
(blur_x ? clip_radius : 0) - clip_rect.x,
|
||||
(blur_y ? clip_radius : 0) - clip_rect.y);
|
||||
blur_cr = cairo_create (surface);
|
||||
cairo_set_user_data (blur_cr, &original_cr_key, cairo_reference (cr), (cairo_destroy_func_t) cairo_destroy);
|
||||
|
||||
@@ -358,9 +374,24 @@ gtk_css_shadow_value_start_drawing (const GtkCssValue *shadow,
|
||||
return blur_cr;
|
||||
}
|
||||
|
||||
void
|
||||
mask_surface_repeat (cairo_t *cr,
|
||||
cairo_surface_t *surface)
|
||||
{
|
||||
cairo_pattern_t *pattern;
|
||||
|
||||
pattern = cairo_pattern_create_for_surface (surface);
|
||||
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
|
||||
|
||||
cairo_mask (cr, pattern);
|
||||
|
||||
cairo_pattern_destroy (pattern);
|
||||
}
|
||||
|
||||
static cairo_t *
|
||||
gtk_css_shadow_value_finish_drawing (const GtkCssValue *shadow,
|
||||
cairo_t *cr)
|
||||
cairo_t *cr,
|
||||
GtkBlurFlags blur_flags)
|
||||
{
|
||||
gdouble radius;
|
||||
cairo_t *original_cr;
|
||||
@@ -374,12 +405,16 @@ gtk_css_shadow_value_finish_drawing (const GtkCssValue *shadow,
|
||||
/* Blur the surface. */
|
||||
surface = cairo_get_target (cr);
|
||||
radius = _gtk_css_number_value_get (shadow->radius, 0);
|
||||
_gtk_cairo_blur_surface (surface, radius);
|
||||
_gtk_cairo_blur_surface (surface, radius, blur_flags);
|
||||
|
||||
gdk_cairo_set_source_rgba (original_cr, _gtk_css_rgba_value_get_rgba (shadow->color));
|
||||
cairo_mask_surface (original_cr, surface, 0, 0);
|
||||
if (blur_flags & GTK_BLUR_REPEAT)
|
||||
mask_surface_repeat (original_cr, surface);
|
||||
else
|
||||
cairo_mask_surface (original_cr, surface, 0, 0);
|
||||
|
||||
cairo_destroy (cr);
|
||||
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
return original_cr;
|
||||
@@ -441,7 +476,7 @@ make_blurred_pango_surface (cairo_t *existing_cr,
|
||||
cr = cairo_create (surface);
|
||||
cairo_move_to (cr, 0, 0);
|
||||
_gtk_pango_fill_layout (cr, layout);
|
||||
_gtk_cairo_blur_surface (surface, radius * x_scale);
|
||||
_gtk_cairo_blur_surface (surface, radius * x_scale, GTK_BLUR_X | GTK_BLUR_Y);
|
||||
|
||||
cairo_destroy (cr);
|
||||
|
||||
@@ -528,14 +563,14 @@ _gtk_css_shadow_value_paint_icon (const GtkCssValue *shadow,
|
||||
pattern = cairo_pattern_reference (cairo_get_source (cr));
|
||||
|
||||
gdk_cairo_set_source_rgba (cr, _gtk_css_rgba_value_get_rgba (shadow->color));
|
||||
cr = gtk_css_shadow_value_start_drawing (shadow, cr);
|
||||
cr = gtk_css_shadow_value_start_drawing (shadow, cr, GTK_BLUR_X | GTK_BLUR_Y);
|
||||
|
||||
cairo_translate (cr,
|
||||
_gtk_css_number_value_get (shadow->hoffset, 0),
|
||||
_gtk_css_number_value_get (shadow->voffset, 0));
|
||||
cairo_mask (cr, pattern);
|
||||
|
||||
cr = gtk_css_shadow_value_finish_drawing (shadow, cr);
|
||||
cr = gtk_css_shadow_value_finish_drawing (shadow, cr, GTK_BLUR_X | GTK_BLUR_Y);
|
||||
|
||||
cairo_restore (cr);
|
||||
cairo_pattern_destroy (pattern);
|
||||
@@ -583,16 +618,18 @@ draw_shadow (const GtkCssValue *shadow,
|
||||
cairo_t *cr,
|
||||
GtkRoundedBox *box,
|
||||
GtkRoundedBox *clip_box,
|
||||
gboolean blur)
|
||||
GtkBlurFlags blur_flags)
|
||||
{
|
||||
cairo_t *shadow_cr;
|
||||
gboolean do_blur;
|
||||
|
||||
if (has_empty_clip (cr))
|
||||
return;
|
||||
|
||||
gdk_cairo_set_source_rgba (cr, _gtk_css_rgba_value_get_rgba (shadow->color));
|
||||
if (blur)
|
||||
shadow_cr = gtk_css_shadow_value_start_drawing (shadow, cr);
|
||||
do_blur = (blur_flags & (GTK_BLUR_X | GTK_BLUR_Y)) != 0;
|
||||
if (do_blur)
|
||||
shadow_cr = gtk_css_shadow_value_start_drawing (shadow, cr, blur_flags);
|
||||
else
|
||||
shadow_cr = cr;
|
||||
|
||||
@@ -603,8 +640,8 @@ draw_shadow (const GtkCssValue *shadow,
|
||||
|
||||
cairo_fill (shadow_cr);
|
||||
|
||||
if (blur)
|
||||
gtk_css_shadow_value_finish_drawing (shadow, shadow_cr);
|
||||
if (do_blur)
|
||||
gtk_css_shadow_value_finish_drawing (shadow, shadow_cr, blur_flags);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -660,7 +697,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
|
||||
_gtk_rounded_box_shrink (&clip_box, -clip_radius, -clip_radius, -clip_radius, -clip_radius);
|
||||
|
||||
if (!needs_blur (shadow))
|
||||
draw_shadow (shadow, cr, &box, &clip_box, FALSE);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, GTK_BLUR_NONE);
|
||||
else
|
||||
{
|
||||
int i, x1, x2, y1, y2;
|
||||
@@ -730,7 +767,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
|
||||
/* Also clip with remaining to ensure we never draw any area twice */
|
||||
gdk_cairo_region (cr, remaining);
|
||||
cairo_clip (cr);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, TRUE);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, GTK_BLUR_X | GTK_BLUR_Y);
|
||||
cairo_restore (cr);
|
||||
|
||||
/* We drew the region, remove it from remaining */
|
||||
@@ -744,8 +781,11 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
|
||||
/* Then the sides */
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
GtkBlurFlags blur_flags = GTK_BLUR_REPEAT;
|
||||
|
||||
if (i == GTK_CSS_TOP || i == GTK_CSS_BOTTOM)
|
||||
{
|
||||
blur_flags |= GTK_BLUR_Y;
|
||||
x1 = floor (box.box.x - clip_radius);
|
||||
x2 = ceil (box.box.x + box.box.width + clip_radius);
|
||||
}
|
||||
@@ -762,6 +802,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
|
||||
|
||||
if (i == GTK_CSS_LEFT || i == GTK_CSS_RIGHT)
|
||||
{
|
||||
blur_flags |= GTK_BLUR_X;
|
||||
y1 = floor (box.box.y - clip_radius);
|
||||
y2 = ceil (box.box.y + box.box.height + clip_radius);
|
||||
}
|
||||
@@ -782,7 +823,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
|
||||
/* Also clip with remaining to ensure we never draw any area twice */
|
||||
gdk_cairo_region (cr, remaining);
|
||||
cairo_clip (cr);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, TRUE);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, blur_flags);
|
||||
cairo_restore (cr);
|
||||
|
||||
/* We drew the region, remove it from remaining */
|
||||
@@ -798,7 +839,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
|
||||
cairo_save (cr);
|
||||
gdk_cairo_region (cr, remaining);
|
||||
cairo_clip (cr);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, FALSE);
|
||||
draw_shadow (shadow, cr, &box, &clip_box, GTK_BLUR_NONE);
|
||||
cairo_restore (cr);
|
||||
|
||||
cairo_region_destroy (remaining);
|
||||
|
||||
@@ -46,9 +46,12 @@ gtk_css_static_style_get_value (GtkCssStyle *style,
|
||||
{
|
||||
GtkCssStaticStyle *sstyle = GTK_CSS_STATIC_STYLE (style);
|
||||
|
||||
if (sstyle->values == NULL ||
|
||||
id >= sstyle->values->len)
|
||||
return NULL;
|
||||
if (G_UNLIKELY (id >= GTK_CSS_PROPERTY_N_PROPERTIES))
|
||||
{
|
||||
GtkCssStyleProperty *prop = _gtk_css_style_property_lookup_by_id (id);
|
||||
|
||||
return _gtk_css_style_property_get_initial_value (prop);
|
||||
}
|
||||
|
||||
return g_ptr_array_index (sstyle->values, id);
|
||||
}
|
||||
|
||||
+3
-1
@@ -160,7 +160,9 @@
|
||||
* <object class="GtkButton" id="button_cancel"/>
|
||||
* </child>
|
||||
* <child type="action">
|
||||
* <object class="GtkButton" id="button_ok"/>
|
||||
* <object class="GtkButton" id="button_ok">
|
||||
* <property name="can-default">True</property>
|
||||
* </object>
|
||||
* </child>
|
||||
* <action-widgets>
|
||||
* <action-widget response="cancel">button_cancel</action-widget>
|
||||
|
||||
@@ -62,6 +62,8 @@ static void gtk_drag_source_site_destroy (gpointer data);
|
||||
static GtkDragSourceInfo *gtk_drag_get_source_info (GdkDragContext *context,
|
||||
gboolean create);
|
||||
|
||||
static void gtk_drag_drop_finished (GtkDragSourceInfo *info);
|
||||
|
||||
extern GdkDragContext *gdk_quartz_drag_source_context (); /* gdk/quartz/gdkdnd-quartz.c */
|
||||
|
||||
struct _GtkDragSourceSite
|
||||
@@ -1383,6 +1385,23 @@ gtk_drag_begin (GtkWidget *widget,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* gtk_drag_cancel:
|
||||
* @context: a #GdkDragContext, as e.g. returned by gtk_drag_begin_with_coordinates()
|
||||
*
|
||||
*/
|
||||
void
|
||||
gtk_drag_cancel (GdkDragContext *context)
|
||||
{
|
||||
GtkDragSourceInfo *info;
|
||||
|
||||
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
|
||||
|
||||
info = gtk_drag_get_source_info (context, FALSE);
|
||||
if (info != NULL)
|
||||
gtk_drag_drop_finished (info);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_drag_source_event_cb (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
|
||||
+40
-16
@@ -228,6 +228,8 @@ static gboolean gtk_drag_dest_drop (GtkWidget *widget,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
static void gtk_drag_dest_set_widget (GtkDragDestInfo *info,
|
||||
GtkWidget *widget);
|
||||
|
||||
static GtkDragDestInfo * gtk_drag_get_dest_info (GdkDragContext *context,
|
||||
gboolean create);
|
||||
@@ -1638,7 +1640,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
|
||||
if (info->widget)
|
||||
{
|
||||
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
|
||||
info->widget = NULL;
|
||||
gtk_drag_dest_set_widget (info, NULL);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1658,7 +1660,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
|
||||
if (info->widget)
|
||||
{
|
||||
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
|
||||
info->widget = NULL;
|
||||
gtk_drag_dest_set_widget (info, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1690,7 +1692,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
|
||||
if (info->widget && !found)
|
||||
{
|
||||
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
|
||||
info->widget = NULL;
|
||||
gtk_drag_dest_set_widget (info, NULL);
|
||||
}
|
||||
|
||||
/* Send a reply.
|
||||
@@ -1918,15 +1920,12 @@ gtk_drag_find_widget (GtkWidget *widget,
|
||||
found = callback (widget, context, x, y, time);
|
||||
|
||||
/* If so, send a "drag-leave" to the last widget */
|
||||
if (found)
|
||||
if (found && info->widget != widget)
|
||||
{
|
||||
if (info->widget && info->widget != widget)
|
||||
{
|
||||
gtk_drag_dest_leave (info->widget, context, time);
|
||||
}
|
||||
if (info->widget)
|
||||
gtk_drag_dest_leave (info->widget, context, time);
|
||||
|
||||
info->widget = widget;
|
||||
g_object_add_weak_pointer (G_OBJECT (widget), (gpointer *) &info->widget);
|
||||
gtk_drag_dest_set_widget (info, widget);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2008,9 +2007,26 @@ gtk_drag_proxy_begin (GtkWidget *widget,
|
||||
dest_info->proxy_source = source_info;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_drag_dest_set_widget (GtkDragDestInfo *info,
|
||||
GtkWidget *widget)
|
||||
{
|
||||
if (info->widget)
|
||||
g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
|
||||
|
||||
info->widget = widget;
|
||||
|
||||
if (info->widget)
|
||||
g_object_add_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_drag_dest_info_destroy (gpointer data)
|
||||
{
|
||||
GtkDragDestInfo *info = (GtkDragDestInfo *)data;
|
||||
|
||||
gtk_drag_dest_set_widget (info, NULL);
|
||||
|
||||
g_slice_free (GtkDragDestInfo, data);
|
||||
}
|
||||
|
||||
@@ -2515,7 +2531,11 @@ gtk_drag_begin_internal (GtkWidget *widget,
|
||||
* not have set one.
|
||||
*/
|
||||
if (!info->icon_window && !info->icon_helper)
|
||||
info->icon_helper = gtk_drag_source_site_get_icon_helper (site);
|
||||
{
|
||||
info->icon_helper = gtk_drag_source_site_get_icon_helper (site);
|
||||
set_icon_helper (info->context, info->icon_helper,
|
||||
0, 0, TRUE);
|
||||
}
|
||||
|
||||
/* We need to composite the icon into the cursor, if we are
|
||||
* not using an icon window.
|
||||
@@ -2574,7 +2594,8 @@ gtk_drag_begin_internal (GtkWidget *widget,
|
||||
* source can provide the data
|
||||
* @actions: A bitmask of the allowed drag actions for this drag
|
||||
* @button: The button the user clicked to start the drag
|
||||
* @event: The event that triggered the start of the drag
|
||||
* @event: (nullable): The event that triggered the start of the drag,
|
||||
* or %NULL if none can be obtained.
|
||||
* @x: The initial x coordinate to start dragging from, in the coordinate space
|
||||
* of @widget. If -1 is passed, the coordinates are retrieved from @event or
|
||||
* the current pointer position
|
||||
@@ -2636,7 +2657,8 @@ gtk_drag_begin_with_coordinates (GtkWidget *widget,
|
||||
* source can provide the data
|
||||
* @actions: A bitmask of the allowed drag actions for this drag
|
||||
* @button: The button the user clicked to start the drag
|
||||
* @event: The event that triggered the start of the drag
|
||||
* @event: (nullable): The event that triggered the start of the drag,
|
||||
* or %NULL if none can be obtained.
|
||||
*
|
||||
* This function is equivalent to gtk_drag_begin_with_coordinates(),
|
||||
* passing -1, -1 as coordinates.
|
||||
@@ -3199,10 +3221,11 @@ set_icon_helper (GdkDragContext *context,
|
||||
|
||||
info = gtk_drag_get_source_info (context, FALSE);
|
||||
|
||||
if (helper)
|
||||
g_object_ref (helper);
|
||||
if (info->icon_helper)
|
||||
g_object_unref (info->icon_helper);
|
||||
info->icon_helper = g_object_ref (helper);
|
||||
|
||||
info->icon_helper = helper;
|
||||
gtk_drag_set_icon_window (context, NULL, hot_x, hot_y, TRUE);
|
||||
}
|
||||
else
|
||||
@@ -3982,6 +4005,7 @@ gtk_drag_remove_icon (GtkDragSourceInfo *info)
|
||||
if (info->icon_window)
|
||||
{
|
||||
gtk_widget_hide (info->icon_window);
|
||||
gtk_widget_set_opacity (info->icon_window, 1.0);
|
||||
if (info->destroy_icon)
|
||||
gtk_widget_destroy (info->icon_window);
|
||||
|
||||
@@ -4477,7 +4501,7 @@ gtk_drag_check_threshold (GtkWidget *widget,
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_drag_cancel:
|
||||
* gtk_drag_cancel: (method)
|
||||
* @context: a #GdkDragContext, as e.g. returned by gtk_drag_begin_with_coordinates()
|
||||
*
|
||||
* Cancels an ongoing drag operation on the source side.
|
||||
|
||||
+27
-10
@@ -230,6 +230,7 @@ struct _GtkEntryPrivate
|
||||
guint cursor_handle_dragged : 1;
|
||||
guint selection_handle_dragged : 1;
|
||||
guint populate_all : 1;
|
||||
guint handling_key_event : 1;
|
||||
};
|
||||
|
||||
struct _EntryIconInfo
|
||||
@@ -3195,7 +3196,6 @@ realize_icon_info (GtkWidget *widget,
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK |
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_POINTER_MOTION_MASK |
|
||||
GDK_ENTER_NOTIFY_MASK |
|
||||
GDK_LEAVE_NOTIFY_MASK);
|
||||
@@ -3314,7 +3314,6 @@ gtk_entry_realize (GtkWidget *widget)
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON3_MOTION_MASK |
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_POINTER_MOTION_MASK |
|
||||
GDK_ENTER_NOTIFY_MASK |
|
||||
GDK_LEAVE_NOTIFY_MASK);
|
||||
@@ -4840,6 +4839,9 @@ gtk_entry_key_press (GtkWidget *widget,
|
||||
{
|
||||
GtkEntry *entry = GTK_ENTRY (widget);
|
||||
GtkEntryPrivate *priv = entry->priv;
|
||||
gboolean retval = FALSE;
|
||||
|
||||
priv->handling_key_event = TRUE;
|
||||
|
||||
gtk_entry_reset_blink_time (entry);
|
||||
gtk_entry_pend_cursor_blink (entry);
|
||||
@@ -4854,9 +4856,9 @@ gtk_entry_key_press (GtkWidget *widget,
|
||||
{
|
||||
if (gtk_im_context_filter_keypress (priv->im_context, event))
|
||||
{
|
||||
gtk_entry_obscure_mouse_cursor (entry);
|
||||
priv->need_im_reset = TRUE;
|
||||
return TRUE;
|
||||
retval = TRUE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4867,14 +4869,19 @@ gtk_entry_key_press (GtkWidget *widget,
|
||||
gtk_entry_reset_im_context (entry);
|
||||
|
||||
if (GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_press_event (widget, event))
|
||||
/* Activate key bindings
|
||||
*/
|
||||
return TRUE;
|
||||
{
|
||||
/* Activate key bindings */
|
||||
retval = TRUE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!priv->editable && event->length)
|
||||
gtk_widget_error_bell (widget);
|
||||
|
||||
return FALSE;
|
||||
out:
|
||||
priv->handling_key_event = FALSE;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gint
|
||||
@@ -4883,17 +4890,25 @@ gtk_entry_key_release (GtkWidget *widget,
|
||||
{
|
||||
GtkEntry *entry = GTK_ENTRY (widget);
|
||||
GtkEntryPrivate *priv = entry->priv;
|
||||
gboolean retval = FALSE;
|
||||
|
||||
priv->handling_key_event = TRUE;
|
||||
|
||||
if (priv->editable)
|
||||
{
|
||||
if (gtk_im_context_filter_keypress (priv->im_context, event))
|
||||
{
|
||||
priv->need_im_reset = TRUE;
|
||||
return TRUE;
|
||||
retval = TRUE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
return GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_release_event (widget, event);
|
||||
retval = GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_release_event (widget, event);
|
||||
|
||||
out:
|
||||
priv->handling_key_event = FALSE;
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gint
|
||||
@@ -5471,6 +5486,8 @@ buffer_notify_text (GtkEntryBuffer *buffer,
|
||||
GParamSpec *spec,
|
||||
GtkEntry *entry)
|
||||
{
|
||||
if (entry->priv->handling_key_event)
|
||||
gtk_entry_obscure_mouse_cursor (entry);
|
||||
gtk_entry_recompute (entry);
|
||||
emit_changed (entry);
|
||||
g_object_notify (G_OBJECT (entry), "text");
|
||||
|
||||
@@ -1343,6 +1343,9 @@ gtk_entry_completion_insert_action (GtkEntryCompletion *completion,
|
||||
* with text @text. If you want the action item to have markup, use
|
||||
* gtk_entry_completion_insert_action_markup().
|
||||
*
|
||||
* Note that @index_ is a relative position in the list of actions and
|
||||
* the position of an action can change when deleting a different action.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
@@ -1385,6 +1388,9 @@ gtk_entry_completion_insert_action_markup (GtkEntryCompletion *completion,
|
||||
*
|
||||
* Deletes the action at @index_ from @completion’s action list.
|
||||
*
|
||||
* Note that @index_ is a relative position and the position of an
|
||||
* action may have changed since it was inserted.
|
||||
*
|
||||
* Since: 2.4
|
||||
*/
|
||||
void
|
||||
@@ -1654,15 +1660,18 @@ gtk_entry_completion_popup (GtkEntryCompletion *completion)
|
||||
|
||||
gtk_widget_show (completion->priv->popup_window);
|
||||
|
||||
gtk_device_grab_add (completion->priv->popup_window, completion->priv->device, TRUE);
|
||||
gdk_device_grab (completion->priv->device, gtk_widget_get_window (completion->priv->popup_window),
|
||||
GDK_OWNERSHIP_WINDOW, TRUE,
|
||||
GDK_BUTTON_PRESS_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_POINTER_MOTION_MASK,
|
||||
NULL, GDK_CURRENT_TIME);
|
||||
if (completion->priv->device)
|
||||
{
|
||||
gtk_device_grab_add (completion->priv->popup_window, completion->priv->device, TRUE);
|
||||
gdk_device_grab (completion->priv->device, gtk_widget_get_window (completion->priv->popup_window),
|
||||
GDK_OWNERSHIP_WINDOW, TRUE,
|
||||
GDK_BUTTON_PRESS_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_POINTER_MOTION_MASK,
|
||||
NULL, GDK_CURRENT_TIME);
|
||||
|
||||
completion->priv->has_grab = TRUE;
|
||||
completion->priv->has_grab = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+1
-1
@@ -270,7 +270,7 @@ typedef enum
|
||||
* @GTK_MESSAGE_WARNING: Non-fatal warning message
|
||||
* @GTK_MESSAGE_QUESTION: Question requiring a choice
|
||||
* @GTK_MESSAGE_ERROR: Fatal error message
|
||||
* @GTK_MESSAGE_OTHER: None of the above, doesn’t get an icon
|
||||
* @GTK_MESSAGE_OTHER: None of the above
|
||||
*
|
||||
* The type of message being displayed in the dialog.
|
||||
*/
|
||||
|
||||
@@ -1033,11 +1033,12 @@ gtk_file_chooser_button_destroy (GtkWidget *widget)
|
||||
priv->dialog = NULL;
|
||||
}
|
||||
|
||||
if (priv->model && gtk_tree_model_get_iter_first (priv->model, &iter)) do
|
||||
if (priv->model && gtk_tree_model_get_iter_first (priv->model, &iter))
|
||||
{
|
||||
model_free_row_data (button, &iter);
|
||||
do
|
||||
model_free_row_data (button, &iter);
|
||||
while (gtk_tree_model_iter_next (priv->model, &iter));
|
||||
}
|
||||
while (gtk_tree_model_iter_next (priv->model, &iter));
|
||||
|
||||
if (priv->dnd_select_folder_cancellable)
|
||||
{
|
||||
|
||||
@@ -3439,7 +3439,11 @@ set_busy_cursor (GtkFileChooserWidget *impl,
|
||||
display = gtk_widget_get_display (widget);
|
||||
|
||||
if (busy)
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
|
||||
{
|
||||
cursor = gdk_cursor_new_from_name (display, "left_ptr_watch");
|
||||
if (cursor == NULL)
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
|
||||
}
|
||||
else
|
||||
cursor = NULL;
|
||||
|
||||
@@ -5882,7 +5886,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
|
||||
gboolean is_well_formed, is_empty, is_file_part_empty;
|
||||
gboolean is_folder;
|
||||
GtkFileChooserEntry *entry;
|
||||
GError *error;
|
||||
|
||||
save_entry:
|
||||
|
||||
@@ -5931,7 +5934,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
|
||||
|
||||
g_assert (file != NULL);
|
||||
|
||||
error = NULL;
|
||||
if (is_folder)
|
||||
{
|
||||
if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
|
||||
@@ -5977,9 +5979,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
|
||||
data);
|
||||
|
||||
set_busy_cursor (impl, TRUE);
|
||||
|
||||
if (error != NULL)
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_object_unref (file);
|
||||
@@ -6541,7 +6540,7 @@ recent_start_loading (GtkFileChooserWidget *impl)
|
||||
load_data->items = NULL;
|
||||
|
||||
/* begin lazy loading the recent files into the model */
|
||||
priv->load_recent_id = gdk_threads_add_idle_full (G_PRIORITY_HIGH_IDLE + 30,
|
||||
priv->load_recent_id = gdk_threads_add_idle_full (G_PRIORITY_DEFAULT,
|
||||
recent_idle_load,
|
||||
load_data,
|
||||
recent_idle_cleanup);
|
||||
|
||||
+37
-15
@@ -46,6 +46,7 @@
|
||||
#include "gtktreeselection.h"
|
||||
#include "gtktreeview.h"
|
||||
#include "gtkwidget.h"
|
||||
#include "gtksettings.h"
|
||||
|
||||
/**
|
||||
* SECTION:gtkfontchooserwidget
|
||||
@@ -95,6 +96,8 @@ struct _GtkFontChooserWidgetPrivate
|
||||
GtkFontFilterFunc filter_func;
|
||||
gpointer filter_data;
|
||||
GDestroyNotify filter_data_destroy;
|
||||
|
||||
guint last_fontconfig_timestamp;
|
||||
};
|
||||
|
||||
/* This is the initial fixed height and the top padding of the preview entry */
|
||||
@@ -377,34 +380,24 @@ static PangoFontDescription *
|
||||
tree_model_get_font_description (GtkTreeModel *model,
|
||||
GtkTreeIter *iter)
|
||||
{
|
||||
PangoFontDescription *desc;
|
||||
PangoFontDescription *desc, *face_desc;
|
||||
PangoFontFace *face;
|
||||
GtkTreeIter child_iter;
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
FONT_DESC_COLUMN, &desc,
|
||||
-1);
|
||||
if (desc != NULL)
|
||||
if (pango_font_description_get_set_fields (desc) != 0)
|
||||
return desc;
|
||||
|
||||
gtk_tree_model_get (model, iter,
|
||||
FACE_COLUMN, &face,
|
||||
-1);
|
||||
desc = pango_font_face_describe (face);
|
||||
face_desc = pango_font_face_describe (face);
|
||||
g_object_unref (face);
|
||||
|
||||
if (GTK_IS_TREE_MODEL_FILTER (model))
|
||||
{
|
||||
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
|
||||
&child_iter,
|
||||
iter);
|
||||
iter = &child_iter;
|
||||
model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model));
|
||||
}
|
||||
pango_font_description_merge (desc, face_desc, TRUE);
|
||||
|
||||
gtk_list_store_set (GTK_LIST_STORE (model), iter,
|
||||
FONT_DESC_COLUMN, desc,
|
||||
-1);
|
||||
pango_font_description_free (face_desc);
|
||||
|
||||
return desc;
|
||||
}
|
||||
@@ -633,6 +626,21 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser)
|
||||
gint n_families, i;
|
||||
PangoFontFamily **families;
|
||||
gchar *family_and_face;
|
||||
guint fontconfig_timestamp;
|
||||
|
||||
g_object_get (gtk_widget_get_settings (GTK_WIDGET (fontchooser)),
|
||||
"gtk-fontconfig-timestamp", &fontconfig_timestamp,
|
||||
NULL);
|
||||
|
||||
/* The fontconfig timestamp is only set on systems with fontconfig; every
|
||||
* other platform will set it to 0. For those systems, we fall back to
|
||||
* reloading the fonts every time.
|
||||
*/
|
||||
if (fontconfig_timestamp != 0 &&
|
||||
priv->last_fontconfig_timestamp == fontconfig_timestamp)
|
||||
return;
|
||||
|
||||
priv->last_fontconfig_timestamp = fontconfig_timestamp;
|
||||
|
||||
list_store = GTK_LIST_STORE (priv->model);
|
||||
|
||||
@@ -658,19 +666,23 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser)
|
||||
|
||||
for (j = 0; j < n_faces; j++)
|
||||
{
|
||||
PangoFontDescription *empty_font_desc;
|
||||
const gchar *face_name;
|
||||
|
||||
face_name = pango_font_face_get_face_name (faces[j]);
|
||||
|
||||
family_and_face = g_strconcat (fam_name, " ", face_name, NULL);
|
||||
empty_font_desc = pango_font_description_new ();
|
||||
|
||||
gtk_list_store_insert_with_values (list_store, &iter, -1,
|
||||
FAMILY_COLUMN, families[i],
|
||||
FACE_COLUMN, faces[j],
|
||||
FONT_DESC_COLUMN, empty_font_desc,
|
||||
PREVIEW_TITLE_COLUMN, family_and_face,
|
||||
-1);
|
||||
|
||||
g_free (family_and_face);
|
||||
pango_font_description_free (empty_font_desc);
|
||||
}
|
||||
|
||||
g_free (faces);
|
||||
@@ -936,10 +948,20 @@ gtk_font_chooser_widget_screen_changed (GtkWidget *widget,
|
||||
GdkScreen *previous_screen)
|
||||
{
|
||||
GtkFontChooserWidget *fontchooser = GTK_FONT_CHOOSER_WIDGET (widget);
|
||||
GtkSettings *settings;
|
||||
|
||||
if (GTK_WIDGET_CLASS (gtk_font_chooser_widget_parent_class)->screen_changed)
|
||||
GTK_WIDGET_CLASS (gtk_font_chooser_widget_parent_class)->screen_changed (widget, previous_screen);
|
||||
|
||||
if (previous_screen)
|
||||
{
|
||||
settings = gtk_settings_get_for_screen (previous_screen);
|
||||
g_signal_handlers_disconnect_by_func (settings, gtk_font_chooser_widget_load_fonts, widget);
|
||||
}
|
||||
settings = gtk_widget_get_settings (widget);
|
||||
g_signal_connect_object (settings, "notify::gtk-fontconfig-timestamp",
|
||||
G_CALLBACK (gtk_font_chooser_widget_load_fonts), widget, G_CONNECT_SWAPPED);
|
||||
|
||||
if (previous_screen == NULL)
|
||||
previous_screen = gdk_screen_get_default ();
|
||||
|
||||
|
||||
+5
-1
@@ -329,7 +329,7 @@ _find_widget_window (GtkGesture *gesture,
|
||||
|
||||
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
|
||||
|
||||
while (window)
|
||||
while (window && !gdk_window_is_destroyed (window))
|
||||
{
|
||||
gdk_window_get_user_data (window, (gpointer*) &window_widget);
|
||||
|
||||
@@ -354,6 +354,10 @@ _update_widget_coordinates (GtkGesture *gesture,
|
||||
gint wx, wy, x, y;
|
||||
|
||||
event_widget = gtk_get_event_widget (data->event);
|
||||
|
||||
if (!event_widget)
|
||||
return;
|
||||
|
||||
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
|
||||
event_widget_window = gtk_widget_get_window (event_widget);
|
||||
gdk_event_get_coords (data->event, &event_x, &event_y);
|
||||
|
||||
@@ -169,6 +169,8 @@ gtk_gesture_single_handle_event (GtkEventController *controller,
|
||||
button = event->button.button;
|
||||
break;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
if (!gtk_gesture_handles_sequence (GTK_GESTURE (controller), sequence))
|
||||
return FALSE;
|
||||
if (priv->touch_only && !test_touchscreen && source != GDK_SOURCE_TOUCHSCREEN)
|
||||
return FALSE;
|
||||
|
||||
|
||||
+53
-4
@@ -91,7 +91,46 @@
|
||||
*
|
||||
* If you need to initialize OpenGL state, e.g. buffer objects or
|
||||
* shaders, you should use the #GtkWidget::realize signal; you
|
||||
* can use the #GtkWidget::unrealize signal to clean up.
|
||||
* can use the #GtkWidget::unrealize signal to clean up. Since the
|
||||
* #GdkGLContext creation and initialization may fail, you will
|
||||
* need to check for errors, using gtk_gl_area_get_error(). An example
|
||||
* of how to safely initialize the GL state is:
|
||||
*
|
||||
* |[<!-- language="C" -->
|
||||
* static void
|
||||
* on_realize (GtkGLarea *area)
|
||||
* {
|
||||
* // We need to make the context current if we want to
|
||||
* // call GL API
|
||||
* gtk_gl_area_make_current (area);
|
||||
*
|
||||
* // If there were errors during the initialization or
|
||||
* // when trying to make the context current, this
|
||||
* // function will return a #GError for you to catch
|
||||
* if (gtk_gl_area_get_error (area) != NULL)
|
||||
* return;
|
||||
*
|
||||
* // You can also use gtk_gl_area_set_error() in order
|
||||
* // to show eventual initialization errors on the
|
||||
* // GtkGLArea widget itself
|
||||
* GError *internal_error = NULL;
|
||||
* init_buffer_objects (&error);
|
||||
* if (error != NULL)
|
||||
* {
|
||||
* gtk_gl_area_set_error (area, error);
|
||||
* g_error_free (error);
|
||||
* return;
|
||||
* }
|
||||
*
|
||||
* init_shaders (&error);
|
||||
* if (error != NULL)
|
||||
* {
|
||||
* gtk_gl_area_set_error (area, error);
|
||||
* g_error_free (error);
|
||||
* return;
|
||||
* }
|
||||
* }
|
||||
* ]|
|
||||
*
|
||||
* If you need to change the options for creating the #GdkGLContext
|
||||
* you should use the #GtkGLArea::create-context signal.
|
||||
@@ -448,6 +487,11 @@ gtk_gl_area_attach_buffers (GtkGLArea *area)
|
||||
{
|
||||
GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
|
||||
|
||||
g_return_if_fail (GTK_IS_GL_AREA (area));
|
||||
|
||||
if (priv->context == NULL)
|
||||
return;
|
||||
|
||||
gtk_gl_area_make_current (area);
|
||||
|
||||
if (!priv->have_buffers)
|
||||
@@ -631,6 +675,9 @@ gtk_gl_area_draw (GtkWidget *widget,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (priv->context == NULL)
|
||||
return FALSE;
|
||||
|
||||
gtk_gl_area_make_current (area);
|
||||
|
||||
gtk_gl_area_attach_buffers (area);
|
||||
@@ -837,10 +884,12 @@ gtk_gl_area_class_init (GtkGLAreaClass *klass)
|
||||
GDK_TYPE_GL_CONTEXT);
|
||||
|
||||
/**
|
||||
* GtkGLArea::resized:
|
||||
* GtkGLArea::resize:
|
||||
* @area: the #GtkGLArea that emitted the signal
|
||||
* @width: the width of the viewport
|
||||
* @height: the height of the viewport
|
||||
*
|
||||
* The ::resized signal is emitted once when the widget is realized, and
|
||||
* The ::resize signal is emitted once when the widget is realized, and
|
||||
* then each time the widget is changed while realized. This is useful
|
||||
* in order to keep GL state up to date with the widget size, like for
|
||||
* instance camera properties which may depend on the width/height ratio.
|
||||
@@ -1301,6 +1350,6 @@ gtk_gl_area_make_current (GtkGLArea *area)
|
||||
|
||||
g_return_if_fail (gtk_widget_get_realized (widget));
|
||||
|
||||
if (priv->context)
|
||||
if (priv->context != NULL)
|
||||
gdk_gl_context_make_current (priv->context);
|
||||
}
|
||||
|
||||
@@ -55,6 +55,8 @@ struct _GtkGLArea
|
||||
/**
|
||||
* GtkGLAreaClass:
|
||||
* @render: class closure for the #GtkGLArea::render signal
|
||||
* @resize: class closeure for the #GtkGLArea::resize signal
|
||||
* @create_context: class closure for the #GtkGLArea::create-context signal
|
||||
*
|
||||
* The `GtkGLAreaClass` structure contains only private data.
|
||||
*
|
||||
|
||||
+5
-2
@@ -1127,8 +1127,11 @@ gtk_grid_request_sum (GtkGridRequest *request,
|
||||
nat -= linedata->spacing;
|
||||
}
|
||||
|
||||
*minimum = min;
|
||||
*natural = nat;
|
||||
if (minimum)
|
||||
*minimum = min;
|
||||
|
||||
if (natural)
|
||||
*natural = nat;
|
||||
}
|
||||
|
||||
/* Computes minimum and natural fields of lines.
|
||||
|
||||
@@ -1812,6 +1812,36 @@ gtk_header_bar_unrealize (GtkWidget *widget)
|
||||
GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->unrealize (widget);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
window_state_changed (GtkWidget *window,
|
||||
GdkEventWindowState *event,
|
||||
gpointer data)
|
||||
{
|
||||
GtkHeaderBar *bar = GTK_HEADER_BAR (data);
|
||||
|
||||
if (event->changed_mask & (GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_TILED))
|
||||
_gtk_header_bar_update_window_buttons (bar);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_header_bar_hierarchy_changed (GtkWidget *widget,
|
||||
GtkWidget *previous_toplevel)
|
||||
{
|
||||
GtkWidget *toplevel;
|
||||
|
||||
toplevel = gtk_widget_get_toplevel (widget);
|
||||
|
||||
if (previous_toplevel)
|
||||
g_signal_handlers_disconnect_by_func (previous_toplevel,
|
||||
window_state_changed, widget);
|
||||
|
||||
if (toplevel)
|
||||
g_signal_connect_after (toplevel, "window-state-event",
|
||||
G_CALLBACK (window_state_changed), widget);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_header_bar_class_init (GtkHeaderBarClass *class)
|
||||
{
|
||||
@@ -1831,6 +1861,7 @@ gtk_header_bar_class_init (GtkHeaderBarClass *class)
|
||||
widget_class->draw = gtk_header_bar_draw;
|
||||
widget_class->realize = gtk_header_bar_realize;
|
||||
widget_class->unrealize = gtk_header_bar_unrealize;
|
||||
widget_class->hierarchy_changed = gtk_header_bar_hierarchy_changed;
|
||||
|
||||
container_class->add = gtk_header_bar_add;
|
||||
container_class->remove = gtk_header_bar_remove;
|
||||
|
||||
+1
-1
@@ -876,7 +876,7 @@ _gtk_icon_helper_get_size (GtkIconHelper *self,
|
||||
width = gdk_pixbuf_animation_get_width (self->priv->animation);
|
||||
height = gdk_pixbuf_animation_get_height (self->priv->animation);
|
||||
}
|
||||
else if (self->priv->icon_size != -1)
|
||||
else if (self->priv->icon_size != GTK_ICON_SIZE_INVALID)
|
||||
{
|
||||
ensure_icon_size (self, context, &width, &height);
|
||||
}
|
||||
|
||||
+23
-14
@@ -264,7 +264,8 @@ struct _GtkIconInfo
|
||||
|
||||
SymbolicPixbufCache *symbolic_pixbuf_cache;
|
||||
|
||||
gint symbolic_size;
|
||||
gint symbolic_width;
|
||||
gint symbolic_height;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
@@ -1157,8 +1158,7 @@ insert_theme (GtkIconTheme *icon_theme,
|
||||
{
|
||||
theme_file = g_key_file_new ();
|
||||
g_key_file_set_list_separator (theme_file, ',');
|
||||
g_key_file_load_from_file (theme_file, path, 0, &error);
|
||||
if (error)
|
||||
if (!g_key_file_load_from_file (theme_file, path, 0, &error))
|
||||
{
|
||||
g_key_file_free (theme_file);
|
||||
theme_file = NULL;
|
||||
@@ -3469,7 +3469,8 @@ icon_info_dup (GtkIconInfo *icon_info)
|
||||
dup->is_resource = icon_info->is_resource;
|
||||
dup->min_size = icon_info->min_size;
|
||||
dup->max_size = icon_info->max_size;
|
||||
dup->symbolic_size = icon_info->symbolic_size;
|
||||
dup->symbolic_width = icon_info->symbolic_width;
|
||||
dup->symbolic_height = icon_info->symbolic_height;
|
||||
|
||||
return dup;
|
||||
}
|
||||
@@ -4097,7 +4098,7 @@ load_icon_thread (GTask *task,
|
||||
{
|
||||
GtkIconInfo *dup = task_data;
|
||||
|
||||
icon_info_ensure_scale_and_pixbuf (dup);
|
||||
(void)icon_info_ensure_scale_and_pixbuf (dup);
|
||||
g_task_return_pointer (task, NULL, NULL);
|
||||
}
|
||||
|
||||
@@ -4408,9 +4409,11 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
|
||||
gchar *css_warning;
|
||||
gchar *css_error;
|
||||
gchar *data;
|
||||
gchar *size;
|
||||
gchar *width;
|
||||
gchar *height;
|
||||
gchar *file_data, *escaped_file_data;
|
||||
gsize file_len;
|
||||
gint symbolic_size;
|
||||
double alpha;
|
||||
gchar alphastr[G_ASCII_DTOSTR_BUF_SIZE];
|
||||
|
||||
@@ -4441,7 +4444,8 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
|
||||
if (!icon_info_ensure_scale_and_pixbuf (icon_info))
|
||||
return NULL;
|
||||
|
||||
if (icon_info->symbolic_size == 0)
|
||||
if (icon_info->symbolic_width == 0 ||
|
||||
icon_info->symbolic_height == 0)
|
||||
{
|
||||
/* Fetch size from the original icon */
|
||||
stream = g_memory_input_stream_new_from_data (file_data, file_len, NULL);
|
||||
@@ -4451,22 +4455,26 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
|
||||
if (!pixbuf)
|
||||
return NULL;
|
||||
|
||||
icon_info->symbolic_size = MAX (gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf));
|
||||
icon_info->symbolic_width = gdk_pixbuf_get_width (pixbuf);
|
||||
icon_info->symbolic_height = gdk_pixbuf_get_height (pixbuf);
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
|
||||
symbolic_size = MAX (icon_info->symbolic_width, icon_info->symbolic_height);
|
||||
|
||||
GTK_NOTE (ICONTHEME,
|
||||
if (icon_info->dir_type == ICON_THEME_DIR_UNTHEMED)
|
||||
g_print ("Symbolic icon %s is not in an icon theme directory",
|
||||
icon_info->key.icon_names ? icon_info->key.icon_names[0] : icon_info->filename);
|
||||
else if (icon_info->dir_size * icon_info->dir_scale != icon_info->symbolic_size)
|
||||
else if (icon_info->dir_size * icon_info->dir_scale != symbolic_size)
|
||||
g_print ("Symbolic icon %s of size %d is in an icon theme directory of size %d",
|
||||
icon_info->key.icon_names ? icon_info->key.icon_names[0] : icon_info->filename,
|
||||
icon_info->symbolic_size,
|
||||
symbolic_size,
|
||||
icon_info->dir_size * icon_info->dir_scale)
|
||||
);
|
||||
|
||||
size = g_strdup_printf ("%d", icon_info->symbolic_size);
|
||||
width = g_strdup_printf ("%d", icon_info->symbolic_width);
|
||||
height = g_strdup_printf ("%d", icon_info->symbolic_height);
|
||||
|
||||
escaped_file_data = g_markup_escape_text (file_data, file_len);
|
||||
g_free (file_data);
|
||||
@@ -4477,8 +4485,8 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
|
||||
"<svg version=\"1.1\"\n"
|
||||
" xmlns=\"http://www.w3.org/2000/svg\"\n"
|
||||
" xmlns:xi=\"http://www.w3.org/2001/XInclude\"\n"
|
||||
" width=\"", size, "\"\n"
|
||||
" height=\"", size, "\">\n"
|
||||
" width=\"", width, "\"\n"
|
||||
" height=\"", height, "\">\n"
|
||||
" <style type=\"text/css\">\n"
|
||||
" rect,path {\n"
|
||||
" fill: ", css_fg," !important;\n"
|
||||
@@ -4501,7 +4509,8 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
|
||||
g_free (css_warning);
|
||||
g_free (css_error);
|
||||
g_free (css_success);
|
||||
g_free (size);
|
||||
g_free (width);
|
||||
g_free (height);
|
||||
|
||||
stream = g_memory_input_stream_new_from_data (data, -1, g_free);
|
||||
pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream,
|
||||
|
||||
+2
-2
@@ -1015,8 +1015,6 @@ gtk_image_set_from_resource (GtkImage *image,
|
||||
return;
|
||||
}
|
||||
|
||||
priv->resource_path = g_strdup (resource_path);
|
||||
|
||||
if (gdk_pixbuf_animation_is_static_image (animation))
|
||||
gtk_image_set_from_pixbuf (image, gdk_pixbuf_animation_get_static_image (animation));
|
||||
else
|
||||
@@ -1024,6 +1022,8 @@ gtk_image_set_from_resource (GtkImage *image,
|
||||
|
||||
_gtk_icon_helper_set_pixbuf_scale (priv->icon_helper, scale_factor);
|
||||
|
||||
priv->resource_path = g_strdup (resource_path);
|
||||
|
||||
g_object_notify (G_OBJECT (image), "resource");
|
||||
|
||||
g_object_unref (animation);
|
||||
|
||||
+2
-3
@@ -5357,10 +5357,9 @@ gtk_label_create_window (GtkLabel *label)
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_LEAVE_NOTIFY_MASK |
|
||||
GDK_BUTTON_MOTION_MASK |
|
||||
GDK_POINTER_MOTION_MASK |
|
||||
GDK_POINTER_MOTION_HINT_MASK;
|
||||
GDK_POINTER_MOTION_MASK;
|
||||
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_NOREDIR;
|
||||
if (gtk_widget_is_sensitive (widget) && priv->select_info && priv->select_info->selectable)
|
||||
if (gtk_widget_is_sensitive (widget) && priv->select_info->selectable)
|
||||
{
|
||||
attributes.cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
|
||||
GDK_XTERM);
|
||||
|
||||
+39
-9
@@ -948,8 +948,10 @@ gtk_list_box_set_adjustment (GtkListBox *box,
|
||||
GtkListBoxPrivate *priv = BOX_PRIV (box);
|
||||
|
||||
g_return_if_fail (GTK_IS_LIST_BOX (box));
|
||||
g_return_if_fail (adjustment == NULL || GTK_IS_ADJUSTMENT (adjustment));
|
||||
|
||||
g_object_ref_sink (adjustment);
|
||||
if (adjustment)
|
||||
g_object_ref_sink (adjustment);
|
||||
if (priv->adjustment)
|
||||
g_object_unref (priv->adjustment);
|
||||
priv->adjustment = adjustment;
|
||||
@@ -974,20 +976,37 @@ gtk_list_box_get_adjustment (GtkListBox *box)
|
||||
return BOX_PRIV (box)->adjustment;
|
||||
}
|
||||
|
||||
static void
|
||||
adjustment_changed (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
gpointer data)
|
||||
{
|
||||
GtkAdjustment *adjustment;
|
||||
|
||||
adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (object));
|
||||
gtk_list_box_set_adjustment (GTK_LIST_BOX (data), adjustment);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_list_box_parent_set (GtkWidget *widget,
|
||||
GtkWidget *prev_parent)
|
||||
{
|
||||
GtkWidget *parent;
|
||||
GtkAdjustment *adjustment;
|
||||
|
||||
parent = gtk_widget_get_parent (widget);
|
||||
|
||||
if (prev_parent && GTK_IS_SCROLLABLE (prev_parent))
|
||||
g_signal_handlers_disconnect_by_func (prev_parent,
|
||||
G_CALLBACK (adjustment_changed), widget);
|
||||
|
||||
if (parent && GTK_IS_SCROLLABLE (parent))
|
||||
{
|
||||
adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (parent));
|
||||
gtk_list_box_set_adjustment (GTK_LIST_BOX (widget), adjustment);
|
||||
adjustment_changed (G_OBJECT (parent), NULL, widget);
|
||||
g_signal_connect (parent, "notify::vadjustment",
|
||||
G_CALLBACK (adjustment_changed), widget);
|
||||
}
|
||||
else
|
||||
gtk_list_box_set_adjustment (GTK_LIST_BOX (widget), NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2177,9 +2196,9 @@ gtk_list_box_update_header (GtkListBox *box,
|
||||
return;
|
||||
|
||||
row = g_sequence_get (iter);
|
||||
g_object_ref (row);
|
||||
|
||||
before_iter = gtk_list_box_get_previous_visible (box, iter);
|
||||
if (row)
|
||||
g_object_ref (row);
|
||||
before_row = NULL;
|
||||
if (before_iter != NULL)
|
||||
{
|
||||
@@ -2227,8 +2246,7 @@ gtk_list_box_update_header (GtkListBox *box,
|
||||
}
|
||||
if (before_row)
|
||||
g_object_unref (before_row);
|
||||
if (row)
|
||||
g_object_unref (row);
|
||||
g_object_unref (row);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3044,7 +3062,7 @@ gtk_list_box_row_draw (GtkWidget *widget,
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_list_box_row_parent_class)->draw (widget, cr);
|
||||
|
||||
return TRUE;
|
||||
return GDK_EVENT_PROPAGATE;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3610,9 +3628,21 @@ gtk_list_box_bound_model_changed (GListModel *list,
|
||||
|
||||
item = g_list_model_get_item (list, position + i);
|
||||
widget = priv->create_widget_func (item, priv->create_widget_func_data);
|
||||
|
||||
/* We allow the create_widget_func to either return a full
|
||||
* reference or a floating reference. If we got the floating
|
||||
* reference, then turn it into a full reference now. That means
|
||||
* that gtk_list_box_insert() will take another full reference.
|
||||
* Finally, we'll release this full reference below, leaving only
|
||||
* the one held by the box.
|
||||
*/
|
||||
if (g_object_is_floating (widget))
|
||||
g_object_ref_sink (widget);
|
||||
|
||||
gtk_widget_show_all (widget);
|
||||
gtk_list_box_insert (box, widget, position + i);
|
||||
|
||||
g_object_unref (widget);
|
||||
g_object_unref (item);
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user