From 5ab8da5e08f08e9475fdf0ae80709d3cee326ed8 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Tue, 13 Aug 2024 08:17:11 -0700 Subject: [PATCH] init --- .../11_mobile.gschema.override | 23 + danctnix-phosh-settings/PKGBUILD | 31 + danctnix-phosh-settings/adwaita-phone.jpg | Bin 0 -> 850773 bytes .../danctnix-phosh-settings.install | 9 + danctnix-phosh-settings/pa-phosh.pa | 5 + danctnix-phosh-settings/phosh-wayland.sh | 10 + danctnix-phosh-ui-meta/PKGBUILD | 24 + ...r-Allow-to-toggle-the-sidebar-button.patch | 45 + ...ing-zoom-annotation-and-page-widgets.patch | 197 ++ ...es-view-Reduce-the-label-width-chars.patch | 22 + .../0004-window-Port-it-to-phones.patch | 467 +++ evince-mobile/PKGBUILD | 93 + feedbackd/PKGBUILD | 41 + gnome-calls/PKGBUILD | 71 + ...hat-can-be-added-to-the-event-naming.patch | 26 + ...Use-libfeedback-in-instead-of-GSound.patch | 151 + .../0003-timers-persist-running-timers.patch | 200 ++ ...sure-that-the-time-property-is-alway.patch | 215 ++ .../0005-alarm-remove-edit-property.patch | 64 + ...ms-persisted-and-add-missed-alarms-n.patch | 504 +++ .../0007-Fixed-infinite-alarming.patch | 36 + .../0008-Alarms-Fix-wiping-edit-data.patch | 50 + ...umpad-when-setting-a-new-alarm-timer.patch | 44 + .../0010-add-option-to-start-hidden.patch | 63 + .../0011-autostart-gnome-clocks.patch | 61 + ...og-Allow-much-smaller-heights-useing.patch | 359 +++ ...013-timer-setup-remove-unused-lables.patch | 52 + ...-smaller-heights-useing-a-ScrolledWi.patch | 163 + ...ng-panel-fit-to-small-window-heights.patch | 226 ++ ...ndalone-allow-smaller-window-heights.patch | 39 + gnome-clocks-mobile/PKGBUILD | 81 + ...et-Add-make-call-and-send-sms-button.patch | 68 + gnome-contacts-mobile/PKGBUILD | 75 + ...tar-chooser-Adapt-to-work-on-librem5.patch | 41 + ...ower-add-more-suspend-timing-options.patch | 27 + .../Add-patches-to-check-if-phone.patch | 37 + gnome-control-center-mobile/PKGBUILD | 152 + .../resize-connection-editor.patch | 614 ++++ .../0001-Add-libgtherm-dependency.patch | 117 + .../0002-Add-initial-thermal-view.patch | 1048 ++++++ gnome-usage-mobile/PKGBUILD | 55 + gtherm/PKGBUILD | 27 + ...llow-disabling-legacy-Tracker-search.patch | 104 + gtk3-mobile/Add-GtkHdyAnimation.patch | 348 ++ gtk3-mobile/Add-GtkHdyClamp.patch | 642 ++++ gtk3-mobile/Add-GtkHdyFlap.patch | 2813 +++++++++++++++++ .../Add-GtkHdyNavigationDirection.patch | 106 + gtk3-mobile/Add-GtkHdyShadowHelper.patch | 535 ++++ gtk3-mobile/Add-GtkHdySqueezer.patch | 1725 ++++++++++ ...kHdySwipeable-and-GtkHdySwipeTracker.patch | 1717 ++++++++++ gtk3-mobile/Add-GtkHdyViewSwitcher.patch | 953 ++++++ gtk3-mobile/Add-GtkHdyViewSwitcherBar.patch | 509 +++ .../Add-GtkHdyViewSwitcherButton.patch | 753 +++++ gtk3-mobile/Add-GtkHdyViewSwitcherTitle.patch | 757 +++++ gtk3-mobile/Add-org.gtk.Settings.Purism.patch | 46 + ...Add-padding-for-HdyViewSwitcherTitle.patch | 81 + .../Add-the-view-sidebar-symbolic-icon.patch | 112 + gtk3-mobile/PKGBUILD | 209 ++ gtk3-mobile/Port-file-chooser-to-phones.patch | 728 +++++ ...Reduce-the-font-chooser-minimum-size.patch | 38 + gtk3-mobile/aboutdialog-Port-to-phones.patch | 186 ++ ...Maximize-resizable-dialogs-on-phones.patch | 23 + .../events-Compress-touch-update-events.patch | 67 + ...land-Track-last-touch-serial-on-seat.patch | 46 + gtk3-mobile/gtk-query-immodules-3.0.hook | 11 + gtk3-mobile/gtk3.install | 3 + ...private-Add-an-API-to-check-if-phone.patch | 53 + ...-size-for-folding-instead-of-minimum.patch | 51 + ...e-a-back-button-in-dialogs-on-mobile.patch | 101 + ...e-the-action-area-below-on-the-phone.patch | 162 + ...em5-Make-GtkShortcutsWindow-adaptive.patch | 219 ++ ...alog-Set-orientation-based-on-device.patch | 234 ++ .../printunixdialog-Adapt-for-phones.patch | 492 +++ ...celeration-value-based-on-the-device.patch | 122 + gtk3-mobile/theme-Add-libhandy-styles.patch | 543 ++++ ...ow-Disable-window-dragging-on-phones.patch | 32 + ...e-resizable-pseudo-dialogs-on-mobile.patch | 41 + livi/PKGBUILD | 48 + phoc/PKGBUILD | 69 + phosh-antispam/PKGBUILD | 35 + phosh-mobile-settings/PKGBUILD | 37 + phosh-wallpapers/PKGBUILD | 39 + phosh/PKGBUILD | 76 + phosh/pam_phosh | 5 + phosh/phosh.install | 8 + phosh/phosh.service | 60 + portfolio-file-manager/PKGBUILD | 30 + purism-chatty/PKGBUILD | 58 + sound-theme-librem5/PKGBUILD | 16 + squeekboard/PKGBUILD | 26 + wys/PKGBUILD | 28 + 91 files changed, 20730 insertions(+) create mode 100644 danctnix-phosh-settings/11_mobile.gschema.override create mode 100644 danctnix-phosh-settings/PKGBUILD create mode 100644 danctnix-phosh-settings/adwaita-phone.jpg create mode 100644 danctnix-phosh-settings/danctnix-phosh-settings.install create mode 100644 danctnix-phosh-settings/pa-phosh.pa create mode 100755 danctnix-phosh-settings/phosh-wayland.sh create mode 100644 danctnix-phosh-ui-meta/PKGBUILD create mode 100644 evince-mobile/0001-toolbar-Allow-to-toggle-the-sidebar-button.patch create mode 100644 evince-mobile/0002-toolbar-Allow-hiding-zoom-annotation-and-page-widgets.patch create mode 100644 evince-mobile/0003-properties-view-Reduce-the-label-width-chars.patch create mode 100644 evince-mobile/0004-window-Port-it-to-phones.patch create mode 100644 evince-mobile/PKGBUILD create mode 100644 feedbackd/PKGBUILD create mode 100644 gnome-calls/PKGBUILD create mode 100644 gnome-clocks-mobile/0001-timer-Use-name-that-can-be-added-to-the-event-naming.patch create mode 100644 gnome-clocks-mobile/0002-Use-libfeedback-in-instead-of-GSound.patch create mode 100644 gnome-clocks-mobile/0003-timers-persist-running-timers.patch create mode 100644 gnome-clocks-mobile/0004-alarm-item-Make-sure-that-the-time-property-is-alway.patch create mode 100644 gnome-clocks-mobile/0005-alarm-remove-edit-property.patch create mode 100644 gnome-clocks-mobile/0006-alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch create mode 100644 gnome-clocks-mobile/0007-Fixed-infinite-alarming.patch create mode 100644 gnome-clocks-mobile/0008-Alarms-Fix-wiping-edit-data.patch create mode 100644 gnome-clocks-mobile/0009-Don-t-show-numpad-when-setting-a-new-alarm-timer.patch create mode 100644 gnome-clocks-mobile/0010-add-option-to-start-hidden.patch create mode 100644 gnome-clocks-mobile/0011-autostart-gnome-clocks.patch create mode 100644 gnome-clocks-mobile/0012-alarm-setup-dialog-Allow-much-smaller-heights-useing.patch create mode 100644 gnome-clocks-mobile/0013-timer-setup-remove-unused-lables.patch create mode 100644 gnome-clocks-mobile/0014-timer-Allow-much-smaller-heights-useing-a-ScrolledWi.patch create mode 100644 gnome-clocks-mobile/0015-alarm-make-ringing-panel-fit-to-small-window-heights.patch create mode 100644 gnome-clocks-mobile/0016-world-standalone-allow-smaller-window-heights.patch create mode 100644 gnome-clocks-mobile/PKGBUILD create mode 100644 gnome-contacts-mobile/0001-ContactSheet-Add-make-call-and-send-sms-button.patch create mode 100644 gnome-contacts-mobile/PKGBUILD create mode 100644 gnome-control-center-mobile/0001-avatar-chooser-Adapt-to-work-on-librem5.patch create mode 100644 gnome-control-center-mobile/0004-power-add-more-suspend-timing-options.patch create mode 100644 gnome-control-center-mobile/Add-patches-to-check-if-phone.patch create mode 100644 gnome-control-center-mobile/PKGBUILD create mode 100644 gnome-control-center-mobile/resize-connection-editor.patch create mode 100644 gnome-usage-mobile/0001-Add-libgtherm-dependency.patch create mode 100644 gnome-usage-mobile/0002-Add-initial-thermal-view.patch create mode 100644 gnome-usage-mobile/PKGBUILD create mode 100644 gtherm/PKGBUILD create mode 100644 gtk3-mobile/0001-Allow-disabling-legacy-Tracker-search.patch create mode 100644 gtk3-mobile/Add-GtkHdyAnimation.patch create mode 100644 gtk3-mobile/Add-GtkHdyClamp.patch create mode 100644 gtk3-mobile/Add-GtkHdyFlap.patch create mode 100644 gtk3-mobile/Add-GtkHdyNavigationDirection.patch create mode 100644 gtk3-mobile/Add-GtkHdyShadowHelper.patch create mode 100644 gtk3-mobile/Add-GtkHdySqueezer.patch create mode 100644 gtk3-mobile/Add-GtkHdySwipeable-and-GtkHdySwipeTracker.patch create mode 100644 gtk3-mobile/Add-GtkHdyViewSwitcher.patch create mode 100644 gtk3-mobile/Add-GtkHdyViewSwitcherBar.patch create mode 100644 gtk3-mobile/Add-GtkHdyViewSwitcherButton.patch create mode 100644 gtk3-mobile/Add-GtkHdyViewSwitcherTitle.patch create mode 100644 gtk3-mobile/Add-org.gtk.Settings.Purism.patch create mode 100644 gtk3-mobile/Add-padding-for-HdyViewSwitcherTitle.patch create mode 100644 gtk3-mobile/Add-the-view-sidebar-symbolic-icon.patch create mode 100644 gtk3-mobile/PKGBUILD create mode 100644 gtk3-mobile/Port-file-chooser-to-phones.patch create mode 100644 gtk3-mobile/Reduce-the-font-chooser-minimum-size.patch create mode 100644 gtk3-mobile/aboutdialog-Port-to-phones.patch create mode 100644 gtk3-mobile/dialog-Maximize-resizable-dialogs-on-phones.patch create mode 100644 gtk3-mobile/events-Compress-touch-update-events.patch create mode 100644 gtk3-mobile/gdk-wayland-Track-last-touch-serial-on-seat.patch create mode 100644 gtk3-mobile/gtk-query-immodules-3.0.hook create mode 100644 gtk3-mobile/gtk3.install create mode 100644 gtk3-mobile/gtkprivate-Add-an-API-to-check-if-phone.patch create mode 100644 gtk3-mobile/hdy-flap-Use-natural-size-for-folding-instead-of-minimum.patch create mode 100644 gtk3-mobile/headerbar-Use-a-back-button-in-dialogs-on-mobile.patch create mode 100644 gtk3-mobile/infobar-Move-the-action-area-below-on-the-phone.patch create mode 100644 gtk3-mobile/librem5-Make-GtkShortcutsWindow-adaptive.patch create mode 100644 gtk3-mobile/messagedialog-Set-orientation-based-on-device.patch create mode 100644 gtk3-mobile/printunixdialog-Adapt-for-phones.patch create mode 100644 gtk3-mobile/scrolledwindow-Set-deceleration-value-based-on-the-device.patch create mode 100644 gtk3-mobile/theme-Add-libhandy-styles.patch create mode 100644 gtk3-mobile/window-Disable-window-dragging-on-phones.patch create mode 100644 gtk3-mobile/window-Maximize-resizable-pseudo-dialogs-on-mobile.patch create mode 100644 livi/PKGBUILD create mode 100644 phoc/PKGBUILD create mode 100644 phosh-antispam/PKGBUILD create mode 100644 phosh-mobile-settings/PKGBUILD create mode 100644 phosh-wallpapers/PKGBUILD create mode 100644 phosh/PKGBUILD create mode 100644 phosh/pam_phosh create mode 100644 phosh/phosh.install create mode 100644 phosh/phosh.service create mode 100644 portfolio-file-manager/PKGBUILD create mode 100644 purism-chatty/PKGBUILD create mode 100644 sound-theme-librem5/PKGBUILD create mode 100644 squeekboard/PKGBUILD create mode 100644 wys/PKGBUILD diff --git a/danctnix-phosh-settings/11_mobile.gschema.override b/danctnix-phosh-settings/11_mobile.gschema.override new file mode 100644 index 0000000..ac763b0 --- /dev/null +++ b/danctnix-phosh-settings/11_mobile.gschema.override @@ -0,0 +1,23 @@ +[org.gnome.desktop.session] +idle-delay=60 + +[org.gnome.Epiphany.web] +user-agent='Mozilla/5.0 (PinePhone, like iPhone; Linux aarch64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Chrome/64 Mobile/15E148 Safari/605.1.15' + +[org.gnome.desktop.background] +picture-uri='file:///usr/share/danctnix/adwaita-phone.jpg' + +[org.gnome.desktop.sound] +theme-name='librem5' + +[org.gnome.settings-daemon.peripherals.touchscreen] +orientation-lock=true + +[org.gnome.settings-daemon.plugins.wwan] +unlock-sim=true + +[org.gnome.software] +download-updates=false + +[sm.puri.phosh] +enable-suspend=true diff --git a/danctnix-phosh-settings/PKGBUILD b/danctnix-phosh-settings/PKGBUILD new file mode 100644 index 0000000..bc7c218 --- /dev/null +++ b/danctnix-phosh-settings/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Danct12 +pkgname=danctnix-phosh-settings +pkgver=0.5 +pkgrel=3 +pkgdesc="Settings for Phosh UI" +arch=(any) +url="https://github.com/dreemurrs-embedded/Pine64-Arch" +license=('MIT') +install="$pkgname.install" +source=(adwaita-phone.jpg + pa-phosh.pa + phosh-wayland.sh + 11_mobile.gschema.override) + +package() { + # Add custom PA config + install -Dm755 -t "$pkgdir/etc/pulse/default.pa.d" "$srcdir/pa-phosh.pa" + + # Envscripts + install -Dm755 -t "$pkgdir/etc/profile.d" "$srcdir/phosh-wayland.sh" + + install -Dm644 -t "$pkgdir/usr/share/glib-2.0/schemas" "$srcdir/11_mobile.gschema.override" + + install -Dm644 -t "$pkgdir/usr/share/danctnix" "$srcdir/adwaita-phone.jpg" +} + + +md5sums=('cdc223b00b4e98f77286df98b1cddb4b' + 'fe7dc2d103ce11388af9ed555578fbf7' + '7580818750c3dad45819f0e3345169a7' + '9caef3d24adc4d10528eac294353b167') diff --git a/danctnix-phosh-settings/adwaita-phone.jpg b/danctnix-phosh-settings/adwaita-phone.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2238cb4064a60edd44aa9c12f5b74f7337f8cf52 GIT binary patch literal 850773 zcmeEud03KL_b4EE0JVU`(gu;h1aU?!OGQFs&_V(d%}NCo$5P9(a^Ps84I(O~Rw|<5 zREe6$2Ac;pvoy8YuhG;~ol+~c;l6gx`M&SD_jiBKz4zbyZ60{nyWh3fyVu%l@4bet zKkond2MERXVflc-UZ5-6aZWOg`)?+4gfJD;F0ap1wgmuO1$=?m{k;GCx{Bq;#W~tK z*xNeU11;?x9o_65+#DTn_D*ij%iQd#05-VnUwr|ZgAkzapg*b3^bQ366IRTCf59`a zfB?Ol>DfF0*88ic`oO*Zzroml;{Xi#lg^@>a37 zs`-*-?n@n4*g8=iXNZ6i2!x@5;XEUwd5#tfEFAx@%a4m7G#u!WLJy1wLC|15H2B9= zkU7v#82D%TlNI0|q6dZP{{lxK4FH5@)QqI`AW%IR3_j(^B6 z_$|hc8F}UK#q@?tSl-<~2u`61G6d3O?mSa7qU91R5}E4k;<|L1+e(JF&nhO1y_PQ! zt_u(ahKVKN5s}iU#H6j;lDF?j`86|Z&t7?UjxxWXP<7~VQL(y0Q(1LfTV11TY-&E; z@>}bf%U7;myME(ldq+?2y}tf|`wt#Id;a3(tJgzshDSbp92=kb^!dx=)C^x>U{L=q ze{%Le@r4HXfmhX26ZVbj5(?f$iK_lajnw0kIlAl|zx=ml+ zub=x}BfPXA;(SUJ`9@cba!V_zaQE;5{68kN7(re#>1KJZel=sSf3_*=>O8S>S@m

R?e)N!8b^}uapOC=0s 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 z zhLMhNf5LzPugyMLc3yyuGyhp@b^+UyFd0K(FR{&ZlzX#M%v zy!x2eT}3Nj#r)BAZz|9Bsz%T*NkTgidQT;3(K=Ad%>6gbgUnPC*k;r^tpP^#??quS zD;^!)vt!Ri->ajir`_%Uv~bWBIQVBAmPB<=FXinoKkR$6<Pk>-Lj)KI|N@{@LbHYUrgfHVw0R@H(Fz0 z5oM*#=rJ;E#l9!6U;lT@51-BDJT9D}+C7zt*%+YU zNyB)F+Iy&@s<%gTKSCRMsXPXxkpb)(0CC44q!jJ7FBg)N_nci=y>`#p@!5&!1GcfT zpmK*r-=L*Xn@ujTm$8_;C|YM}L?f4u!rjmcuoPboCeaDL-=PXD1}P#VK1qZb_lWpfyS7=;7*AUiht zjCpkY8K`6DI_Jj52P|DQ7;Z=+vDyqb%yw-r-Vx}6Kt;m4{c?t(IDm|=Gszg5P$f&0 zPBL;CC>2LrXCUJ`2xWas75phx7tYWD;|9crvXRw`_qT^~mnu`+T52x&l!jZPM1KOh zFW{+HfCbIcg)XYC6jY zqPvM5Bv|Pe5Mo^h4aG+yd!;HZ**|EYFy{WvSN{iLUOzkh;DzUfd?Z>6W!g%;XrSd56^BUTShagJ$mdZsoxk+{#Z=e(~hQ_u6em&Q&> zlH3LxSA&K#KRz=5=F;2U(_0B_wv;VhvRG>)aCPrDC>>+k^LFs``F&?Vo!+`~uyUV_ z$Q`P%SGSqn(Q?LECl}z)Z#ET{W-*023PELnX|KF^pylMc_;{JsxP=;lQYzXyaQI+yF0$ zMm~l{>N8bt#E8;F^g9ty>~rUZzf_p{L$DF9Kd;WrC&R1?FJIKt)@~M-q^${@5&lsl zDX8&GazK1N>ZjrBcd4NNPe^d^3XsLlfOnoV85SGrMYj6$5e;&R?3wMiM&EniTJ# z+c%g}w_hy}&mKJZw4g>3@kh5G?ew*f2lvtoH8cINKPuF9JkaQ#s zZuCc{wlN7(`r<@S02lpPLaDSD9WWw*++#B76#U|hV+3!a8hCLc+-N)7>yQ2ZMZ}Qy zMyfZUSxkp2abt9IT^gpWHN^(RvPyEP z=Iy|j!k-unw_2C3bCOC^_$S~<9bA3Piy1SIJ}G!rbm<4dT*mB!nTi2RC_L3EjrEcP z%PtrE{$|sEAUXuY-{0ADlNo4D(|Te4&|TF!3XHg8UEHH>b$`Bn2P#v2d{Lh-vqG;~ z8t^`z0T@hsqznUE9aN^ZT0<$?y9Nr4WQt%({k7NFYQ%1fnFpM69gj?oH_%INVI`ptW(Whl6m;_tk2u&RZF*+g04>u-Vet)`CpB~@$)oIHuXRHsR z%^aqs(12%M4i5+oJRljk0`sz^jA*0I;pVChi8Q1{;Vt)f8ipbsLI&E~su`k$`e=3n zp6!Ku*+5hkQ!_NcC<)N31M4`3-9rra@P4T2oSqoT2y90BO0rfJtcje+`j>Mozw6#e zMiTF0;%MCZm1Jp}BDTSxOb&W4ikRO7K1B@{3q>Lb76^t&z+hNX^&~)dbHh?QI}f<+$l_(hxi3M&RH@(rV1j3~31f^+b8=K8wJIhG+K)AXHV314DMg5;0bv4T3UA2DE;)YZB*# zuYFUQ8-r@xjk(bUt^D3|1-OQi#PndCh754N!Rem{ZfKoYFf8ctgtFdBSP&WtBM@8U zNWAsd*}mDC*KdvXd{c>0cgP(9!se`cUgr(R( z0>_26LF>pUiqT6%h(eWBG^2D4U5cfCfh7s>`q-a`s(Xgf~=GP6rYLo&5$r+JqE!D&$lF$PFZmiTJ`Yjb($p3lz% z%(>%HW88y*$rw|EUCSrGx&N}T@J){zj_j4x1rj}m5j@E0FZ)>L_QufmkymTts2xV`$gL7rbt--@=qs1LT=Ikg5(S)Sdm4%cw>crj zI-0r|M|2adNcZ}EeY4MAzq$O)RSu!ocdp1_G^@rYx@( zi6uWu(L?&(Iz%%bvbOe6^1Ax>QxUk=iGqJl7#ghJSVbMcC4n-9Kf!^b>xm4iC4tX> z#?rxy!NG_SU{SEGptz`H0L^N9Q#h#vl7EZV*FQ7R#PJvj5ut>-+Kg)3J-t7|cY;h4 zn!U#6MIl^F^KNUx;x~Uhu=tb@(jVkLyw<&3(pEMz)NYGPM@SRM_8%{Qz41)(2_E~H zPJ2RYca(-9bqt+OYojjXb6zxblC=-u|?+n;zm&u;LI^Z<@hIJ{Iu z&eotyfjl`83sK|vn&6y-w5$-${z`^qkd@6xR2x@C`YaHB z^#|%yoK)VY2QOU~7P=UiWgCVea#;Hbbt4KvLpq(1fZam?enVSDS~qAc z(gXnpgJwh6>915#!fzde)>xjh{64(hOmWItjGL)L8tQt`;7$O6eE%j0;dai`{C<0g zeJ^h!r|F!lApc(H-h=f)9i*M?&?SQFhe1$6fXY9Bt6S_`tToWoTsRV0jMM-|BG^VF z(u9U-pg-N3d}rIxLRZnon8@$LrH#rDKe+TL{HTZ_M2gY3vhgraxyqVIi&!MbAYga< z1c>z(XsQ)>BR9s)U4QZJ!=>-SwywO@zS6(yi#RT(L@eS3;xHutMqaH%DG6F!itnRA z@y6z*Trx$0aizfo^-)(C943mZAOV+q?$%||R7*pvv|3=qixGVSJOZKAmIV4bX?^>m z>d>&r6fQ!=JfMX3H`!;GWQEFcDKs zDPj0Qq)Y~c(x}uYLK^kEE8zZgW8p&9(be^TzFk;YdHR%ZE{5g%z=0@lSDRaiAe{mN z@Yptoh~mVoAsTML;idF6s2rVMt%o#}82AboI~yutn9z@sOD$J~Lt;@glpdfWBPj$j z6yix(GNxf@sy5(y64Duc);k|0#i)LZ;dQPUuCGsOs;U>}nh)hDN(y+cOc{5Gc4=e( z^vmD(ZF!bn45z1+X}QPLI#8NuE6{xiH-oDNa&4#8Z7Y|*Tv+H%{`%|j@z>8XpK|=G zzR5p=Q1Uo^ILlU))Dt`~}>BOHu{rT>@;$@21EB}qve4#$Tih)gnE~r0l^4G)M{hr%Qp+J%+K=sCFx_K_bwaH z3l7n;#~ZsU_~W@1fpIii`K6fsZysEVEo=vhmV5lAAS4QdG~)=gvQVPY&DYe2Xtltk z;PjT~yzDC4di3kM*G=7<2b*wlYyX{`w{{!FppBI=C~{aEAv&;)G}u_lz+)6@X<7=w ziY_6x#YW2bklSa9CXYW}SRD?eQn^4XWntaY$1a7(N(OWqj2c)ln(>vDq`q+{ii{JL z={#__6)m#KvWSL=I0~8H!(j#;XVcY!Oh0B?cymk0J?p;h?7-L#xv%!9zsoB7mEoKELD4P1Y!K&%hl%iPf0hgi3x$L4_SNg6w~s%2 zmhtRC;&@?R?akwuW$@0BGWoq{|*3)`T2ddGa$ZT`_qQQT`vpQKY^WqlxdAtoz4e`qXF6z zh@ipb5QQ4hj5gYU3j|-l|M_t8+lLFQ0T0qS`>5bj<_%_WT@(a3QG=`(Bq}Wtwjz`W zM8_!f(>^>+PtM1&q&}ltVlsXfoZ2Rn2knX7-;kLQ`Nd+xa7d=nDvb~XV*Fw`%Loa$ zntv#mY@a!@fu_F3Ck6P$W|v*wSTVWL4zP#(pa+L0F68ZMJTGW$s5#i)zB9JECCNi| zgzX2R1wYRJl|TXpQ^2e`g9${!G9sfCN-ssg#Zo{z6J$)O40qss&3pLp-G_~xv#rN2 z9sQ^flybB#07kGPX%Q`Whz**9t!0~-nZ3Xg+vy~R?f!dHC?7WAfr zgOy$;twgC~z?_}{0Bx7`CHg)wb5gh_beV9%LAS2-W0m=lS^Qxt%jC@VJm`K3w0+T( z^3?Y9G!dgFiW`au$qo?v#U7xmu0^VZ)|QZXd^Md?exGDEdWCIu`>y}z;dBydZk3^C zpP*4v>OH5c!XG{U)X z8X4y%Qjl)ItRrvU>7Sc>Re0q8AbZd4*!JDwzaYpmEg=!@WdPZ_1Cx${;7n>pw81Y0 zX2nPFKm-u?qv*!Jj{IPKGCKSE)N8=)@o1?o7z_ug!;x{j8`M}yUt%eu6j5dcy2XTn z`#{}{>DdKkQYg=Iz8bKrd~s<8o5?e#OrwZl=(KWupcjE*MKWt4@E$^HYc3B`8JXC@ zTU>i`a{6fQ!soU)-uE-z^pRH=E?=13S(KmGnAtYbIF1ADlfSw>{mSeJC4bRZ*!(kyu(ONW|`9NPC$eh!0ST?1-Na{F49b-G>`5%*`D?_E$tn z8&_+@!g^$3DQE;YOd6nz50|t72ODfk46~wAXiz2kF42X`{4Qv6&+67!4_?3e^Yow5 zl{PN9iIIdwY5WL0CJ)FY;M%EB3Mz}LREL>Ou5^zUZZTU$WP5e1q9`(y=tt%2AdMOX z62hP;c0U;2WnS;%jLa^l9P}+hP;{K5gU|>4B_>0HVXZ=lm~o3m+WWYJSY;hc1ielZ+d#=<)Di zJOjiCvY^uTo8cT~$^J?Oo)U&PVn76EEybD{o80wXJ*gBg#yg7960O>+GVcWjRGwvT zklD!X-y|x(7fa#x$jkbUWs(NSDQWyW)2HHH_NiB+U*&xk?`WjWg}I}{-Ta=M;P!n{ zx5FNrXPz%CDT>?oQ{L^L{xztoVjhUHHx6iZrI4X?ABoKrbJwJ^o6T&su<6`-8L6Y5 zjzozu!(n?rK3Oo^U0Be6vZqa>AQ3{AVwvt@i|{@tTaURal9)5V-eC~wSI}rgER(N| zG8kE1HO~s)ZQHl1`yaFC@CF>jO9keEbD=gS8z&F2L)Y--3_c0$4x%>oeJ-3wDe1_@ z1ZUs5^XkpxwXHKx|C~M6cT4hA!GADLQjN0_zycAlUWs6za6^OyuadsR$t9(B4t4q? zDa_O@{|8yqKNUB6 zPg=oE;JZ@zF6pZSbIQ<$4yn`O#U+4(_OUUecqGZ&3#=0)bX^X~_8Aj5!rKKr2?Na#5<{j$+moq=t-1 zBDEI_FeJx%f)~cjK@?ZF_@kn^fz=S<>-jG)3eVOax^w+}{h4js^IBJRuj~%5h4T(5 z0k5qr;b4SQ@BmaT$~JJr3||tzq9r1Ypznb9sUA#`TI2}7+rJdX+}{0g)$*dQ#;IBN z_?ozMmy>TGO`pB;s$hQK=D60jnZ7%mKX!cHIC*z&{PMS*1vD^ux%QXh12ENmyRsAt zmBV0!WgF@3sAZB*q)2+%EwR*Bjs&9=7H0x@Ub}?RY(UkDjuo5iNDQS>B<+b5oQqWz z0|NHMt$NFlhRzFHyL)c5)^h@hh|EH(tX^L_k(mlvNk+4#m|1~JV;!wE#jBU1So*T` z&hL&~dh}^o&&%gee;ggY^Ktpyt8Z#5wLl-g2wk5rO+ z)y*F;lQFH);lc!6Sk>{Kmw$X`c8xsxw!7`(S-$1&SkxF<{L$S178Mm9IMv$rz%p?t zZBWdNBIw$Lw%RSZXv}F_z zJUA=`#!~eGFI%Ga8alPP;~0P=jbx$*f!Or=c&__l zJ6TnuU`Jys_S`8dcye9%3f!@LJa^yzg`^|lr+X(GXYVyt@qd$v>!_*zNI!|m@1u#< zG(4L@2+06S8KlllF|@(&4Gdw!vr~!7s8~8v%qoFv?OZCCquMJ#=$o?ZTe}I@`5CxP*(m9E9 zPyh4!N}H^9%fh99PIvHx8I?${34W>~vkk(MSEl& zs;wWKI<4T?L|s%JJ3-PTS6JOD8Lc!$s8egL65e+W2+y-(bynHhT!~qw>3?`*>c}KzH<%KM5DHekRJAxn~ zHQ2qF<1#i=TtW{AgJsx}{k!_l*W8|rMw0>xH-7o1>(5)8r;|G;hw~I+4~`ko$Xl6c z^0H{I-0+DSYScvFV>8#2q%dWBz6y`o$2Ug^V@w?hxK_lad z?gOLqkD5+z+3tD1VbC*Xi8>WDx2kDjoh|=W%)zYsqNJwQ{I0fG+4@~Trh1N=X`s*( z#3$51-mD>)C}DQEi3IP9SFq}-Xw6;(htvWkIYQV{u7)UzCspy4kRl|Utk6^Rlx^!!`hxV)fBiSVvRL+4V3YA0AN2I{0DU+tNG=54X;Sx7|+{T&=}QNu}0Bew=C#~MWa7_ysIi9=Tw9Fp`~I{ z-qf0udog;rY4ogW;X*x-FvyPK`!d+{95@CmCS$c$pv00zRAPX@zcZ*bFtZfVPo)@~ zIBf#Xg)0pga}K1qFhn$oz((X?L$XJ%vI7LDN{qgPfYn}Q0|UCcOarX4+}Tq_>kriu zKoYi+3y&u>V~I@p3QcHTpuj@S;*l{_$blw1VY#Mocn+j(7zx1Zz;c(n;n*f1vNFBvxR~BVUR8tHiE76W$ zKk57Fd3pO9JkG=@ys+iL=A!lA{WaNC@G2?4z2TZ)Am2ma9Y|Tsi$Ee&;?T%IZ}~8c z;ZINjrIY#`k&UuM1wDEB_Q=aexszF=arak_N-LtivuxV+pCg-Jt~5_&M5}(uo(-8i zm$dxik(D#u4IL9xzfL&DyG$*L4tv(WgQ}(N(WrbQY6u8ucHqF`*x0% z1m8(PVSzD%N7vxAcyd?@?K4%j!>E#H5utE+FH%Dx=o9(($rz~^kAk4j3LnSj{vMl# zA{!8;p#&f{&lNw;G!fVtBV zHQ~lK6&+r^V-MZ3-H#c)tlM?rk_kN-OWAwA_T~h#E@QhAy^HieHTB<|IV-&L`PQQ8J)G{aalOKR zf+&<>Ela$RKwd;FvJb90+3GT=84&%rm58QADbbc6U%owMpAC1+=1vxLol9u5fcxFH za|b;?Ev}(TIJ?0Da&vf17m}VXL=P9my~>K6nsPa6BrQ@)8zrTV#x=$QuPLz(bXhh( zLPG~31zIoM(2~Hz_py}129qBm#V>ewgAv$O2>x`{F@ZZ2A83rwHHxrnqHBrZwFeRF z1PYM}?zd)x=w>z-A*P?2zkDz2lLP`!Nh5+DMx)Rj3kkeSXWj*$9jhEgny1|zWfR=6e}D@9Rp8_F7RvOvN6S0doj*b!n~u$Z`v z)Qpk^voggjmeFWqI|=w6Ybd<>-=YY2$`IWr(e+6g+76u6P(vTyOWl`yWb;60lgu1t zgYyB#CA=2~#p6nyeIwANEqBg;xH?x}{XS+A+MKwof8@>EcQH>MFCPa5JGpO`z*Y^^ z2R4hUsCuCms|aDn?j@Aczm4CjLBs>6G_DevPdCVb|H6GW)I9 z|9Q7{%O4Rrr%e$#r$WA~$i3+MqwB$ARaR14hrMTSzeW0is7*VQxC5vdfQ6fgPMo4o4DQ;I!ZmVr$l_jv zK0b`7vWanG9E9jKt!XHj9X#2G0plB`TEHIQL*eXBg93eL&$e%xphUu&Xv~t3?3d5M z!1?{@@;w5e&vy>_b>?5@ zR*}ap0=!Q#aZY~!r=p96%j|>qX3BCl^yOzY=GV^VWnBL5)K1%P$rZEtUD08CX$iN= zmaX|B>;r4rm9i^_D{7}6Tr&pkN3wC!`{E_Qy{6;>NfiT226=6j2p!6>jCyXrCKQ_> zh6VDqw-EG{jxxK>5@>5HZoE`M4%k`()VHurg!toG=-^A{{WVSZ~yLq4_bS$Ej8 z$FUdV^7GCqlB;$lwb#{1n;gY-KG~B-AG0gWoG;+&gcUxJ-lCoO1d3y$?_!}u8^Z-- zvmq?zUMK~mxbn3D@uGi66thDz{17535=RyIn`$KoMsa7uqufIS%L`f}c&Oq&A!->uABp5`-@~1DE zWt$>&SbB&=(Yv1tY(`-B!S#lv6gOf~)z51mZ!8pHNyzAWO63V)mJW2B+xq2SUGs1s z;}Z<77qg3pIGuCpZOn^J&%Zlu9-Vmf+GOQ>#kGb-8x~8%i2jHtFrh)|8;ykE{6ccd zXu&+bzKxPjq&YXeeY~1GSKFH9e%Lww*WZsGWzI%+6ouT&;<+}5Pt6syzlh1t${KG- z?s%3FvoXXZ9YWslHzYSPZ_{$z{{X!63N&)GP074Kwvm~!Oan1{x{$V29W`Z zl&BPVC&ZTV{UQ8VbwUp^&8LG!$_Co&NiGa2pr0#uQeaRbv5gr`ts_Gfr-0fz*Gu$^ zrW<~dh+q^AG3(5pjmMi{uw~I4zRo`ZeIr2dWM=-&!i&g`b?3GoQFOI?LA=+2<_K;e z30FQr)$gtpR+s3l`#oVqID*9*!-+FJ!3}=osxyNx5B7_J(!uj$&+2>kD{@ZV8`;Ne z$hX9tkL_xonDb1=E`&erYO{dfa&>ez%@E2i3FU|hY_ZhX&V!(>S^_alYqe`wM(2J2^S&JCO~vQ70t35B~V`+yIPV3nG%JMy8BDkooPFslvYw z&YCAdS?>O`XsMb+9V`j7denqse_r4?aUa1^%;3R>G9|r~YSmpEjf+VrOZ6OnyqpXA z@5uch*4&?&_IL~8zAELO^2+ zQ^cr-12G_@6!)|b(-9m2Vl@!OPT;TME~%5#yZ?10uxr2`giFM!t(n~N*FXL^r`9(_ z3RyOIXNwLVz=(c-*n&B5*x{HzyXF+$^=XjZ$8d^BSF9ugMPAYNt(>fhXhw$Y(?GG(gymK*vj*IR04nF2Qo9b4zW#msx zM0Euxa#Fcm2S}JiA~mN3qS*L2ETO^x*>Y@&Ysw&=i{1F$}&Gl`4}>ghk(L; zZM>4oPgoj@iTRm0q+tIi}+7A+(4iC#F3z$T!e zq)`SDyp_TN=C4ZX{x(vuq}27VR6a?PpytsSFc4B21!*C(dQcP{M1$*vVo;z@heG7* zcFzqDKBM4_lwNlAzVjb0-@Q1&Kg=%e3{K}FX=RQ|V{@zT?3r(p&3A-Zmu4Rq&4nI- zNQ=$lMNx}3VT1-94jsa$(eZi@@Y^%9AS*NcCkK*$xa zD+WV=j*`QI2jEx^koV82TLbvzlb8AQR%*_dQb4XfB)TMpEhLg%D0}GZ1=|N&cYDg@9Qky{wU!>yGQmmS&Ix(g$x1N;12+1THpb;c50}eQv zD=Z*zqwC&dAv&a*!P4pU;L}b-)->g1C;e}rTAa6a%cJlI^EC4a#RT&LdcE9&CVIu8 zhrzd*SC|(*f8NnJE(s737K=SNo*@zeDMsJ*MXqAgeLJyM}AUpw$Hr9N)dim`? ziz1UxZZ{OfoeEJXf4z92K52Q|ql)(7rizRrN;g@?X~aGA+Zg3Kz-qKb+*Gmw9tSZ* zWJ7c)Xd;#vA;TEpEf6aVMTZzVmU6GK)2c--vPtNE|4?V$H@tz_a7s0 zx?#vTc~qwj=drsYa5o?<_#%0%LdVh-BmMcw-(N1DM9QkpB!3)!>D!btwOd9&$W4(v zMgU&}n>D@EwIHFLxka0IjK>Dh4qGgfh4rZ@W}pJGBOoyWJRw)0jRzFVcO!q{`%@A zM29qSwJyO5t%l;`6Jxpa&!>MJZP+J#WS;!$vgz4X2&+$gQbzrPfTZx`X62G84c5SS z>d?*2)e)<=5s<8FJ{XBUydBZHpvm4GanFLof&%sZm@(HnJGJs0J=iV9tnCNVtep zuheIF66IBvg2*ylVkwz{aoWh~E9l@&040>HE4MW#_Q{vjVNeEQc_l-&d0+C$=*!6; zJYZVrTGm|<@l2u-b!uk=g|_A5Kf&ojK)m>_(e_?Oor=%sb0#vBIC(^DX2ptTOrl<- zD_trHhPe=9+VM&k!u4s`%RgeC9;~RXSlQ%#-gq{)W0Kc+zq4^y`-6$}+{b=6`Bj3~m=NK{lRe~Q*q`SI4lk79m{Q56jSH+sTNGnY3>%BD9MWClIu9F;27 zKD}GXAlSp~lq6nlgCEiDAJ)4I&E4fZ_XM~mH?I1i<@=G@n0CjriK*FeU(#<$maf^T zpd>+EMqE@#4JS;DVmT~ga*ACKq|q203=*ZGkSZ(DLJLS3=aG>H&_`Stj0|Fz!T1~z zk?jYIh6;?CWTh`y^mJODM&YComl09)C1sTu1n^G5!FyjMSS*JOz%dOwEHLJOu5(g?K2UDy|ab=U4xDr^=fXn4cN5D(?Nso{YSbH8o}=bmYoq!;X^t z7Ke_J=8?fjX}+=siHrz30tgU@(Cg(C0*|f+*ccM$hhI;ys)JKK03i%up@{k4}>SdWgs{lt=}!+4YpCw^Hpd3ctL# zzfUl_u`P`cnhLE)eFKhXs|>akv@Q2f=dLPJWyb7FvOH|$E+RK6_X&#!K=L`1$rJ~Y z<-JG{Eei#<0-3)w2#v|``oFwGI~5yOZpo?}$vXJF$oD)yKQAjNFU$4+IC}T6Chqk8 zKN%-%5_ESm5-Pa0lQ_W;g4O`KTCGVsVRL|*#3Uw&N--b@ty|Hx9@|w3zfqccRirBty{IV_VoKbe*X31y1bIfyx-5^zF)UdNnI*1 zR2#_aS4tbE9>OKCj_R5&at?x1p_c?KKtf$eqb>}FC<1YdQ8^QjbF{vTO~=y1Lqf5V zZ7&XKS6MPK3oCbn-+eUiQUMMb?`ZVo zaf?6^7U<1NAT+u#%jkSpVERpT-bg-8klmwwP2c(-b$PF_?z2Md0YrTBY z;7UC)g^M4R=Drq`VK6@t*ry9rL~I~p=g`bUG`8A^v1X_Z=crP_$kp%v_v3#-u#tBA z+qp%uFii&3%cJRNx~{yj#64}v@xT4&vVP0Z<{z5AtZ=9#wA$p`Gic(V))uMBs$i}v zDVNiAl;gB+1+v~qq@tq9Ta6T6L#^^@Ur+uPzv0?e2qxB~Hsw$4YY*Gt(v~VH zCzl+swKWYQNQp>E;K6DZYJx&!_H4=>0TKtO*_a(Fv7?uAW9;Yh{ML=`ch5zAVPBZ= zAR`7li!)c1QO-Y>eh^MugaSE)Rke9g&7nam34UTu%h2f??Y}oq)nLMNt`$H6DUU>BO+QGsxA?}R8=L#}C1!Sn~ zM291enQyIDVm2m*C8_-D=Bp2`elYJ3uS+>36-%6x_thbHg_m6vCFEDEp{#>bldx5H zzS{Ns+aEVhY#m*k|N57_7Q#C~Z%(0@IB21!FX~;LLdx`q_|Z6b3PUb608r4rW8LY4 zxlN#G?$tBR z_eB$@KXtYBCiY#dSDre)TAVR=H^*Z@YpC!BCr2x@0@>ZdW5Dk{QDC2)t5gmqLR75N z*|{#A&V2>e84%$JC&2=HX0g#jN8lSk!%@;XI3bDCjhV0E6KaAYy9mP3ibBF(TG4cg z#4~N*^B7H1%p1;ax?XV)g8RZ? zl&!UqnZcQi>ZxAcs^;w2G#EpXrV}w9NY$sA;@{l9bM@Xf!|P+P?Cmo*Z)v^uO2#U) zQIM|**SyAc7U&%(Mo)%l0PBLJ1c-|@shRvK>1q(!0UwNVlhNA(?@=YI9BYetM-Wqd zuPS#{QJ_B%;rNcKa*MfO3{T`6#Gsrud*K>#8&GauYd4soXlE*fgK;Z;o@()$w`ct- z$>0|OIg1RCjIHxFyaSSWc3hiQ;ni^+=Z-YL3M1olBcFVkSkP5)MpmAsZIf2hP%-0g zuW*$@?Zvc;>7+mlOP2D;aLsYy&%1t#95Hz#U(9R*cKW>W01 z21aw+IfOjyQ&kul67s_&iJ+zZGX|h>A5&8s7OA(r9JLmG%|s&!$M17Ixr1 z4%MG)XPMNY7WJOF&l

^S8&2=ad%=^ryPXIxvWl$s-2udp=#EXB9DDs}92Vrj;`c zyIWpZ`{&+|4WpyNYjbapMmuUxMSLHNN?Uh}4(Zbx_{Sx+t&X4|-AbTt4-(hbg;gA} zo#ycw6moK9I+M<>DXP#9;DWjhIbV=hhkdFzbz#DXqJO zwO^O@o9O0hui4IJ=6TZ;R)?1$8S8`&P_*$WAIYWhvr0n}=ys9>>Jc*N%~eLS!z@{W zgn6p8o}U{Gwj4$4JR�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

~is?52&FzNClgy+6o1F=^hxI-%CA>02O}a?Y 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

}+zrT>6+zbZ;lkYJjRstr97)W|KD&o7L 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 lbwO0H`+xJ~(-_oGf%(se(ti69>H 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

  • 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 z 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 z%0D$P9Rl502Lt_S0I~qj*h#0B{gip~1uu(2%B@=WQl>FVoN8_#WWL;Y0s3Xv$oSj$ zqRSDs+j2&SGGxJk0;h8ybgG*$IBK->U_U`OZeOX$#NXC&!%;jtUR{#6Y(4 zF%ST725un`z*SQ?@-(&LSJI`yKCFfZ zCf@bHSYGgDRZUH5TStMw#aN`;h_l}g&{D3{GMezUKSA%ZZ+O|hT|}WFPQ_A_R2MW4?Eh{E>cFq39v$a-?iDalhDZekFB5Wt_b0R6QCZdIv`yo~=4X zCIyy{WJJ^|uG5@0-0|n&>m=hEdaNkAKm#HTBPj>B1ZO0 zJ~|L?Pe$NIqL$x7O6Q%brx5~eHX5)hov@VGI+KtywM9omDlZA$&B~_Y!31Q_E~oRx zwOsI1)318xoh>okBsOgWAF%paptwky7)&(9*{+5tSroj#rh`&gX%TS|H||Mk(7Yw* zZVzQf+VxteCLaW!wZw7x!=FoAo&9_S7m*(mm0GDjl>jWt%mGps8tb=SLYC8xf;S)I z0o!yCHA5dppE7LaH}2R9>%}V)FB;4Tmm{eIBw=SS=h{bdzu)v2qeN z@gH&H5HM-*&@y%n1r~r36~TDmhzzpv55D;L9P*JU1iW)!ndN&Q(##y9uXN@i4exeh zFUXh{7&g-zur28o9}sRD%07Ps2`Y?qUbsKcl0>`u7fYJ;6BX_~iN#P57<%W%m)54zm&JTNcqZdYB;6@;q`I z_U*)3REvH$-whiz@e7>C0NcHWy$UM~+-}S}XZtBEk}}-mHR|&5D#tt9M7CBcC%=qX zE>%Hj%fUb*o8N1ZJpF0BL!diH=>9HqHP!B7AWN?p_pHL8t*LKzOpd2@cx9CNmX&Fk z0^BGD2+w*)ugkZa=l2j3*-Li4m0g)&az~Cq`?R|0=u>4zgh9<+XtV{(@qio>IBI7D z#8B@T$veH9IM~03-)0t=*pHV)7Ux0CBqllk@eWf9Yz4IMrEq069c4GP3NNLJ*u|mJ zW2lZ2i>1!RnRQp{GUeG(Y~b?hww(uL-x)T~+r+E|d>ldmZYR_Ys7=oaLrIpCD5h(3 z_?qTtzL38Eu~*pAp}|}RAe`Vo_j#MGQ=$>Bfr(g!Ce3#B*Kv~HBD9;G%5_0mhk}Fl z9w!4dVEnGLKs~D0yY!X^?^71#1>;eNIBD;4J;#YS^)*=~OeXNQT?N{Gb)rhgIFz?{CI}GvLw+tuwXQ5~oYzEnHcPWP79uG|xv|8)Ps$|eHd{gy|T>95H{QoCQGv0VlD=O0`nwhHlXsucxS?Xt@(~MjC&1UYQ zpinD%44t0s?HU*&UV<^`ulDjeta#*lbx-))cZaZ+&~+6z_6)2n6a{C$n)z8y53wl9 zg9@lPtiAOOcx(Dj!qb_b#BFjQE%wMZw+yhROXK(I2<#%|q)n?f$WC5{zhwzF#=b)Z zmb;zbX=%jZee$6a%TSl~Kz5wvB^Nn2g4 z^`x~_W7S7Lhve)_3vwYuO#bzaVdGhms;K)&d^Z05$Ws@AepPlFN3x#c6){YeK-n2x z)uJ=aoZbsNLK_qnSaQ$hDlE8s*h6*%omC8i-_i)aO z*{*7%BDrjzY26ux)MGn^?adx+TFDk1ibHX_t*fgm3JAaoqZ4FaJ4%nIpd&YRIfzny+D0Eu6_qIB)Y?`5N{;@--(7)BRB+t_Mq# zSfmkPzpJ)KvCM%B~rax6)p;hP~dkD!UHR9STqJ) zr9TRI!9rgx)Qx&z&AWlQoda#Zj23uht~*+$L)1G#tF+R*c7PxHYm8o z(X0h9d1^5qkJkcrx*r!w)5Kz(_CQ}gC^R!FYTM;~lLPOtw>qDzPx_q#PVOt_062Jn zAh_i8OW>0ZH$oi-G1k2V*U<;eg@a#-Nlo~6_hS8?OlO3PE3#}oL4UmLC4_>H-}Y`7 zEDPYh8Rs90_VFgJ&wA*=t7+=Z(uAnc%03s@qQKab04lxElyEHZwuyp7kk6ok|Mg2& z!)fO1_x0nEd;q)ha$C@`nmTKv_0a)x`2$c#Z zwTV&kqx-|?+duQMB{`SAm3)NI1!ekXr^ie6P}^PR60ZN=T7F7uMrmxE#9^l{<(EdD zo>QyALGj86u~e!vY^(Z@&)Z+MN3xZ4vQPj7z?^C*(EhKug1y274jW4&P&gaac9gsp zLK)h2&=rB^eQ$Aw#LRWD=d@`@uGFYgp7P+dXBed@@$aI{m&e$8ghpjwB2!(*F-!G6(4z5hx5lE_3nTFRl z_yod|Sa5uz&P2kv%Y_5fp)vywYEU5klHWPTS-4V!W$Qs9!6(TH3nE5G&Oz|`^JvDg zZM}H@Xk2|tYzRAThldQ~1We+heJ^686MkyiMMQ890JlF7NFzS3_c%|_$Fi5)I_JDm z=l2*6^zWpKgjag~&Bq`VjBxhA9CsFywxW;-EAJO1Vlqs z(C-TUrui;fa;o0$`ZV|pnzsA}t}niQPZ%m9gdQFOsOe6TM=kdK-c z@!0FJx>6)4!~ywXV&V?qF>xOFy3$zSEBIn@Kz<0NgH^94O`ctQBKuQP2!$N)p1D-k zWjwG!^fwb4a)Vd*F=sV|(8ciEkjqL!q>%c=>&qzMwH}g<7}SOm>OjQ$W2nFO%K4_y z>O=&w&-r}!cdG1*j=>UM8{BWHhMInNANjTsL)1! z7Bdmz)yiHfN^U`C5uypdn#uK)S`-C9Oqg0ZGK0RSkF#qSJNVC60-e*ufa)D8HWf4M zLizS1K+Qko@a?#VUuH?<7wa#OjlD&LkuN*x2UN4&yca_|?%1te4$HDYT=xOD<6eV* z4IV&ihaV1)eGb$3%nkq=c(|?hDJ?vpOkoQl%{~z;-!g#?a$oxXW3@_IpTK_`VWlV1 z>~h`A`8?)jvjOg9C0^mW)a6!rgbWNY7DY_!-eGF2?``ElaTS2wU(VaTAXP8%%LMw} zXn>Szg+xkJ-h;`ESl1i??FgTlr~#yW(-3G*y67}EiuRO;&}qH%5rQDUvt9_apoNFd z*6#QSPUhc3l(MEs3llZBT4AM>79ar2iq3m6hIA#2obYTDksFpRZCHy4mDMWt#Xq6Cr%0{2!SA7k zILXju5giBzb`z>S6@5nqe<|>&QemoVQ5CIY9HUHk8s6fDw5#Tx35r8Pvg}fWhI?a5 zC%W7%4elaWH5j7U72DacRn5x33X07Y{^Vx8ix+;ZqA&K0_YdnteSTo1H}ld$M|BF6@R4y;}a)kSNjCYSb|X66O2Z z8^lMHo&<;YCt4lyS>9(6jg%(te3x_V(XJwzK;KWw4197v(=XE^iZ6khH@c#-kfM7I zvA?ck<^|Zz%S9=7T{i->U_O7JZoRulTSHs)X-GEl6ZtY|P9dP5d3MO9IrR_q0-F^`hso*GQRqwdO zSx@V6LU>t=Hz>&U`mxpL#KFqUNru>L=r?gV?2&o(`O;Xvk6CCnZ6e0Fps<^Fv#Wt} zqiQ6K_onJQSEIBt6`g#9%u2WbZgh;!m@SDI77CMOY0dMlnP-)W*pc+KgLF8!^EQpq`ZVA1Klf?Hr+(Yqjy@e47j-U_`Q`3gX! z`IHZ-6|ChUfiU)V3^>N14i06Ew-CHFdgJn%8H?=Quy#4o?x?ixFeO%FY69Z zC4^&d@JVT2?i!&g04fyMK(~oZ`;9kj_%~*~AJ0O~a)o-sYhsf>ERNdxIVeNUDBSOp zRH)B?v6*mj8h9$^0p+p4wBGu!VP8?9yZ`#e zCH3a5{{-Cp>zfOy10TtN;QA3Lbl~;2hNcJyd%#il!TTEE!#sL(V0l~Krn2$r>V;mw z=$8u^^?K;nzH$ooeGwgvFEREGY>tj>GXHP79QaT8pJ6%&Z{XztknecxU*Ej_>zg;! z-rDyY9&z_Jr5Rr@f6cuOcmQi|ANh4P<<}Cu-^aqZzrF$B92Yt=^jp9GT=>^F|B}Bb z(d#o(5l8Ra0OzJZaAq1X815V__&S*Ld9(2iaNv8#04c}!B}-1nPJFfA51jX3->fs0 ze~WfB-=wtv;}^iH7K{=Xu=1WcYOFWlq0pD0oupL$*RUVkc%0u%n`RbRj4T(ifwJbq z0QCXwRQlq7C&8Mlela86>4`t`9m==W=>LZH2rwI?uSN$TQF3`2*;eFTxwT8H560f8 zTL!BQdD+TrJ8`YD9&{OKcR%KbGKH5ggrQ!Rfif&D@3L;$g9Qx+t8KXPnLkIn@mK!U zml2IuYM(g+a?gy*RSW$OK>4r=x_kqGPXcoYbjv0;kH=P(JR_E^&LL_tJ{cbXm*sL7 zh(Q4-x*N~=`+QdPMVI^_JXHJFHzy7Oj@6>Ds!iI#j7{3H)Re}rO8>aeEg4V04sAGo zka&l^w%>8*=2vt>$x-3T0nDwJGgpDPy~rC_1GK`RzrIOW==tlL_ImfPq~HI!k>cM9 zeB7)zz^4qnv76O%!0%_fZh!nriUR?E&pqbzWkL{I{|EG2z`7~9^|dBy;LAiS@V@_N z7p~-;5Dk0)$UNX&2^n8%g1Z0u<}NB{<7>~+^1r@$C+U6qhof!Ds2y;~-DE%wv{`+1 zZQwsPz*a!?I-rD=_oieNUZ3$n2nN>LT^w*`Gi>pHGoE49Vb45AI{?q`qt!L%_A^p^ z9^H+&Ogf`_%O(1V$*TAB-LM-4YT1;M#jhV^-#Zr>9gpVSBLL!VSt(O(b!nVBl6_OaXF( zyq?qqKEPhNkGkt-yj`Mnair$^7M2?I7@76JX*Q>u*Q_UXrJO} zd_i8d%ZE4g2FzKrv(IWSt-RQBrBOP%o|q9Am~8xc{Bi6LobC-Q=ZF1XZHx;)5Ys(4 zUY_qOF00tgEdrm&vlth21b{~_>n{5QuO`#p$3U&@J#wQ7+P010Y0=#j;$XPquWy1= zv3CoCw2QD~rpD2^V0Y>R>0+WYY>e7jIt5CGTab}%Lc(?y&>;Y2>ww-%IFtc4u!PYW z!WSNEocKQvFu2!j7oNEWCY=*I)~$HM@-ugZD=5H~pBgG?XrS{~!0W%3C;BbDwz3-d zG1DmPEXfA;H)^6^7G819TV0?nlPdnc@~nKP$G$kTic-4sB+0>MFNRQK2Fqs&J2H0# zPFqbR46r?pz0$6{CKCL^JyH^b6HjPUTUA8uKJXWmbqc!W(q7dkM5`{vP{8kD4I6v+ zS%Hp>yOh0Jj{cssT`-%Z2^#Fpm-Nji+y&Y+Gq1%YuIAYZfqL-9wbHJ`|= zE5F#$OG;y7KGi3|c;`CL+LaQmffgzNi{xX?U@==1u_;iP91lQQ0om_A(#NqNwV6tr z2ltaTAcMfCMMg+7q}v8+h9s04vxRtcd9*CvUTcgDWVb7_|4!?e=Kl!&JB7 za1T1}$%-Dqq?0s4ALHnbs56ahLV8lI+RIOLT8Dh9Vt7(ba+A=> zbf>i1pwJ(7<_!J*zcBd>u|=xqOVBx-6QFK#J&V%X$zN!P3-l2}yS!BwLRkk(zr!5Z zz#@v6bVDwv3}{ZF^kB6jlM^L#ieu45F-$%d6!?%r!YZ9%e1VIKp4om0Hl3?x&oq&X zWWPg%p%nnL*#K!$WS-Ct3GOJ1CdMF*0mpmJ4e>b4RJeP&E2nOlzaz(jt;`N|`yRzG z0J)3!w>*+nbSh~R>4Ik+`L4DF4j6D^pGWmAOZEsE%LtTLjCHww+<}U3!RL`jdG6myTu*hJrBe~4s=_|Ic-4H zwhsPDacg2um(67fBJtbYsSjr(&w;;HYxX~^F%xgyk)*ln=1fb22NIoq--NPhG1TRg zVBu_C@{SEYRIPj$q zu|n|jr(^_UM%~|mp*hl)4i+yNmUC-cZg0r*z2$=!mhTeX`*Fy-{@h$FUTx*~w)4Fu z6cWc@^gdTlk8Pj#j80jhQHf8A;-Cjr>%h?S?hs@RjU4%c_<9kJrmg_y0$6-aoA8#| z07GoyIeDfh@x7y&0fXU>l_~d-P#XbTx?*oukuY|5%E_@uw0_}= z9I5>f0u387c#t0iOo;-QJKP zHEZa~YFo+QzLyXtNCcxv93&E2#DWK0iT&7{x~fiU$dFj^{&I?s}4W>;eWWk^Okp7) zhRwIB*J3pi2(T`D;S^0E(Y7Qa|HKS;t|l=w#w=0k6msy&FG#^}drJ?& z=&|>kVZS&%vm0#a6c!mGR^15lo}@%0{b;4^XRi)cX^&$c+f`|kr>~9%j|Z3yiuq?f zdK0ZEzv!k9I1QW*l?CH;5FXDyi1D1Vjm|)Xac+ZJ$C8HqU<*^oCl21p zE8uSV#-4>nj~a9L&yEd1%QgPOIiK=9T+)z=@^~6Ha}k4l7Wwy+p3CRV`n~X6pkL+# zff7%6Hf|Mp0dpNR_pBXjEvOiE37qYBarlN8g+X@noO+k2srQUC8xw|?li&_6JACK& zKe2gt^hgmcsU8Jtax5wqddO>C;A|;ZRvlXaI;+J1Q;o8Ix2rooj%@39#bB^%QC54D zn7CG0=0HAa389e=a9bI%dCZwwz{eS<37dUlB}?D!F}9`L)4lwNwQ+?%V^>zNS`k}A+4t@`|@%>Oe$Gl~J z4cgJdmMJr>QDGW!O03&(Z>*86oQ3Lpf}OvhOZO?`st%pgyn%G)jd9{%mCo+m@x595 zkOl}yk&M{Qdk_BvZz)Aqr=j6}oy$7`=39EJ;Unn5Rt?D6hG92fj+1fO>_bc@eFUZ8 zvIS3{T96lnD{Tg!-P>`FRdX`|#Wu52sJ!=8+aUg+LI-xcrEQ@fOIU z-W6gq<+abI5q?$fvS$f74d`ZC%78nwwM9-zz%BIrYhLJ`Fg>_)xwBZC0)%Za4rC9N zH)V!MlTOpKt_nOS&;4J%=bB7~&=>CciW#Ev_sZS;qYUp&_{^>SpFk%dnp1z)#ol>s z(PAo-lNltbnb7C|UKlcJf?aFZVZVej5D?~P2TwB}tt0~8Wp%(f6OYd|OZOMZR*KwG zv6WVGd}g03&{^m_q7_&CS+9j=zV>a_PRvV8K$E(HH`r3@X2bfGp&fN`z?va&*e|de zlQ*(F-~=%78+r-xHN;o9Ql-V(WLtwLeHsS95nRqXqilr2!JbH2O>i*wj<%bbFbjoR zHa&)494t8z(N$#&Xsh|N{Vr#BfKr6cbHzgp?o2~W13y%HtwTd7lF!C(FGodiX?#Xr zRt*z+>%?$pzt<;N>c?B#y+;K~vD8|Gvyd_9$C|4vkLp5uu1qu zG)bSZuqwFSU*H%=Ae2{L_60~E!ifvn9;PWB9dP{#ol&99Hi?lBGF|n=)sW0=FZWEI zaF_KKOBB1|(#}CWry+8{rsE{2ov#h|ll>aAVb{)^hJq^|1QxLp6_VnlDc(s7+7ep% zl__{UQ~jh4JQw~pH4MOH6o;!8gdd}0JNmtXb#0KvaI8#XljbNk_{kOqZ&SBWd_eF2 zow~OYfbSLV@@?&24}sY9#gI7nyb)aQsyMUGb%33k4#&YU^vXRgj=;qHl*F>m!LB;p z=_2a0guf_{<@(!Q7QT#7zZqqoBGctG#t?e;oBwc=z4;^hWAJR~V))(kL?DLF0KuDu z0W)Vyq+{lRi9zUA-7&_TA1L1{7Bfh6UA*i&zx@H= z>d{hMv_&j_Sria$BzzzP7DIU`RNqC!W!pa_+Nkr}8Crq4^OT^?RGo^3^&CW&hl1EC1g!6vQkDmz6)+GjC>)yiPcUh2PhTe) zXi~(eue(G$_il(=uVg)wsjYyph6pJ3#DN z4mSb~Gs#!oV}dWV&d7jjtlS;KPd1p=z3zi;xkpY!SJv5FcZ?}drbmYa;&)YMi%yZw zix zLI&g={E-bp;;yr!DGYLW-p-v*@x?`(nf8#T028N(&+9239rtQKs|^=%TThjyA~8jI zxa&o@9KFITq*?EAi9a3MSm7!$9XtQ?_S#p6dcAFyOw+^s+p;hRn5lXmP$oq@kQ{p2 zHcsFiT{RG0>ppJ7HL7@`f^6$&|5L%K#hUlp2?HXq00~)l3l+8O2wf7fm3L0XGx`DD zN&~1njQKr_My3#@Cr77I6V0R-m~PEmRg@u*^iOqWrOT<-4?X(`hIgmhmgx|WT)UU$P2L%Mn2 zS&(UDL;=u_Fn>Nu843#N>b{S8hQ({%F4Us=5>koz;N!|>LpNj1p-Lp5JqNHgUnIoX zC{y_4%Ud1*>_D@t9%VNTY#@O`H;8B;+lHLT(dxd-7PM+pO7&5k$Z^-`3^rq73;=g~ z;TaYGanhUNAwts^rBuRr=TtZRiU8IrvhT)a&{7leUG>BZ?~+lKl7BO8er;Xn7HhTh z1acQRyw5$dj-Kig>z8@uuW#b`sv)fN-=5op^{?8@OmiO72sE0fV=}%6@ApE(Tg#}* zK!k2$fXj1?hl*JdfkiDtEm|zT^AEtff4Gy6g4+p`7HXl?z#-%aWh2AuK;LP%ep>22 zC|J|)72un`1DG))-2aY1d!vwLf_Ovb>z1U7eakG<<5%xkqJSl>SgACeYPE4RQFKdi z;BcKES#`!Q!7lzAVe(Yh(5iC?L0_IOJK6ku@dj*St#zy1=b`#bSdPE7=Dr1)F{xv< zV9GR{R#Ok|i2L6hCsw0fgGnG^SCtBlM&KOHI4=)G18(nCpp4jIw-KD&(hv<5kxgqK z*4)je0QLxH-x_hKj6xbmsVWkov8VKAq+pj2M?ZIYu$K>^-UU+)KeSdiVoppvZ>)|Vu-U+)O*P7$n$VYA;rGO78!s=*;7i zPS-X*XO0<&D1xCuE|}tym>8m&%K$F8FIkycCS;+K(nOQ3o)JV`a49p_3~;Nl5_QbX z>Sa+Ytw77Lti({HAV95`;=mg zb%LNqwe(x%V|(~m|%*QU4lof3@1!j!LzFI)@W#RK#ytPe|)ya7$K zCgb$_r~1fpocO5a28XD$__n(I6!tFrJf1Sx4sd2er66B}8hdvBC*MRI=Y!i{4Lf@# zj-T)(+}j6~HG+?y3Fdo(&n(7e3_1H&2vWS8AM&~qe<_ybz--V&A1WNO!~)(*4ZkxR z>lwUH-6~yowIt+wCW`Ns8W|NrNJ9d{q7{nN*5*DL!8x@Vn?jeOyN%I0^WxPlg_*W3 z_Tlr_>RHP2Hw&jeWu{_?(XOz6bc&3M_! zH)~4H!2lh4I_hE_kj^kLFR@`NUS4qknGep9r)4HY_^O_9&;fr`XkXUTMN;*hEDR-A zATpbgb=*`7=bnrbG9l0{^c!avl1r@YP95hR>y~8Rh~l!+)+1Gg$@{9Bxm$5&Hi)Rj zT@K-Q;}8*%r6=(iBzd;#YbmXjv1~Pa0gFO^<^#9PCd=6-)MM)ij*3FLr4yS>1;mUK zsbW#PFP=~1r(&+uAg-SR^Jtah;W<%ZKPL)C>5A4^~#*^|Jk0GrlL+zlS#4 z<9ZZ%=!~X0AkGW_7U*RIVJ%T45XLaAcpSv~!J)@aBQ);zSrbjz(FpO5+9X|RvlFJC z7KYEAePY`^d~xc-C-?Y$2#rI)yF?odyggQ;({9 zx4&l`(?#+P56%e-=?vw^T6;Iay!Swuz#!o34w)20M40&g6vH~<##bhvGd~KCq11r# z_}m%vqBK(t;#6ees`ys0&x-@C;Wi$ORP0^<6PL9D3q`50#oHc$WC8syEZ-Bm&oiv> znIt`mM6hA1RjbLRMapoVuXgffJ9zL;>?^vzS095eL1UUeC zd#gIDG;;XdesIVc(U}E_xvZGuDDBgU^5FkT5~vmx-gS==Pn>Mk#plI|jrn&hAd5~4 z(W164$F$d&i-;daZu2=vVm}sW^p+MQebQ_<_@aJfL(Ehzso+ycZ(YbyT zzMtd^O^L!E98>6itk!%v5mJ}WxF6xIM11y?5jRQ|)2_2iAsbK*ff|{4y!Aj%_}$(; z*lE_VLi)1SK7fiw^ve2Q*cwkto*~x)4{I{PZkqFJ;iE^$s(0poWR`^68zR@om4`YS zW(ca{Six)e-nEX+{$njtD)$tMfULBHFjNdF!#?pFvaS)avy=+YT_~S{t&@v1VNuBe;?sMRcrd zjOokYUViXfa2{bjeQJY$j{cQC`ZKAh#)C=WyB{ezMwIlUv4H$PnXa;;2?vaOp!BQ*Q1bN;s?xV@}E!V&$H z&We(gZ8)fa04O1SELqAg%s%Xhk z=I=fZ^E*|3@Z#1u;(b;X`-m9l<|iS$%8aEdCF0< zs2FFGPnn~>1|=!?1tm=RA0@yAw!yq@%681O-OmtvW+6Tyb^dP{)~&K}Jk*0M!YKXI zIC1A~%ojI8&u3!EURJONYY&;G5^M;df8`@&3lDG%g0YgJ6u<37%U*kD?n~V|7x9$_ z&TeqNUiPrFf@mOqLe-u8C3cFaCrnIVug1R}0ZjVWZ;{It7*DxEn0nwvhQ{Hy^U5$j zalIJvY|xr&pRtNx_uL+I+-!$Me2RXz{k;IMsi2Db9L?HQG7RVW`b8?@r26b`D~RvX zdI>G2r3bhd(}H!ap(JNg%2wbJ&Dn>(x3)*lPQ~n2zS?BSLeP1USZk%jSJOv5c7)j) zWsdox^Y%nK`}yX&5A8GtbBn+rlTU6y>%8rRN2G8U8itPSrwZxp6F zEW`;*=FrHd+3qR+@=zdH!W!k!v!kIMjb#;UUJtrkEe~s7*!Fcc%^i?;pT)2u`<)Gp z{nNJhqevG)DpV+{X?; z8dDhh4<;j*J}Gv!+3%|B6XmzrZx&LZqOC<^_+Gjnkpn3HHSdKFu$u~%RL%g)D`_Fs z4rKxSoGGn%7jo*s5=FCpb$=QY`ocoYUa{O+$CB>MKfMD!*NiEJ4Y0Vrh_gzN;8s?I zEoUZ2o71!5HC^o_PMmpkI8O&n6+9};lJzBDU$rD?HhWb3#X*i*ayJyB9Nr=C@Uqz1 zE6@-cYwP}~Mdzq(Zq? zu>%sl=3B;pRQ77k2kWHGdZHT=%!QnIcx7f07M+XfF!ST|bF$0B-D>g(tk{yoc?u`T zPHo(1T32myPr$jUu+Mr0>PsX1KhJ!?P1f&TYkTei!P7r2x~B7GdoUz#jin`org;U8 zk*%|AM8#6`#?0PyxkNpzI<8W+`lkk$#GTU`9v=rm3k@W8!=oK{`u|@YbG;zLjQcde|J^i6H?tz}z?F1v|!` z4F^p1v(-jcwx7ixAixQ6d>Bi*@UWH8HHhb?8d?@Q+4{=aSF6OQ@1;xthR((Ms8^w? zU#5=|AJqIwCj-BjrngZ!!`x;=hVw5@=k6&Q3R-gqHsDOcT|=y7JRwte**DlJ)`kiN z+Nq*eFVU#9D{o!6B6BU=8VCtaKloz_QFpYE&c154I)Du>Z1R~@(Q>_=D0g<|WuEtjX%yB{)yeRH74$Bu7m#khTm)3J{`_9vAuy2OU89`DzT&ZWc0N!0fU8fTYnH`rSJ zRpSR=Gx{hH$(*8RVs4yigGB1&r$-kZ^xfAdx2)S~BMh>!EVM7C+IBxdgX7XEMaH!+ zxa%QzdN4=_^?q7&}MYh)5}nDAw$) ztA-F6<4Gl_0^Eo#fyvy8O883AgEJ8yppC?K(TfUAs*mzzg>`3Ms_#Xk?~)>!T-74` z_aPm=>e&`~dw2atUMNAVa)rtMaL_KLIkC#ajI7<*0akp%Zmhzq&qL4})Z==od^CU}w(|qp zo-AMoxS;B+Z~50{%>TaCv1S<0W7^b+RBc|R?L~o2k;ItORs9c41B4^LL`4jL^jw5o1aKsl#;y|KdH@a*{bMy5-->tQj zfp6?;dK49#(9PWqtGN>z!Z^JxhpV!@u8@TeBT~<0EyG)W=!o1Pd?ZJg5|8~1G%Vq`5^sa85KLN zs5O*Vf>V2%why$4HJe(IYuDLH@fdVZXWB_e)k9D>Kjw21@hpN&()MO42ei|V(+(%{ z)bF(Yks>pq?WLamxKCt?U z$(TK}?dzpn-6NosNHOM?Z(6X)5F=-+*U_%9^NfTI zw$oA4+2q8M@@>F~MB+=O=_U=H)FU!NWA;JG_@*Hw_gDR)DPSJ#jD^o!si{aR5zGD4 z(mWps9tgiy;122lzRY|OvFMS0&*!sq*abVSx-WeLkn@Hb`l2EmOCJq7k87tb2l98G zQh=m{Y0k%DAwIBcqlM+Zk=xDwluLZ>Gp~FX&rLrx>lKGRsYl&^)2m7ZzEu|M|tq%bqR;NCYMYvR&ewqDI`_r*$pGUMy7pn4~75U%z&@^G@dpD zy7+p4jcJQ8c{@gTF^jG}x{hF#^WI`%yX4^98%4tVJXwXDWF`3jmULSBj&9E2(+ zHc6LZ3INw2WWr4@t=64rb0>4!r0Qnu-}HFWdGo5y{PWgr1B_s^{g%{}1LHF21M@{s z&$Kf)=w$wIzb`^2?i~xR%=AJG3rSAD+aM*clU?cY4iUxtyOG6w?k0WB@~SR*SG(6@ zcdqbvf09-Nll+dhJQjCt!m9gm)`H+K3sXX6p$9#}Jz*%G_zbcGPVSHP-R9@-5UnHNe@Y=hXUq_HUrmaN7(>rpOPVPZn_3H%5!vo9Qky7tHqYJx-)t`g^Xz_trMsaMM;5Q6fWO(1{Gm@9R0v{CMBq9uuxn56PfV3V!xuO-Me{sq!_-9oV>3>Co5+zmz1!i z(5(m8B`mFTO!)PUdE6VBuBwiuZbJ>QdNv#HuAK6WVT<( zzw@iuQJH^^DQug@6iSWyV`-3(kNB2`EP)li-4P9qN*wfD>)S{tmdF3wp8PASwT>1s=0)9;uOOIY+9 zcT6O&Lv2g9y)l0wbj^2N*sZ|;KvWRAhGqwLT>E19>k+_}wcIf3V|37;=qi^{e7$F$ zqZdi@9g%~@@?_VD_Vno_&2CH%`&yy;zUx=l36Yh%?G>`u>^c2&9kBh7)n~Bu$L_4x zR1TAMl_8~Zo=&Ee%{EGXWzMMB#?_1d#35gq;qunZLJ1=|Lj1w}c^w|lD7cd&WelSn zH9ilamNt8EN9HpWpxcIb_a2O`Tt~p-N0omT&7j5(LQB}Eq5GBlzeN#RA^?0m!Ypn6 zO$bk|;q;}+-q_i`;j#t*bkq=L`)h55!$dy2EM~1IU6M)@FfCvu#%VSyaem=w_64jF_+CSKS20 zz#tS9P{cMdR_<*_f3h7F>_*!m8{L{b@-va`h3OH1)>K@!`hIfj<&q~A)n&Y}GCNR7 zxNIe(Q72yWP(?V?1`^_TB*wzJ*K?O`u^BnS?E-u|gfs6xbkuY94n4NL^%@e&3DU=Z zJ|am%H2Q|5JnAs+JyUD5&R#IZW-^P`qZX;f(oR_j-+NfR3~eR5uj(Dd@^VGVv6l42 zg?ELUVPe78VbbOyGMfU6m=MjR7aPMK|3JyG3`5j!(6*0EjgXnZQgp#&mHr+Q$t3Rdw?+OQyg4U2qePwMfwrh0;_c4?p5kAD3}UBw3s6 z7yhRiTD{~4w_}z+2Hz$IrbtoQU3BB##3tTb2M+b`(6jSBVsc#{3Pk|DFOm5Tof)Aj z|6mzBqeoOy?SsZ+-9yPCaD6(6oT$1%Kc*K;tn1p`AG?}9s@sLU-y>3(@6bi1O$uvr znCKBueB=kss%X4vBE%_C44Hj`Sln?w?9lQ?^evg0HeLKZZ!O=gXs?v+QG)PUWoeR_mxWg zC1c(=khp+Gx18f<5G^46|nNTl|$ zwwVf=XQ2|g2%0z#+h_Rnu`E-}lpHnT^JM>B+@!A-b7C?<{T4!Mb(#-%>oe@|R&{@q zx3lu7hFgJ8=IKOBgf7>yYPjT&x0^U&3VRGUENo0+PjH=ymW$!1dwYZ@&_gx8ME49j z$tA!?-jf(gbh!BB2*MaCru5WQ&&We~J2siq$kewsoF|@$7U`Q{mqLjSgNrjP{fM*3 zXfS9@J$=I@lPPuVcSwbvd+jUz6kN4k#g0CZ^4XV65`1X?yoF2E&0Ei#0USe(0JtIn z8Edn+J)&FxIv~rMEyM>&d0n$-F-#tMYL~iceIKFI-z9`b83xX82Q$34TGo5ZeR7YR z%=X7}nMRoDWGis_N=obZJT;6)pAg1`{9h^exZ4?4He8eOHGk(M3|fYaC(rlTbS`y|MvcREDvxb|sJ4^sIyz{k0 ziO?KUF9tW2z^GWnjB0a{)!)`9+-5xV$+jYTY*)_HfUAN=qHMoVTQ=(vq-j`gsvK%&!mq~v?G zpd~EjgGv4Bw`bjQKUvR*`-KW94iQ7F+bEzJfbKU3^Dp8PM+g*uw!?}>PqzjYqage_ zRtlv^;I*D8=|0Cka<@VKbSB0(ym|e5FQh$Ixv$8b9^lzlTW=^&b8Hz8nj7axUXu8` zB#^ca)Avrc-p!$7XqlxHnp?RJ>w!gv6t-8a^Vo%IFK3^F0a`Vpj*=BXr4`@}lmxAWPHeSsVooTYXg|mN^B00Y-hv+<)IK zMb$pC);GdTWLC0-E#$^xoe(p6u+tc*^)EstF!d^ZwcOnvUC|=XxMdwxCPiT=AncFt z5S~=o@dz=iyE-&~QWckT8ooOg%S=M{pYIR_u_Hy14xG9M6ju@@vM8gW zM}C6~BrIX7y}DB9{TA^&hBd~GwGf-Lc@rH!rSoHsPoPI|&MX?UQXuFqoKPg^*=Z!^ z`BVlsRrMDHA3L#74T&O$VF!YBmMOcYNN<7Q5yjh~V$iJZ5!#*)@`Y$>LYqSW@}sI) z;EWH-F*~JnF^HNWJUcSgT9;b^ov4v=+PsjyqVj7N`x(|>%fiHiV^+{u#BK~dy95rS zr`{hmBc+@y6mXA^OK8-DJSWZPGqMHRbAF-vm4=AIs@pqt3kk=W$r@4OsELEl`*~e2 zod4WG4^Hy$K+IvHeqU*`qgqH1Spc(q29AVndwlm*4=ij=fQ2@)cL|i8Kp6Y1`hr04 z3#t%t!otMa#Z$8^XCD;%Y7z@*i6)Xw>84;TIH?Hj`+vz0&Gq=L)lu__Klz%pfO+W6?7EM)ktE{wzXJX zLie}9-H#9~3f1D19lBTXw6a6))8$vmvoUd0hjvxvA?N@~Z%gNG-H^{vTDeVoSJ+_+ z*UCnSru@n(_H*=yUW@}L4Ie^K%xsz+B+-h)WGj4eR#=4{>7Va5aYTduzMLqmbQvmb zKrL>_J*RFCe&f!e;_a8+(0KBCvt3|-E_JwC@ZvAVNvROh+jB9 z&3N3asGm!s=nICtgz+<2kVMiA6#M>eBiH#O-D6_&&_}H}Spl6?QdAsDB3PbYVSMEb zoLsZp!+iydBnid@cT&n+YCl*YOHYvmDBD36X~m(}+V>NTmzfXR=%)dnPbjkRf&tWN zEL=>%JwCYx;OzFRUTo3e=46D5M9GaZgD9v%hL?HY?X@iQ4{9);0DLpGx@W47Udj!B zhTRgv)3*y_%`6hd=1W=CIQ?ZaU%>|`)c<5hLZ1uut^GrbL(67gQDvB2v?B{SM*4GW z0NS}qbW)$iY|yu9@3X?DwyTZ0)Y-`sVFjUMq4TXJVNz-tkK(_5nuwa;rEipyRd=W> z4IA|oCrY#JMXjKKW)Zd7L=+z}DPAb(@|0XNk9iJ7uyoguK={wnR=r#c-VBrLl{Zdr zRX*k4IypK+&96!EGkK?gp{rO?nZik!IX!&w|eFF?gl@Bbz$Bwbc`>CEvk4tFFMST9v=G51m8?&sCxd~Djp!A@vO0J z&)JpG%LV@}1%EZYzD#(6nrivt@Xqp0*-*i~NITw-OEH`v?bQA=KFc_d(<=Hc>r#nV{|-CZnKaBT zTIw%hhr?orqn^dYk377bigsQUoJAA1bFxiR1}M_PXGo;Ozd8xB0YZ7oa~n{fNs+}> zRmCiM*S+OKc0((}I+&TxFX0L5rC_K&Rq3#Ld>JNPYdobuBU>*7H^Eu)3i}k}Nz{7f z9x{F_W9Rd~EbNeq*-5h_;vWOx`TfcI&ikz0eAZtPlqzGV$-1*OUt$78D{6B7PG+aHuf&(tO zkK${tQCig<%Dq_ZdepYQ(jVmU-Um3ww~xJ0)C`4jwMhwne%`JnE+ z$wuucZ87b8u>u)L*I{#3l3me17nlHN-=f92f?4-h-&TVs_?N>9$lrX0P~TbU^K%DL zooGNv`9Hsc4>sWE$bwJkGLYm51qZ)-5#Avl+V@+6w=&KzgZu2Hp0NBX3S;K!=XZR? zRfc9`W6%4^%Y**;Zd!aUzMZ|zqw`KnY(IGTY)!-a-`|#Pf7SA6SqQGAiagtX=aKsQ zJ>wJZ?E;gTvyx=o-pXI}jdQy(x3RJa;3I8WiRv)w>k0Tv{}Q9FuT%~L%jD0p!8;40 z>-WJ0kAKfzk(7ElM$LB zkCD^3gp#H8Yq+x$H3D0Zly%!~J|o+D$=CF4H>sCvIz;~$r7Lwbh znKFnh;SKnN2N;aIp(PxJ9e1oYOR8k3zs*b+$^Rt9u-hC;2~~x_z|Q0)#N>WGjnGyg z@@GHek2Kkx^o+=|Qs z)Xxfh984YwBj(mF3QvX|0cD}6kTW*(5g)=%<5v1`oq|`w$TaFQBdKb~94XcO!Wm4l z+8){hT%^Uu=3D8D-KY1q`~j?tZ_00N`scf+3u&n#%cqBLfF-{mR8{&441?X0w@Jfm z{Z?+uLKX(W=gQczlnIJYsuRC_eo*j61V-cfl{u&Wn#rvAcT1;wT$o!+_qbtYpUSQOwN2D*N zFZ1s#Z~W)Gj%+aY3c?^~|H%8sW=|%iKV4B>0|V))M(fu8yyb7&wyDVyaP`u>P?rfe z`b|vvg=X4(f5kdfKxCzqC&?7y2HcvDD)W$5+VT8I}!&q$^*?C-bY@LMGb`mu^?@#TO?odr>xOuqln z@p+i^)*73+HP{x@;pn1FclyhR+_p8SOl%REe9#VX_sv$;RLK0vYw`&LTp0t52wM#ncoP6ebB#uJ5Yv;^u~ zha#Qu*gN|k!TozXO4AJN_>KEic8K6{+~BA*CQ3wMy}j=$VAD?`ZS;)H(^j0j-%dFM zO5QXE?=Lxb%2viP9u3D-Qs5bfp~s3)cBthNxenm5Q5%+{cL*!>DVO&c%d#irTbUToX!=dAeTmCoX zmTPkC*gs|j26m3TEmdio9S*J3NT06iskPgA4N>NmF?i6JxGq41yQyfw!EnD68)Kn} znn)bE_;$^Ery7A!9CZXb?yvr}9SZ%(Cv)_s^#BSjhx-9ViArUVGhkTC#S3u`CFh*nljcM+*Mf+q{mc?kDH1z6~Ar zzN}l({cc0ES0SoRlB&Q-g0U9ZX=5EC{P9)8XH+<4$Eu$5aPM;lZIzMeqf3~*aeI#q z|Fdr>tWX&$*+DpuEU`?fl7K=jvhH_#K-3w#L)f1v&X7rx7P5uh6!sDMrJ6?N;m}qO zMQ}3|+$n7<;sP)qoly53wPtQbL@Ss~gjNPy)mzRy1l2jj`3GSF*qj*ChA0yZdw&tm3XBYcP^3_AOC5Lhhg2V;tN4}Kl z?1JPWzUtm0mO@B8tC2L67usu=dxS8=?bK$Gjpr8~0W%^S2W)g=i34#XkItw{YB^-K zqt+R1MUU6k#-yPi4N%`F*$prp4jIzWDBgiI{MNO&Tp(;nO1xC05Uo@+?93kwAR!$h zDykZOI&zkW7`X~v84>B=XO(3z&q&?kIqKtr)xX*obFwY>B}@RmN2eFm;o>V3Ggrx* zYtpThM!i-&;t*c8@nnDwVSG@U?9czaiIHc1a*cFr;j+kw6@?=}fmCng;<*0yZ!?}) zQ(PG{aq;xlT>}3RiaB55IO1YD%J-`{&M=f&=)U0~@sUMtf~y!r9uz1;b)4tJQ&xc+ zH!{?BXrZ1!@j#c_hB=c67!}WA&{y^g|AFa!ikQ1=-%A&q=~WW*=*HU^dDRI+6F0j; zBxWFXHrg8mI?exe?+%8-!k^)1FL(w!go`;(kk0$3dndO1^WFDPmn<16r~KK@w$&Dp zs_caU_PqPQ{QXjyXPpjZ67lEfAyn?v$poH#g%5O~n&&wLAJyN1> zKDO!SAh_^0K17mS!p*=PYgHl)e1W?WD8_B8mPwwJUdn=wK31y>z0b`>i`{ZiaOJG} zIBJMYdY|Fl?C&EFz6)S(?Um6JZ<8{B;vER-E{+`JTK3YhdI_#s&Wqo zf4ZU>G@= zGA57UZWc)?+vj7rzlCcK)Q@`HM~(VK0g?jWeI|J8Y&pi9T%}_UW*)i7cfWM}_2(%*`KKf6P>d_01&wYH88bU(x>6IHgG9eB4qpt0!EUaf zRcMXmqpcSpj-}iJDWxn!=W;k@giRvsJ43>+jXD|t;5-Bca8zwdoP$n$!z|&0=V$}Y zoa@j{U-a4@mCx2f+DjpUDOEo~^E+!W(yhRe4f4aj6ty1&V4VwG=XC@6Gxh<_wf5NC zz)$Ts9TilTlCueZ8xmFiMcRrpfmBAU`b(i9)C};oGr<5#JnZ?>Jaif=XDrUB1T3*{lEd+l|BHMhF=;2aN9whWdzxH77oNLMcNx z7dITW%!>$261_SZ;434(=EGmPYkH2t5h<;wk<6Vp-ooySMftGWWQBCbAKQs0QTSVqzDom!IV9yzA029#sPoBwE@Gf6+O} zkBCaj`Ab_fbv>v06LRPaLa-H_lqOe%9`h`92BQV z#hj>WLgh&`!%^_JRJdzwN6&5e)`9GxUTUK?L)rOfn5HfC*7`nR88?)o%UnCYmHA^;bP=-mC##Z`k*9hPIWJ3U^{TLBjubMEQmLE{*f z_qp;%mAv;zDW}ge=k2Qa1X}*iOnVR8Dx=(uOUwsn5;XUIz=+P>ba*HP8bh>R3aTvP zA(ntarmh}4j6&fBL0w13@cdv0;>FJwYfuAu%pLBGJk_Tk%S6>l5IWyQrPVm9Yac>k zrfEdW+bNmT9-mgdSzHPNYrD@N%M;*T-UxF`U|jF?RoDw}6fs`qsly`C6kR>HZSPlX zmOeHIF;XnkyA+BN{RNZ$LA5#7_z}0_FkVCtSe6)xf;k=q`px!$Ken>Rtt+P8|M&n;DIkzTbfi~Z( z3+s8m#z{KA-B#uWf2LIxwGCPQL>?1NZE$=~_KZ5*iquXbvlbY+E$v>xi$KKTxQOfW zPdrmhm9M~&7H`f{V=jw8LsSPT5Ul9(h7T;UcH8dge!6q@uJ-Z7E;8##KmZhgTb{6f zwb8ZW>ptr+_9~0Sa8{}?$3&`qor*(Bcn zf-0(sH>3k83}&Vmc3=?)PeYgb)&RSg{IKua6*F?4=OQ^tr{A?%EGCh=zg9|Tg@LoR zou5bgsLa`Eka*W4&~y?+dFDCP6xuv%(JNyi4x1^vx={gL$kqw#iZ0lfa-$H9$OgvE z(r`b)Ng@i}y9C5>w86*?iw9< z^^vz8If>eKcPQig?40|+LMs!ypP8Y;VJY#*a$kVvWzcY@`tBy|zPx>)4`I&-d3p2` zp_&Zw>1Jg@-+yKTyc=xeJzweg(DGEQl={*t++ck8X7yLMnaozVv%7!quUcCPp`49707}`C6&;coA!&G6Qgk%z5DDzp^qXn-6}RQ#J{yyFL~EG(EY*^ zBl^;QSLGa7J#;^5ch$fQI9LaUE^&{@Q}Ep{i!Rp!kKYRMB1lG$4+ zNb4iA?XRaGV?oZY>o5nQiI;Q?iA2*tBKpks-zBUY9#$%)%kG~btZ*O?GBlAwkmqNM zAa#pQK;sD~6QGp`R=>?SYWUrpX0uAiKxgO{=wR(~Gl-JX*I-=yNq7}}k(7AOZj@+z zIz!A9%hy3dsg`arCme^oY#J*Bi;<=89U>+r<3Wo>7!Scc>ED+1ZKLB}uQS%OAIDYW zZV6}Vw6FAqT8+wU!tDfHGdR+zsi7Z&)G)Tfg)AD?Ufn1aou#Eao8mo2Q|&SjBUYIC zpxp>$pI^6N!>1XDqPX+3=S~azgPgPe^Fi5aZ&NHC$j+FP*&MJ=%|l4^!^?#H{A&)n z$8Jj$Nak3$N+?1kS}ty9)7VVP!8BK($s)2c3&Lc-8Q1zWkL7cUHD!e-uuZ6fAJ2w} z=accT==FzC{;Hr_Ec=LsM2CoNb&VEo_rd_E9*CV)JtH`MB-d)M@Qq4pDp`LvdY3J# zAU3#`(~K55lUI;e=1x~Qov~|M3R>8vsjKaGOYYYGz9ysJ1*G|$JyI1(KNl_#AF16f zG8|(#DIwBRCGxs8qqzq=bratmHM1}+?f-n?2*CeoDkAH z$*_}qWMmhiiGZ?06doy0IjLGJlb68PID<)oo5_EIP^I(I3(@9LO~(TLE1$!4ndYa) zQ@hk!^*-%O)daq5Q$!t=Z}O-R1De94ORi2X6DGWaoo=g4OANQ9KArOKbya8By>c5q5E?z46zLMnNN^)H~G9#`QK(*O*st(jWyBN z-JIK~;XA#Ue2yV|}VfDYc8 zaaek6ew;L|Y~xwsw_`nVIN4&Wg0!KI#&i+5Lez(`medcf5ZY13==XTxP&#Jc2Z>Gx zuesekrdaeOxq3gTJg03&vTpJ`?Ri?EpLZtKCQ=r2DBG<%3q}emr?!jxn=S{a&&N#9 zAdaKf$6IG~P8sPT`~vC@;Hq(uhiHq+AQ>je&e^}^{sliHRFmq*9sw)@^isEe!B>4% zscw&j(aQ5+Q$%<#JBN4lvE%7sAUc;%*F99xp~;y zy@Fw0=rjmV#8rkD_2dsMh0OM(OF+A}s#5yY!KK@MAY)}RU^ z2Z=gjtq4ZdKPr5W=~%Fx1K|m9d0vNR_v&`7I;Zy_kwaSs9`kV`gzng<u=Vv|KnD+ zn~_E?1zM4qq{K6`Q-BX6WF%i$Yr%*iBEqne1n&D7F!%HY3BT}VhVHKsGRlU5Fzpgh zT_i}UX`97!)=?Em#vGJ=oG|PjP4_iR9r?Bn81H|z(P)06E@lf^+XS<9#bS1~050b& z`NbF68wRK-g(3l*rribuvG(YUy$^f-`(%+2XD(xdDVs(F_p-uiH&@&g0$%y7lj z$h>25JJGxDZ-FEt%|Xv16V7B@{C#+K>aWRp9U+62bnMIGw4$>3ZZHghpaT;0Lt_d# zn2kAgK-SR$wgnW?Yx(mR%G3_39+!cCH(UG^-9J{MTtHNlD%*VYUe?Z)2H_z2`RFB zU@v?#rV2Pr!**=)sl7CzI2AyZzuqr6QaH@X(trf`!NiiUN+jkWvrd!v4O*t(ug|zL zCla;HzUUSNkMB_C6k)TH@k_|PpE+6IY$7yIEPhmaW6Jx#Ebq~emAn9TE8}sQDA<5GU&TRdtN=Yq>ly%>% zluA4}R)_V*0Ohd&Mxk2=p4I$@U0NTih8YZ0oRmtOo25PzY-b2rKZ9%rrP#uo$P zL;Fd7-Lcsh(;7qcT5gpJT1@LT>ko2Po%Z6!%ztRet9hJKU=Hk6wKAC=J?A z`2#ASpd5P8;>}#_sp` z!X)QvI#T`;cx)D5CP4Cx@g~GTm+-eGC6XDU2a!x7gpT9zsne0hT>%`))g}}ztEHVB z@%K9QW0YEoQNG0RfWMUg*q`tkC`p8DMrCVC6M)I@!$DkSB_JZYEDA=&44lnGJ7aOf zd`joWd8HI8S+`%B>`Yj<_n?mHe|&Smy+R zzF&9Q+0=>RZ#U|+Bz7z1Qc34EkwuXC#Z_U@h>~&s?nT zo2_+X%81Io@}MFW*h~u-RbioFZdCn+KDVdHXD(8`#dJ(>bkwKs4tYgLAWAp%P{mUu ze*IKs|Iz>&j5p^Ha2IT2k}VbtPqEXQuZW8j0iWBj7X$y-!qlAlul;ftM-b5~oV4-d zmxS(WS#&eHJV00l%2K9z<79%q)C<5z{&i(T(({wllV2U8Jq3zx>q9*)VMP046aZl) z%W?n2{yGu|7JRYC;w&;KL4_5&$Q1gMm~}A2<1JyqIY5F(n~fc_2w6y|FwDSNwAX^s zgi2E#zjY~oC2wvP_I+X8@ZlO<#D-2R>>>Ywl(m{#?<)oyL&W^E7ng=Qr(NyrE=L?i zUOlw|425_{`+S0*Eb*NB3-SA}Kzils7xW=h^x9$eg~f7}^Y4AY_!xtxC&qn^D!lCZ z1#xG+JVE`DR8V<^N55M0e8XPDv#(YvSYs}F8L{XbjeW3{98G-k*kfbf`t-|tx9i)& z+@9``o<7|4)p;dqg+F|1?vCcB`hxC7l-^JIplZT7?o0IVz{>ax>czUvAyEO3{b)ya z7y3}bOMpt{B=n2j79T&aS z=(#?UrUgCJK=6owKvQ9PU>dla)kx|0V&^Uy{b1~h6#5acekFlCu|j;o1!b{v7e7V* zzo+nqT&LY+*dulAITmsZHH*-WF;045#1)9hmvwN7mX>`Yi3(C?dmXdssFTBw+0Mq; zeHm#ALVS*nt7L9rvFvYwx`7huhGHI;@j}%%d<_c2r2O<8dghF*{5$54$}EqkaF%}V zGU3pCQ{iFpcdXzu6f3LY+JH0RY-Kcr&Ds;J^3@ z+UZBrmnXjhhXnzYq#B9sYRt+Z2_)BU)8HoMr8Bp|_zt(VD78(5?x`_kx1;1^*Nb&44O5_tSv>0I3SAH|qaH~=ouEv*Rl`?IoQBmI z>aIByA-14<4p3QdaE_qiM(2i1A-R&Yi(YPVJUA-mbFB$j!96v8gOp+=Un1%9w+*Zd zyp)F(EMOQWj)|9mm~|6ZR)44p!Vw6IxgjfLmqtBcLzf2)|L0#M@0e~Pv$Gw68S?rF zq<8Uz&0$AathUT1?(j6A=;h&XHtb}DoxY=(gtPbxwI(sh+KDThfXG3&+xPWW)cIG? z(_o1n|JIAH3arA*t2@6J^WXJSmon}{f8`l@{M5V{M)!wBsvsJhM9RU%s2$w;Gkbd@3^C3+n5usJ2>*b(QLUUxhFW_I#fm)c)E zq}L~tagSHNUy8HjwM8ifGZ|^D>b6l#XrQpb`!r)tx;*Q|(0)Xq5_VUb1VV|c-bk;v zPX8JBUEPbJfr8Xm7DWqxUZPy^OZgJ=(~BDrmE<``C=SZh?z1QFoa^lvVPv3xmomtq zfv|?T>6o9gb~77dm87WI{7oJ{9thqAmBr%8IleGB4#e#MK;is~{RxAJCy+0$LCnWK z1lJ%zchaBHT`M6Qv@a}Jv5U|t;j@F>wQ_ELlUKvMK?(PzbrS-Tt8?YhI{s!u^xjxfZ%L~f&g)bd6{}mN%`4yZRu}wp`8-e!v&^-wVh?e4- zhcE*Bn~s!W-_s0!1F&_ICe5wP{pVj`Imiv*cRaQ$j^u$c`ovtdZk<|!nK9^pA1#gq1R4_`T6 zaj+b*cntnOvg72YebV<7a+PQ2(#>gP9-37&*IbHqnERlxv(u~E^y`ye5_o+P?0Pi( ztNlNG|3%nPay6H(w8M9#Evgxu?HLfp;_l#R-6_oAP+_iwnbfq=&3iJMz<)~_Uf?RW z$#IU<;2e$%vkhbFm{|!nm)-0CqLwu+2&YJM$Ub z2#W%VhZrqa)3q(M@iq6n>|>n9r?G$IhIP77{h^c4Q!5C2{Rj+a?qax%Kqo=jMG-Lfx^ zdl|jaCC`8F<_DDqI%kdgq%vjaD~$8XX?pp0F+bX3Dk57Smw)#prl%=q858AZJn+Y^ zuNGIlRbJv6sH{MnGN6%CZYMxU*fP)}#ERGoO%hySxeRyd%d9rIde-?OtF~4?)4uy- znikoVSgiJ9rZeJd6JJH1Ohk<==9x7wRh+{Ppc9Wq8HMS&ipX&in0QLsaDyN2!cAdd z(dRBWQbzH0wmD?OP-OM<;g2mFqNR%Lf<@=0U5D4o9v%KoKRtPIvSunL`VWE+iTGPU zgP~Dny3->lq9m?JlO1WczOw`d zY?jsy3+7K-1A5?5=R4-4?o5U!KRtmy2jsWOz*iLB<+|S3sV{&v7NgDq=sFu-yG5^E zFS?Q9&#Uct31TWz=<1twZx9W#3=Hl-C4F+91Yin9^aZ%E&r_s3}D54{FAGTkY|yj;(b5?(PnGxNavz=P3qE1FU@$L;86b zS<`1{5DX@or=4g6c==qeHN!bzIlSGtpxjl2u<`?JKqH!5!r3gGrfFHzN*zVsTu`KB zd;Q_z(wOo|ZOT_tNU??ddwfiO3s%I9Chib`4^tJm%(mjPwwBv}{V zha_y?7-&mjy<&D>{~O=OWF&#OK7MIrQW!~=m@CeQTm1~)xNNbSJI2QkQq9B*5jN0$ zP|%@n*ok&*D0QhTkynwepzdTITEcuqjAD1BE2FyvdJY}&W} zrL-|7y<>iJ(8`X9#g&O~^ZHBN%RXTgR$N;l8F?Q^y!CRuJTHem_i;;!=OlQ2 zPvKM8^9kwmP#>REnJgh&r}@884|aI3Pg)z=$FGWTysCViDOt{B>~rbOAS%=Yq?ac0 z?j~(V=D52Zfk~BElilXGi6IpER{b^^A%t?lr7Qn6(!o2e`b7F`+-=<6tgpb96fvUD zZpI(o2>dlG$z)6=E#NU0`qEn%#H>d$Ppd=ui+3t>6fTXQRxwf|&DO5|6?QWwETV`! zwY|=GXkBBy%J(dCxWsCXWmuvbd}rrCXUhj%cf0)Ah!@O zC1Rm{bXPvO$vUA8R~Y9UT?1jU=}`}Dgxpl?eST21s}JtVBCR@|mHpoj(L?fn_ZS12 zNR#8bTX5^;2NqXO+!O#-r6H9OY84(58(am2guohEwYpCfZg?Vz_KkNQE=F%A_)246 z!HjsXJIWUp%gHMlVT4qbiaL|lW(Qk?CF7;7CT5(9X^bl>hvEjjf}$A75azU6nMDU3 zMn?~o)vmg>_|1*2b9^l97VUOq#i#@fphLibZ@$6bO?!g zot%NwCk2JX6XD%7mqihAY5wlxOz@72(Oe_5F9Psh+>0$mJtbhdugpLkFM+%bAR#o& zzzmJYxhwAJCtn^`o34W;XpAeO( zB1dh_iJAG0avm68yF5o$;h1T|J8V1Rx#w^4J0^bPk4DrE`5oMM_bydr8?z5*F(S4q z!RL|Gmxs@v+W;kocg93(3gfK_8EKb8ELQL)9QQ6jm!5@k9|4G&S!Yu$EC0-OkSmeR zERM`+=PJ}R8DKiV3BR6&G!(;w9En;V0cue|8J^x0Tppiv0j))q90{nsKT2zu2N%U@)$hC32O2vS{9w zfk3;+;N+!HUy1eRS>6Y6Le%t~%Eb7>xA-XiWq{fkVSeQpz^?+Nz-ht+>rO`dFHvp2 zYvtPP$3?KuRrwe+Z?E%_OT z8N}7kLUPOrkx{7s27ZpaXZb{(BS@xQ1^f8h@~ab-TD3$Wscm4ixr}hb!^dQ1V;OWK ziD9^|a3d6cb4p43-i8_eGt^!vy_oRx8TslezB*$^yKiJ|jwMcY9D3?B*ez;uW9Tvd z1dT-nzz>XEj}-m4kA|E_PV{HPBHuK;-p1pHF8Ry*qB zhw$+A1=4Arwu_Xx=X260OP4zs(Zoa0iJvhTo`Rh1Sm=IaeO-KzlN)If92?i8NYADh zGMT%K@tY2VSBeR}UYIpjaO`GAq9K+AxaVQLWCk-EPA4DKiBcW`6r0sFMdn7R-11`t z^!Y~YA1JAAVkKmyXjkIrsEf%19>ILifEm&>d*Yj@HNnc=g1h+0*O)CMk>-J(V{1u! z4_VnpKt3=Pp%ts4_XdEXq_&;c)=z$6QymXu&I#HgpbLu!^sUkOI~C~-UEeHE?}jej zD6qeNUrWb^mD}_m3-=v}5G7{B06|F4i&|B-q?WOZc~FC`ktC9+S0!8Xd=X%A7H&Lz zb5zJD=YT$TA}tctBAxzNLQ9rNMD;%D-v_G1eip9{Gsws2Lc_BSITmK4ypYp%-52)9 z2HdaxF(^m9ddtMwG~~kEGt3z9{{QD+P$ONdEJLC@vx6;_FQ7kHTdkiQXM0G{=ArdT zw9V`+zIM{#+QtLV;jnU7-55Gb$3mbXkwn?z^O(vM>BLlyXwxihT-}qfmphQv9 zsec5Pk&J$FR&1qT)|W6;*GkOqXY}8?2K_;0FKpgD3JVGk;fEu%2Ol`WhP#H;O2N9G z3d7Cy3gh}J=A^$?P{b^rP{k#d(&RB`{_yV74I2ij%2gr&JARw&Y^u7)p1Uq7b^V9? zVA9SLHqi>OeXNF3PNjm$YYryLbM)>`a!SGmaVe&0w@23>TJjaaeIZ~K=MyrJtA39| zdrNp#u-y4aVJk%WCaxd%^kO7}5r(?1S1H#3jZ^hva-cqxQU`uxoz&g!3Q2Oz2%^I1 zhLw&_2S@ZekHXG29e?zG^_}i-lAf=TueSnxqdlV%S_^hW(YLv4DCUcsSAl;5>H9P~ zygFu${Kntd$bUxpxC}b_Zs+HauE3PkVo-&%^Q& zoY;8VAa3(WZ2D+pZp^>qGxi%k`u`$ob?FV^@d+Wu|9S2anh_f;!}3EY89X2Xm;sce zFsM~eQNW`i&GZTnaowwx zyO@Mjo1-Bw)D&TGcq#YYi`LdEuqr$lPa;+`Fc?3ViGS*OVyn#Yu%j`_P9z8BO_>iy zJEC6zoYTs}M0VoDs)u`mEiZ)K97(21U`#G{qL(!QM*v3by5Ji9q)Y3h6D%Wh$QRB0 z{%~Cj29Y9psmud^8{yIEZ&CoO6y|tTN7Um89J^rsmq@UtmKj@_PTn#eG@?GfZfeyz zKqR)9Ffhrvc$anJ&RxFz1sw>fO#YX2OTPWkoGt%bG*by}X_UgcgN#nsl zD6k?8`WXDbf6NB+hl~qtn~OaAB3jRX9N)J14SBp?P-%W=25w;A>AQdfwjUwJL@ZJM%;LT3F{EzNh* zjHgPZ)YBM35>2)T8-2f(=q6FAT5T&`RO!$100iP7;M=7cJ$X~zL{^crxoFpo8-T!7 zj;3?Sk?5=o4GH8oju5MGkMIz1)UTeErWIxd8JU)Aq0II^6rjgb?nXcX?L8JXIJjxh z<%(C|5lJ(Pob^%gcgxFa25N*oA`l3Sw0VTi{0Fj2`o}}7Qp`Edj_G(04=>;2&{U0{ zh8OpjqJaPGi*Skrr>c7c4CgX8N~A8csNO>WvtOs2c&?d*%Mk1Y#`n$4(^gb&>y#j_ z?i9-Ok%?|-*Q_-DG{J`}(y@(nVET5Gf4#;DUOAGq{(_I{@~$Pn>YQ;OAI|B;WM}r2 zJq{qBA_{~Jz9esBY6#)5Zvs-p_T#ncpn~BztftQiD62l)Jm-O#2 zok|R8Q2m$Q|B^O&#wJiyU7}&O z1@EE6ttMbW-d!W9-<5pU@yClT8#X#KpQCjZI~`z#N4g=Uek!^_?{ma>%VA4CPRyEo z<>80ocMb8=C?Cdym2!N*FtwVM3zZl<4%Lnow#GNyAwQ|wYP9tCM_6+>Cs+lLZsDp= z=LJHc@ddIT;vbL?7l!JdhSHz~{sK>27xf$x3-~zv1@L{e_Fn}IF4s6Osx3PznfOGvfwoh)az9nNwe@ZLSZwyfoIlT z3k{DnE<)}d_ieRM9SidZSDRLWhHT&nCHh)W9()l}@0IO2FCMj14@NrGTQg9@%wkw9 z!x-K5SN}fj}A~W zPl?lWZPDJ9z|?W-qNTJ2#qa2iI0XR0aHe@oVeerPMZCvFH`4Xc_&F{}Y$MXlSF=js zK)L)#fNC(6ik}zR7kf^7@XvSmv8U&O?bXMy$C>s{NMQ-Q9YhNe+Z)nx|jvi_on#(0WQ1a`!tnss?<4aMZ#FHApBV9}!8W=9((^D~Mt2 z&kdNLO3^V_AX@#SXq+^bQ{+9x3k&yyiV>Q}2hj&BO~XTzsT9ALS8BjB^7VH)himrM zCRw@x_{*-lY*s=cEBO>1fE(rhgMFHJ4|y7Rxc{^hchvFoTYQlg{>{kZP7kp8s> zxPX>uCz{#digvJc3r2>CppNC@DKe6UqsE^F`cy1T8C5d)DQwk6FOTEZ?;w6N!J!?5{@FhtN4oJ8=U zZYKC)v4T5WE>sw}3P>s9?f_%~s%ChoM|GZceiM`U8OL>1 zL~8{nJu!d&)G7SZL~j>xC&W8g&ikRn0r_Hp`Dzr^+OFWdWazcsGLe(}M&POq`~Vo! z0fsurrj+FQ>Q{C&y|*kvMe8lDvgjTlgaZ*M;T$;&c#^{I5?^ala@|580{)6;98aX$ z_Nvyu!XwQ1Li7tWk^UY;lymm|kTP2|js_^nn_b6G?Kn^;-JKzuF#kf}zVVI^^m5xS z;wKW~gDuS;I^mGdvau=;zv}9#_Vf_JGQXy<*shN?ogn7#2rRFdqI={L3i)rGE%ed9 zLS38IjtahaSYcOUN__j=>f9*}taRZTJ}f*^)WRrV7fongr|%8*4bcu@tA1FGIHQ;q zL1oMm*mWQ<2i=4{3Z zZ>ThB>1559EnfQd<9qPX7uI{Uob+t|UFus)USO3$+Jlc$0nglPNS}6Hc0zEDw8kLju4ZUnME2rRKLhF4~N=3g?$!zvzoz@MY9885r( zEj{roD*dsRgAK6X1U!|gI`Ol(&In8$g?O(Bqf(fdp5e=I>iv0UhujLFiqOI$;6MOo zIr?yR9`rPn>dp71+rP@z=%bANzAcFAGp)zAt8P}<@Z?Le5`2NbeI_<|b$|V)ln5*Zpz#eL*YL~wZ?r$2~AUO zaMzgCAA)w;$8EiZP}4Moi_3eu%tpE;Hh$ zxMQ5yQnRj#3Yc6vLsg2%)HAZ{u*AJsarDV3mGc23Fl}4ORg`RNNLve`Tyo()uT1k* zUs3teX&%6(EEua|Kbbf$t4zrQ{}2p4s2;y3Ji397u-5_rY^+` zF285e7KkWuAh3_@MOWmo?m=r;Z~eM)PuXyZk2+7gG9i8sj@n3HCA&0?sG*5LB;aU^ zs8m(qmUfP1APgU>JlVQ%_b5Z)9z^Vb-Os$aIv6*`(ilt;RK7`gNy)&8LlE9cAT^$iXYwxb?z$!F=XsELWY`LF6N z&SDmA->rq)8hX*}eJdWU`c7SG9Q`iZ}t zAZs8IJ~Pib zd&pUSx2FTsw@iiCR zcg+DU4>CnZVY{AO3iT1|M#HG8@b^Jk?lsV*1?=6Rqsr4TeM~1X^fvWI3X2>9MsfI_ zFGG~C(5+b$b?z}?M;V5bmQT0YW;H(79%$KwwBHy#kg2}(We4pdbiSIY)Pn%NA}hX- zO@=$yh%_^MJP6Tu3t8=y>=Iza~$bAV%%g} z_WBd1Ok~El9&|RhX{RkNWb^~+WAZd^26vfw+)0;b--e#J61jAzTTyFOSi#BCvgz4T zQH+Uyl3P3S!57~k%v(D(i%;gBOrEu~xS&wR><0CTJ*fe~#_B@4*GUi9sD3Z38H=p7 zVVFiVG$GwlU7dbopT{ONU7^iJHR^X5<`z|)NFE@8?vD@Rb_?VK-YbIj`)#k-d8CVF z`rl6N=ENjBj4M(A8|`~KZaw#IVT@jKViAcAW5;}FEZLNDF#)h7F^8vqzqQROz}%*0 z=9zR9>RU5V$QKJ{exTAE9?wS7Vax;o@b9+|uGLI`L07!kDgW-BVD%<0VB$~xuM-tk zwNZEvcgJM#D&hCw{p;{Wico?F(Y8xqBLT%0GZ^&8+r@&x?jJ&@y+JIZik&MWc9P&w zQOhW!%y+1=v!P=aEI(o)sHcpj$9A!#xjXfrlR^u2Xt~SDP+$tCoNGaQPiA{j*adJA zk+l#O9vq8Pg?e_|7i{(36MocJGK26sDOYTSJ02|B9?HmE?#aUN!n~^1UAP+za>MEb zorTi=*eqRR1{yim4+OH@qj~eU-3}=>ZbV`t=~@L27rzIHWy;wP`PvFb8TPBfmb6ra z)bVASAp9LJOm}_;9W|@EWc`8rJZzBG`;twIr|@#4S~XMVzQi zn=(B(SSLx;WV;%rCjwknSrIhRDqYF5agFR0hU|_{Tg&9TC*0suJKWi;ZsG3omp#qC zL4~J17JT81iLRAG({HK)_x0n~WjOI4m87{ZM}3;S&W%iKol8T0I>#@}2g_fhBWpng zj7e`jgzo>a{M z7WHWiLnZn-hD3g_reg$C{@s~G3x5Y3x< zgF9FyB)wY7hl#B=4WhH?o|DfIUnSS9aNSL7?ni=t)DMTi01lkV9SN!=rSmj;2lgzc z^G}OX0&}8^sPhWFyY&lUlwG_D(EQQ zHWE5b1(oq4fwksEThrGZi*1X)f}Nv(X`48?z6|QLaU;s~2OOF@Cw7PjE^tVkn~*4W zfJB)a1G>yJBq06Lwdg761h8f->MaoczCzx*Q|Wc)<7X~UcQMdkKks-SWF2f*k0n^FV5g1TDgpp=nj1kHJ85SoWzP5&Ut=@~0j>Z#jfj-Xz60b;zJy0`M z#3UpCkJp(7{CvfgoYr5ei+sKMB2W9K5^vT>=_u8w(GNr$@RtwqRN4*Mm%*oQrOpdHM{4$Y#s6L{E`X1>?Qnp2M z=AI83dXwx#P^fJbcGe?IZR;GZRzr|w->iagVvQCE)f|!^1uIw=Zl5(Q$EQ{yos4bE zpJI~G;LZW6YU!yz@2gkeQJ>omK85We8p&3pS+sP-3HKSoDQ)PLf2(JdD^x1yVc1j& z5=}^JBR@u*0Uw(;oIMkUEP&rog1L4wrYf9kw32Fg32esY5N|qD+urg z){S;l+9azz;4>zMBFtuwO- zqIcsR^$tkIjH$3~Lcn{9v1FI{ zxnrfn!+%S)CzP;d$`J6WqkyF6HkH}f(m8a8XkwdtCtDCiO5-8W-aAd7_NAJK=IIsU-%3mh=}-J{sx_4N&jk@kr>yl~@B%#e|D`vHV~CQLDD&=vr^;aacYyq=yUFuj};sjsK07 zB@9;mZP$il(#H<+hWV+qZqX^=v%&bh2<;xF~f_4Q?EfT%?%a4g2 z#2p(EO5g`F?e$n}|HU>6dLP^xeMxf`T9WBVp%K!;~92e7Vv^LE+ zFC{WQ(W1GLP2-zTT{^*S$X@IiNHi~7w2+tL`ZGMupU>$v%|Homl1clNQtCs^0vuWa&iA1pfd2b zkF~#IBNnFI9~)FoezzRtUS~RE{D@fft9337zv{rrMAdN8>DYvv@Ez{wg8Z{CR=}+p zn2)i4Iq37uslTuKKe#-83j=7nVvE9X{aY7RdmfiMstKtzb=~xy0>u+BMQ(9Vai-aG ziFp;=?C{9}3E{|$BUQdtz3yk7S0uM!BQW4~tVYgL(eUL-b-gWOk%DKHtDQUuG^FzoQ!N-@r=QbeIK)kp3H7?*I(T(8VBlxi45a!;m zff(movNv}ldVLuiY27qqPes{!94%_gkav_YymY%nOn%Xn7Tuumy3~j3cg?n@lV=+{ zD`u%6>VmIzR?gMV(pwPoM3@TWoLj=&AY)Eh$GW#z1@3fC zYtkkSh4vRnGd#Mk7Sd~t%W5x4Nh zWtP{i?)hb%UQ{-kq*vMA4#P}Ge*^?YDrohp2Y1<7n8|&pvkSaVv{P<7#B`lO3t}qrKqnerm@|;~>e!!Es`=(fh*qOLL5@OTq43Qf z?sAL4&i?3lmt62EPAJLi?56x0-<8*ezU-jrokzqoZKzqSvxRG|EDB-x+Zq4uB+@?M zTq+uS;1Mtqj6!-JnIx$Pn80@=rF#I)>GS;48yD%C*bt*Bk<+YU#DnOu%|5Vc=0Ekn zf->l)`*{BsyqQ5|C$kdiB7LFgPlABx&J^OW)|vOmwWb%XO1q0Y<)0=|(#Nnb@=x|; z$KTKAS~CkKCT^;Xo8ABs-o=l$QQBh1_qN_?m2&{>bV$}?CSk3ABYJrZ!#)^kLXJuP z-SIHXNhDHG_0U+)wPq>GTlx=I?Rf|xIZ_rsfmdUbB;%(u$er$BT@446AoS7K-Bt`a70dIRFn7bjN2(i6_ekI9Pf z`+7FVsKNDHhA`f-yZM6m>lq&c1ut#?P^M*n_lR~Cp55ZXKG$^3$b3_N+nJrQ)ApS{ z{0_txaDTa_9B5SQ@3xu}P4t6PY76q%iSouf`kCWejh^z6=@GJ$gm(rY{ngV4`Y06E zZq74XdZOXVn2Q*%B-;lui@XzRFvBd+6Bo@XbskGt2|o))lfdx_8-TDaPbRo4!KD1#>vDLBOA~+ zXcu=@U|YN=VL56yc0z<3>A3Sc-Z)Xo!#IF~s|bZ8RCj$1{$r^VCnp))61pFxH1Pf7 zY{1sU>K|jSB5XNiioG+1kSYdZObD|?Z%&$oRZM*J*+WQ86O1cgIdmkt@0{2|nlfC# zd3UaQQ&s={s?`AnR{^hzO=8DO8#s;G+F38XmYfToWC` zu-hBh#khb{Hv)1kQxONPTQh$3bCh>?YbN)U>V}3Vnr)M-NsP8}g+7^;sSYLh8fhiO zaMpBbiIxrc$i1ZIA?2=&P~X$O;wX*B1JjwFn|_BT8j`K26O6Vxod?Ryo5nEzSDOi_ zloD~O%WTDogrLNNkd5Al4)g(6l0B3NOx6w>w6e06f1c~Vz^-UDL*9^id#a^d7tV;} z6p;$kd4K=`#K}=#HLfH>FW>>)EwJsC(zn%*qY573s7JS!MBsqjo3A}1$(-OVk+pgI z{m5P_$XfY_x4Qk$iW8ilE528?DbkXg0nAim>^Xy=^#&aqd-sTwW;*pgcSpks08@Yq zcMrH)(UD8`8p2?$`#Jdz%X_wbT(=7>7JL~G-4%+*nKE4fYl15dczVAYi#7-)Ic;?P zB#f1EQ@>J-TcHDQ5#QXiFF*1`Blm0VKnVZ&c7Zyiv1u!X5}WP4o1%(R&38}j576aV zCwS4Lye%&PWJcJ@VFIqt4@L(5(RwGDo>F3mbloNqU!+X3j*dKh2r*85g|lF1NJNj5 zXi$*!2|rbI2D5pDef`DnI-{OhtS!>-{)*nANfkAjyHD;`!S)PA^IzZdj;dEfV9jrm zUM=Yp8k_b6Hiy)mnfPH=TI6LI406NQ#-yC}W%zirrEhAS?vEsct9R2W)fJo~*c z|IGpE*Fl`P?1$Evzl|bW@MI$X{U{REV|f9t)ZHESaeW)%H@8CF9Ad$APsU$`G|*VT zLcma1j(N`T&l%0)#Iq0Y-+vj^(62dJUxNBdCj*nb0w(SWUUnBil%YTVeU_>OgpQ&$ zE^ho*wsVOOv)l%0tS@Nz-`3%D530(ZQO={yYhG4WNP#QeP2*c&Ch9U2OPwG09ovWH z`l4YgR23BL{L|TkI>p3uou{DNntY-^Q8DpJ79nNwv=67|y4`zBK(a?;j+fAcfPqr1 zQ*87dGZy-8#)*NyNVFEyFz{~hmW+*Rza0Tjod31N{v^a#^xDC8?BlKDTqUp% z2x>_Gd@iu>hh5aZ)$c*Gc6RN?0{bU=@0WLhEc zpW}YWkCcEeZLqC~)&&Ynk<*42HFc$U+so7Db`cMC7Lti%wli9-bZ3<4K)AvQzL{7} z4+^gBzx1jl%jH=`xoVuybyIa`VlZv4>j7A%ptzh4-78a47;IVe!m2UYqQZQRJ4)DT z&*26!JM<-A!LK8}n%H|i1oq^CYZcJU!cjs;P6 zLZZBnxw1~u>RK%agVJ$5!u*9c$K=(ymZ2eDKY5}B7(A|c>y6#l z?GWQGd|&*rpGICdy*mlan1_7;6Jp~c#1OYwC{|8YAKC1qL@}96Vu-SmVgO9LntdK+ zTCQg!uX6=BTUEU4>L>VeWw%P;G2HOZnZa-$5@(;ABE#kBM#On(5%!E``ba?UNMB;o zfmy6~Qf)3M0+@!edvFwaG{8gfj!&F%pKmR<1KUO+?^({ZAe3JG8VPZUG6Y*@^W6ja z9l}_=KO9JBKmrVBBDIxCAO@RUj3uOGkW51w>2n>>^CgeiZ4L+FiWpRj7CwZ)>eA@n zj7(N01@@b4|GG}F_e`;Xz0vbIQ_rGY_qIr@tX=`Lp8v{g(S}E;7d*P!C{=Q=I2)ITYrp>gj)tMRl3G z?)uuB41J0EZipr`EK)F2;xN~?3^qmzQ(5uQS9HLGF=8&&4Y&z|@Es#YGl%S4Zdrx% ztxmT8?W`6ibR(S}SD57StGLvS-bc$90bzV`Lq9Wi=iRH7KQbm!^j8b%8Bu3P)V45R z+k*`azd{k<=4~}K7QGRWtlE$#GuNXJNvwBn=mvIDKZK>qN|lD*w4C@5o~kod=6i;H z2+t}SPsoW$LUNyJNfVmcy~E-o7JR!nZk^XBpnpLo4SAhZpC$QucvTTRbkCihdM2cg zy@Z{3gG6>cjvUfsj@MK#IDotBppzT3lsD~gba>LPP;_Sl!?2|9Cd#Ru*9soN1^)aDaRN&g%?i+0zDoH7a>(w{8#8n_&8z@)}EzvNhJ+_~E zH#`<6KkjAvU{noWtmooS^nbG@rzh9KDq-h_I}aOu9y)AcJU-Ah+ht#`Y#H_OJ_MG9 z*uDY$v<)AndQcF)6CWY#%@!uV`rMmP#&`WM`it4#e}=xfb%)2fvK-)9$=a*E@ZRea zl1tY)n#sFjIs6K2%0NhkxzE=Ljliak_cL%Fk+c)^5p_%G@qpMe?{Ie`^bF*n6o@P> z?Ku}l6puxMVkVdJo!rJWmkD7+Un6JtXCZs>;m+HBb`w%lnLcnxCAKBge<}nRaq?A? z#<{6*o*sKefmcv{g>1UB*h(DjsS<-Sun+84x3=LPJEHg`JCQujoCuS>;QLI%H#lMM zn9e_TK3Y(pQ z?yY~tv<+0+HGq_CKYR(9msGmwIY zl8VQM)g6Z*pt1wMb^FyY!;)YKQ$LWn9^C#4Ocee1A~>|>IFkx0aj5e(7IMG2eD9L+ z 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%0AKlSEs<}7H7NW!F~kK+1S*I!V0dF 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 KMEi9AW&Iz>nT;U; literal 0 HcmV?d00001 diff --git a/danctnix-phosh-settings/danctnix-phosh-settings.install b/danctnix-phosh-settings/danctnix-phosh-settings.install new file mode 100644 index 0000000..6f60e9c --- /dev/null +++ b/danctnix-phosh-settings/danctnix-phosh-settings.install @@ -0,0 +1,9 @@ +post_install() { + dconf update + glib-compile-schemas /usr/share/glib-2.0/schemas +} + +post_upgrade() { + dconf update + glib-compile-schemas /usr/share/glib-2.0/schemas +} diff --git a/danctnix-phosh-settings/pa-phosh.pa b/danctnix-phosh-settings/pa-phosh.pa new file mode 100644 index 0000000..f4f0bf4 --- /dev/null +++ b/danctnix-phosh-settings/pa-phosh.pa @@ -0,0 +1,5 @@ +# duck volume of audio streams when notification or accessibility sounds are played +load-module module-role-ducking trigger_roles=event,a11y ducking_roles=no_role,music,video,game global=true + +# automatically switch default source/sink to a new device (Bluetooth, USB) +load-module module-switch-on-connect diff --git a/danctnix-phosh-settings/phosh-wayland.sh b/danctnix-phosh-settings/phosh-wayland.sh new file mode 100755 index 0000000..d337dba --- /dev/null +++ b/danctnix-phosh-settings/phosh-wayland.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# Sometimes users may have multiple UI installed and they may choose to run a non-Wayland environment, +# so let's only set these when the session type is Wayland. + +if [ "$XDG_SESSION_TYPE" = "wayland" ]; then + export MOZ_ENABLE_WAYLAND=1 + export QT_QPA_PLATFORM=wayland + export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 +fi diff --git a/danctnix-phosh-ui-meta/PKGBUILD b/danctnix-phosh-ui-meta/PKGBUILD new file mode 100644 index 0000000..e4d24ee --- /dev/null +++ b/danctnix-phosh-ui-meta/PKGBUILD @@ -0,0 +1,24 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=danctnix-phosh-ui-meta +pkgver=0.2 +pkgrel=4 +pkgdesc="Meta package for Phosh" +arch=(any) +url="https://github.com/dreemurrs-embedded/Pine64-Arch" +depends=( + danctnix-phosh-settings + dconf + gtk3 + gnome-keyring + phoc + phosh + feedbackd + squeekboard + dnsmasq + gnome-control-center + sound-theme-librem5 + iio-sensor-proxy + wys + xdg-desktop-portal-gtk + ) + diff --git a/evince-mobile/0001-toolbar-Allow-to-toggle-the-sidebar-button.patch b/evince-mobile/0001-toolbar-Allow-to-toggle-the-sidebar-button.patch new file mode 100644 index 0000000..c7dbcb1 --- /dev/null +++ b/evince-mobile/0001-toolbar-Allow-to-toggle-the-sidebar-button.patch @@ -0,0 +1,45 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Wed, 11 Dec 2019 16:24:31 +0100 +Subject: toolbar: Allow to toggle the sidebar button + +This will allow updating the button's state when gestures will allow +closing the sidebar in the next commit. +--- + shell/ev-toolbar.c | 14 ++++++++++++++ + shell/ev-toolbar.h | 3 +++ + 2 files changed, 17 insertions(+) + +diff --git a/shell/ev-toolbar.c b/shell/ev-toolbar.c +index bb20887..6c5521f 100644 +--- a/shell/ev-toolbar.c ++++ b/shell/ev-toolbar.c +@@ -264,3 +264,17 @@ ev_toolbar_get_mode (EvToolbar *ev_toolbar) + + return priv->toolbar_mode; + } ++ ++void ++ev_toolbar_set_sidebar_visible (EvToolbar *ev_toolbar, ++ gboolean visible) ++{ ++ EvToolbarPrivate *priv; ++ ++ g_return_if_fail (EV_IS_TOOLBAR (ev_toolbar)); ++ ++ priv = GET_PRIVATE (ev_toolbar); ++ visible = !!visible; ++ ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->sidebar_button), visible); ++} +diff --git a/shell/ev-toolbar.h b/shell/ev-toolbar.h +index 6cb8ae4..1b15e80 100644 +--- a/shell/ev-toolbar.h ++++ b/shell/ev-toolbar.h +@@ -58,4 +58,7 @@ void ev_toolbar_set_mode (EvToolbar *ev_toolbar, + EvToolbarMode mode); + EvToolbarMode ev_toolbar_get_mode (EvToolbar *ev_toolbar); + ++void ev_toolbar_set_sidebar_visible (EvToolbar *ev_toolbar, ++ gboolean visible); ++ + G_END_DECLS diff --git a/evince-mobile/0002-toolbar-Allow-hiding-zoom-annotation-and-page-widgets.patch b/evince-mobile/0002-toolbar-Allow-hiding-zoom-annotation-and-page-widgets.patch new file mode 100644 index 0000000..adad44e --- /dev/null +++ b/evince-mobile/0002-toolbar-Allow-hiding-zoom-annotation-and-page-widgets.patch @@ -0,0 +1,197 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Thu, 15 Apr 2021 12:28:10 +0500 +Subject: toolbar: Allow hiding zoom, annotation and page widgets + +This will be useful to make it adaptive. +--- + shell/ev-toolbar.c | 32 +++++++++++++++---- + shell/ev-toolbar.h | 2 ++ + shell/evince-toolbar.ui | 84 ++++++++++++++++++++++++++++++------------------- + 3 files changed, 79 insertions(+), 39 deletions(-) + +diff --git a/shell/ev-toolbar.c b/shell/ev-toolbar.c +index 6c5521f..83ba22a 100644 +--- a/shell/ev-toolbar.c ++++ b/shell/ev-toolbar.c +@@ -51,6 +51,8 @@ typedef struct { + GtkWidget *zoom_action; + GtkWidget *find_button; + GtkWidget *action_menu_button; ++ GtkWidget *zoom_revealer; ++ GtkWidget *page_annots_revealer; + + EvToolbarMode toolbar_mode; + } EvToolbarPrivate; +@@ -141,6 +143,8 @@ ev_toolbar_class_init (EvToolbarClass *klass) + gtk_widget_class_bind_template_child_private (widget_class, EvToolbar, action_menu_button); + gtk_widget_class_bind_template_child_private (widget_class, EvToolbar, find_button); + gtk_widget_class_bind_template_child_private (widget_class, EvToolbar, zoom_action); ++ gtk_widget_class_bind_template_child_private (widget_class, EvToolbar, page_annots_revealer); ++ gtk_widget_class_bind_template_child_private (widget_class, EvToolbar, zoom_revealer); + gtk_widget_class_bind_template_callback (widget_class, ev_toolbar_find_button_sensitive_changed); + gtk_widget_class_bind_template_callback (widget_class, ev_toolbar_zoom_selector_activated); + +@@ -235,19 +239,17 @@ ev_toolbar_set_mode (EvToolbar *ev_toolbar, + case EV_TOOLBAR_MODE_FULLSCREEN: + gtk_widget_show (priv->sidebar_button); + gtk_widget_show (priv->action_menu_button); +- gtk_widget_show (priv->zoom_action); +- gtk_widget_show (priv->page_selector); ++ gtk_widget_show (priv->zoom_revealer); ++ gtk_widget_show (priv->page_annots_revealer); + gtk_widget_show (priv->find_button); +- gtk_widget_show (priv->annots_button); + gtk_widget_hide (priv->open_button); + break; + case EV_TOOLBAR_MODE_RECENT_VIEW: + gtk_widget_hide (priv->sidebar_button); + gtk_widget_hide (priv->action_menu_button); +- gtk_widget_hide (priv->zoom_action); +- gtk_widget_hide (priv->page_selector); ++ gtk_widget_hide (priv->zoom_revealer); ++ gtk_widget_hide (priv->page_annots_revealer); + gtk_widget_hide (priv->find_button); +- gtk_widget_hide (priv->annots_button); + gtk_widget_show (priv->open_button); + break; + } +@@ -278,3 +280,21 @@ ev_toolbar_set_sidebar_visible (EvToolbar *ev_toolbar, + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->sidebar_button), visible); + } ++ ++void ++ev_toolbar_set_mobile (EvToolbar *ev_toolbar, ++ gboolean mobile) ++{ ++ EvToolbarPrivate *priv; ++ ++ g_return_if_fail (EV_IS_TOOLBAR (ev_toolbar)); ++ ++ priv = GET_PRIVATE (ev_toolbar); ++ mobile = !!mobile; ++ ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->zoom_revealer), !mobile); ++ gtk_revealer_set_reveal_child (GTK_REVEALER (priv->page_annots_revealer), !mobile); ++ ++ if (mobile) ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->annots_button), FALSE); ++} +diff --git a/shell/ev-toolbar.h b/shell/ev-toolbar.h +index 1b15e80..1c1f0a2 100644 +--- a/shell/ev-toolbar.h ++++ b/shell/ev-toolbar.h +@@ -60,5 +60,7 @@ EvToolbarMode ev_toolbar_get_mode (EvToolbar *ev_toolbar); + + void ev_toolbar_set_sidebar_visible (EvToolbar *ev_toolbar, + gboolean visible); ++void ev_toolbar_set_mobile (EvToolbar *ev_toolbar, ++ gboolean mobile); + + G_END_DECLS +diff --git a/shell/evince-toolbar.ui b/shell/evince-toolbar.ui +index 4add3ec..f35b961 100644 +--- a/shell/evince-toolbar.ui ++++ b/shell/evince-toolbar.ui +@@ -31,38 +31,50 @@ + </packing> + </child> + <child> +- <object class="EvPageActionWidget" id="page_selector"> +- <property name="tooltip-text" translatable="yes">Select page or search in the outline</property> +- <child internal-child="accessible"> +- <object class="AtkObject"> +- <property name="AtkObject::accessible-name" translatable="yes">Select page</property> +- </object> +- </child> +- </object> +- <packing> +- <property name="pack-type">start</property> +- </packing> +- </child> +- <child> +- <object class="GtkToggleButton" id="annots_button"> +- <property name="action-name">win.toggle-edit-annots</property> +- <property name="tooltip-text" translatable="yes">Annotate the document</property> ++ <object class="GtkRevealer" id="page_annots_revealer"> ++ <property name="reveal-child">True</property> ++ <property name="transition-type">slide-right</property> + <child> +- <object class="GtkImage"> +- <property name="icon-name">document-edit-symbolic</property> +- <property name="icon-size">1</property> +- <property name="visible">true</property> +- </object> +- </child> +- <child internal-child="accessible"> +- <object class="AtkObject"> +- <property name="AtkObject::accessible-name" translatable="yes">Annotate document</property> ++ <object class="GtkBox"> ++ <property name="orientation">horizontal</property> ++ <property name="spacing">6</property> ++ <child> ++ <object class="EvPageActionWidget" id="page_selector"> ++ <property name="tooltip-text" translatable="yes">Select page or search in the outline</property> ++ <child internal-child="accessible"> ++ <object class="AtkObject"> ++ <property name="AtkObject::accessible-name" translatable="yes">Select page</property> ++ </object> ++ </child> ++ </object> ++ <packing> ++ <property name="pack-type">start</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkToggleButton" id="annots_button"> ++ <property name="action-name">win.toggle-edit-annots</property> ++ <property name="tooltip-text" translatable="yes">Annotate the document</property> ++ <child> ++ <object class="GtkImage"> ++ <property name="icon-name">document-edit-symbolic</property> ++ <property name="icon-size">1</property> ++ <property name="visible">true</property> ++ </object> ++ </child> ++ <child internal-child="accessible"> ++ <object class="AtkObject"> ++ <property name="AtkObject::accessible-name" translatable="yes">Annotate document</property> ++ </object> ++ </child> ++ </object> ++ <packing> ++ <property name="pack-type">start</property> ++ </packing> ++ </child> + </object> + </child> + </object> +- <packing> +- <property name="pack-type">start</property> +- </packing> + </child> + <child> + <object class="GtkMenuButton" id="action_menu_button"> +@@ -103,11 +115,17 @@ + </packing> + </child> + <child> +- <object class="EvZoomAction" id="zoom_action"> +- <signal name="activated" handler="ev_toolbar_zoom_selector_activated"/> +- <child internal-child="accessible"> +- <object class="AtkObject"> +- <property name="AtkObject::accessible-name" translatable="yes">Set zoom level</property> ++ <object class="GtkRevealer" id="zoom_revealer"> ++ <property name="reveal-child">True</property> ++ <property name="transition-type">slide-left</property> ++ <child> ++ <object class="EvZoomAction" id="zoom_action"> ++ <signal name="activated" handler="ev_toolbar_zoom_selector_activated"/> ++ <child internal-child="accessible"> ++ <object class="AtkObject"> ++ <property name="AtkObject::accessible-name" translatable="yes">Set zoom level</property> ++ </object> ++ </child> + </object> + </child> + </object> diff --git a/evince-mobile/0003-properties-view-Reduce-the-label-width-chars.patch b/evince-mobile/0003-properties-view-Reduce-the-label-width-chars.patch new file mode 100644 index 0000000..428b3bd --- /dev/null +++ b/evince-mobile/0003-properties-view-Reduce-the-label-width-chars.patch @@ -0,0 +1,22 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Wed, 11 Dec 2019 14:48:15 +0100 +Subject: properties-view: Reduce the label width chars + +This allows the window to fit phones. +--- + properties/ev-properties-view.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/properties/ev-properties-view.c b/properties/ev-properties-view.c +index 04aa656..972027a 100644 +--- a/properties/ev-properties-view.c ++++ b/properties/ev-properties-view.c +@@ -208,7 +208,7 @@ set_property (EvPropertiesView *properties, + + g_object_set (G_OBJECT (value_label), + "xalign", 0.0, +- "width_chars", 25, ++ "width_chars", 20, + "selectable", TRUE, + "ellipsize", PANGO_ELLIPSIZE_END, + "hexpand", TRUE, diff --git a/evince-mobile/0004-window-Port-it-to-phones.patch b/evince-mobile/0004-window-Port-it-to-phones.patch new file mode 100644 index 0000000..19bacd2 --- /dev/null +++ b/evince-mobile/0004-window-Port-it-to-phones.patch @@ -0,0 +1,467 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Tue, 10 Dec 2019 10:04:30 +0100 +Subject: window: Port it to phones + +Fixes https://source.puri.sm/Librem5/Apps_Issues/issues/150. +--- + shell/ev-window.c | 193 ++++++++++++++++++++++++++++++++---------------------- + 1 file changed, 113 insertions(+), 80 deletions(-) + +diff --git a/shell/ev-window.c b/shell/ev-window.c +index d8970e3..93ce02c 100644 +--- a/shell/ev-window.c ++++ b/shell/ev-window.c +@@ -135,8 +135,9 @@ typedef struct { + + GtkWidget *main_box; + GtkWidget *toolbar; +- GtkWidget *hpaned; ++ GtkWidget *flap; + GtkWidget *view_box; ++ GtkWidget *sidebar_stack; + GtkWidget *sidebar; + GtkWidget *search_box; + GtkWidget *search_bar; +@@ -264,7 +265,7 @@ typedef struct { + #define GS_LAST_PICTURES_DIRECTORY "pictures-directory" + #define GS_ALLOW_LINKS_CHANGE_ZOOM "allow-links-change-zoom" + +-#define SIDEBAR_DEFAULT_SIZE 132 ++#define SIDEBAR_DEFAULT_SIZE 246 + #define LINKS_SIDEBAR_ID "links" + #define THUMBNAILS_SIDEBAR_ID "thumbnails" + #define ATTACHMENTS_SIDEBAR_ID "attachments" +@@ -294,9 +295,6 @@ static const gchar *document_print_settings[] = { + }; + + static void ev_window_update_actions_sensitivity (EvWindow *ev_window); +-static void ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, +- GParamSpec *pspec, +- EvWindow *ev_window); + static void ev_window_set_page_mode (EvWindow *window, + EvWindowPageMode page_mode); + static void ev_window_load_job_cb (EvJob *job, +@@ -667,7 +665,8 @@ update_chrome_visibility (EvWindow *window) + sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && priv->document && !presentation; + + set_widget_visibility (priv->toolbar, toolbar); +- set_widget_visibility (priv->sidebar, sidebar); ++ set_widget_visibility (priv->sidebar, TRUE); ++ hdy_flap_set_reveal_flap (HDY_FLAP (priv->flap), sidebar); + } + + static void +@@ -1280,15 +1279,11 @@ static void + setup_sidebar_from_metadata (EvWindow *window) + { + gchar *page_id; +- gint sidebar_size; + EvWindowPrivate *priv = GET_PRIVATE (window); + + if (!priv->metadata) + return; + +- if (ev_metadata_get_int (priv->metadata, "sidebar_size", &sidebar_size)) +- gtk_paned_set_position (GTK_PANED (priv->hpaned), sidebar_size); +- + if (ev_metadata_get_string (priv->metadata, "sidebar_page", &page_id)) + ev_window_sidebar_set_current_page (window, page_id); + } +@@ -1583,10 +1578,6 @@ ev_window_setup_default (EvWindow *ev_window) + g_settings_get_boolean (settings, "show-sidebar")); + update_chrome_visibility (ev_window); + +- /* Sidebar */ +- gtk_paned_set_position (GTK_PANED (priv->hpaned), +- g_settings_get_int (settings, "sidebar-size")); +- + /* Document model */ + ev_document_model_set_continuous (model, g_settings_get_boolean (settings, "continuous")); + ev_document_model_set_dual_page (model, g_settings_get_boolean (settings, "dual-page")); +@@ -1705,7 +1696,7 @@ ev_window_setup_document (EvWindow *ev_window) + + if (EV_WINDOW_IS_PRESENTATION (priv)) + gtk_widget_grab_focus (priv->presentation_view); +- else if (!gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (priv->search_bar))) ++ else if (!hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (priv->search_bar))) + gtk_widget_grab_focus (priv->view); + + return G_SOURCE_REMOVE; +@@ -2023,7 +2014,7 @@ ev_window_reload_job_cb (EvJob *job, + } + + /* Restart the search after reloading */ +- if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (priv->search_bar))) ++ if (hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (priv->search_bar))) + ev_search_box_restart (EV_SEARCH_BOX (priv->search_box)); + + ev_window_clear_reload_job (ev_window); +@@ -2536,7 +2527,7 @@ ev_window_open_recent_view (EvWindow *ev_window) + if (priv->recent_view) + return; + +- gtk_widget_hide (priv->hpaned); ++ gtk_widget_hide (priv->flap); + + priv->recent_view = EV_RECENT_VIEW (ev_recent_view_new ()); + g_signal_connect_object (priv->recent_view, +@@ -2565,7 +2556,7 @@ ev_window_destroy_recent_view (EvWindow *ev_window) + + gtk_widget_destroy (GTK_WIDGET (priv->recent_view)); + priv->recent_view = NULL; +- gtk_widget_show (priv->hpaned); ++ gtk_widget_show (priv->flap); + } + + static void +@@ -4099,9 +4090,7 @@ ev_window_save_settings (EvWindow *ev_window) + g_settings_set_double (settings, "zoom", zoom); + } + g_settings_set_boolean (settings, "show-sidebar", +- gtk_widget_get_visible (priv->sidebar)); +- g_settings_set_int (settings, "sidebar-size", +- gtk_paned_get_position (GTK_PANED (priv->hpaned))); ++ hdy_flap_get_reveal_flap (HDY_FLAP (priv->flap))); + g_settings_set_string (settings, "sidebar-page", + ev_window_sidebar_get_current_page_id (ev_window)); + g_settings_set_boolean (settings, "enable-spellchecking", +@@ -4536,7 +4525,7 @@ ev_window_cmd_edit_find_next (GSimpleAction *action, + if (EV_WINDOW_IS_PRESENTATION (priv)) + return; + +- search_mode_enabled = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (priv->search_bar)); ++ search_mode_enabled = hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (priv->search_bar)); + ev_window_show_find_bar (ev_window, FALSE); + + /* Use idle to make sure view allocation happens before find */ +@@ -4565,7 +4554,7 @@ ev_window_cmd_edit_find_previous (GSimpleAction *action, + if (EV_WINDOW_IS_PRESENTATION (priv)) + return; + +- search_mode_enabled = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (priv->search_bar)); ++ search_mode_enabled = hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (priv->search_bar)); + ev_window_show_find_bar (ev_window, FALSE); + + /* Use idle to make sure view allocation happens before find */ +@@ -4586,18 +4575,6 @@ ev_window_cmd_edit_copy (GSimpleAction *action, + ev_view_copy (EV_VIEW (priv->view)); + } + +-static void +-ev_window_sidebar_position_change_cb (GObject *object, +- GParamSpec *pspec, +- EvWindow *ev_window) +-{ +- EvWindowPrivate *priv = GET_PRIVATE (ev_window); +- +- if (priv->metadata && !ev_window_is_empty (ev_window)) +- ev_metadata_set_int (priv->metadata, "sidebar_size", +- gtk_paned_get_position (GTK_PANED (object))); +-} +- + static void + ev_window_update_links_model (EvWindow *window) + { +@@ -4805,7 +4782,7 @@ ev_window_run_presentation (EvWindow *window) + priv->presentation_view, + TRUE, TRUE, 0); + +- gtk_widget_hide (priv->hpaned); ++ gtk_widget_hide (priv->flap); + update_chrome_visibility (window); + + gtk_widget_grab_focus (priv->presentation_view); +@@ -4840,7 +4817,7 @@ ev_window_stop_presentation (EvWindow *window, + priv->presentation_view); + priv->presentation_view = NULL; + +- gtk_widget_show (priv->hpaned); ++ gtk_widget_show (priv->flap); + update_chrome_visibility (window); + if (unfullscreen_window) + gtk_window_unfullscreen (GTK_WINDOW (window)); +@@ -5208,7 +5185,7 @@ ev_window_cmd_escape (GSimpleAction *action, + + ev_view_autoscroll_stop (EV_VIEW (priv->view)); + +- if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (priv->search_bar))) ++ if (hdy_search_bar_get_search_mode (HDY_SEARCH_BAR (priv->search_bar))) + ev_window_close_find_bar (window); + else if (ev_document_model_get_fullscreen (priv->model)) + ev_window_stop_fullscreen (window, TRUE); +@@ -5463,14 +5440,12 @@ ev_window_sidebar_current_page_changed_cb (EvSidebar *ev_sidebar, + } + + static void +-ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, +- GParamSpec *pspec, +- EvWindow *ev_window) ++flap_reveal_changed_cb (EvWindow *ev_window) + { + EvWindowPrivate *priv = GET_PRIVATE (ev_window); + + if (!EV_WINDOW_IS_PRESENTATION (priv)) { +- gboolean visible = gtk_widget_get_visible (GTK_WIDGET (ev_sidebar)); ++ gboolean visible = hdy_flap_get_reveal_flap (HDY_FLAP (priv->flap)); + + g_action_group_change_action_state (G_ACTION_GROUP (ev_window), "show-side-pane", + g_variant_new_boolean (visible)); +@@ -5480,6 +5455,10 @@ ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, + visible); + if (!visible) + gtk_widget_grab_focus (priv->view); ++ ++ update_chrome_flag (ev_window, EV_CHROME_SIDEBAR, visible); ++ update_chrome_visibility (ev_window); ++ ev_toolbar_set_sidebar_visible (EV_TOOLBAR (priv->toolbar), visible); + } + } + +@@ -5829,12 +5808,12 @@ search_next_cb (EvSearchBox *search_box, + } + + static void +-search_bar_search_mode_enabled_changed (GtkSearchBar *search_bar, ++search_bar_search_mode_enabled_changed (HdySearchBar *search_bar, + GParamSpec *param, + EvWindow *ev_window) + { + EvWindowPrivate *priv = GET_PRIVATE (ev_window); +- gboolean enabled = gtk_search_bar_get_search_mode (search_bar); ++ gboolean enabled = hdy_search_bar_get_search_mode (search_bar); + + ev_view_find_set_highlight_search (EV_VIEW (priv->view), enabled); + ev_window_update_actions_sensitivity (ev_window); +@@ -5858,7 +5837,8 @@ ev_window_show_find_bar (EvWindow *ev_window, + { + EvWindowPrivate *priv = GET_PRIVATE (ev_window); + +- if (gtk_widget_get_visible (priv->find_sidebar)) { ++ if (gtk_stack_get_visible_child (GTK_STACK (priv->sidebar_stack)) == priv->find_sidebar) { ++ hdy_flap_set_reveal_flap (HDY_FLAP (priv->flap), TRUE); + gtk_widget_grab_focus (priv->search_box); + return; + } +@@ -5874,13 +5854,10 @@ ev_window_show_find_bar (EvWindow *ev_window, + ev_history_freeze (priv->history); + + g_object_ref (priv->sidebar); +- gtk_container_remove (GTK_CONTAINER (priv->hpaned), priv->sidebar); +- gtk_paned_pack1 (GTK_PANED (priv->hpaned), +- priv->find_sidebar, FALSE, FALSE); +- gtk_widget_show (priv->find_sidebar); ++ gtk_stack_set_visible_child (GTK_STACK (priv->sidebar_stack), priv->find_sidebar); + + +- gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->search_bar), TRUE); ++ hdy_search_bar_set_search_mode (HDY_SEARCH_BAR (priv->search_bar), TRUE); + gtk_widget_grab_focus (priv->search_box); + g_action_group_change_action_state (G_ACTION_GROUP (ev_window), "toggle-find", g_variant_new_boolean (TRUE)); + +@@ -5898,17 +5875,13 @@ ev_window_close_find_bar (EvWindow *ev_window) + { + EvWindowPrivate *priv = GET_PRIVATE (ev_window); + +- if (!gtk_widget_get_visible (priv->find_sidebar)) ++ if (gtk_stack_get_visible_child (GTK_STACK (priv->sidebar_stack)) != priv->find_sidebar) + return; + + g_object_ref (priv->find_sidebar); +- gtk_container_remove (GTK_CONTAINER (priv->hpaned), +- priv->find_sidebar); +- gtk_paned_pack1 (GTK_PANED (priv->hpaned), +- priv->sidebar, FALSE, FALSE); +- gtk_widget_hide (priv->find_sidebar); ++ gtk_stack_set_visible_child (GTK_STACK (priv->sidebar_stack), priv->sidebar); + +- gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->search_bar), FALSE); ++ hdy_search_bar_set_search_mode (HDY_SEARCH_BAR (priv->search_bar), FALSE); + gtk_widget_grab_focus (priv->view); + g_action_group_change_action_state (G_ACTION_GROUP (ev_window), "toggle-find", g_variant_new_boolean (FALSE)); + +@@ -6514,6 +6487,48 @@ window_state_event_cb (EvWindow *window, GdkEventWindowState *event, gpointer du + return FALSE; + } + ++static void ++window_size_allocate_cb (EvWindow *window) ++{ ++ EvWindowPrivate *priv = GET_PRIVATE (window); ++ gboolean is_maximized, is_fullscreen; ++ gboolean is_narrow, is_mobile_landscape, is_mobile; ++ int width, height; ++ GdkDisplay *display; ++ GdkWindow *surface; ++ GdkMonitor *monitor = NULL; ++ GdkRectangle geometry = {}; ++ ++ gtk_window_get_size (GTK_WINDOW (window), &width, &height); ++ ++ /* Get the monitor to guess whether we are on a mobile or not. If not found, ++ * fallback to the window size. ++ */ ++ display = gtk_widget_get_display (GTK_WIDGET (window)); ++ surface = gtk_widget_get_window (GTK_WIDGET (window)); ++ ++ if (display != NULL && surface != NULL) ++ monitor = gdk_display_get_monitor_at_window (display, surface); ++ ++ if (monitor != NULL) ++ gdk_monitor_get_geometry (monitor, &geometry); ++ else ++ geometry.height = height; ++ ++ is_maximized = gtk_window_is_maximized (GTK_WINDOW (window)); ++ is_fullscreen = GDK_IS_WINDOW (surface) && (gdk_window_get_state (surface) & GDK_WINDOW_STATE_FULLSCREEN) > 0; ++ ++ is_narrow = width <= 600; ++ is_mobile_landscape = geometry.height <= 400 && ++ (is_maximized || is_fullscreen); ++ ++ is_mobile = is_narrow || is_mobile_landscape; ++ ++ hdy_flap_set_fold_policy (HDY_FLAP (priv->flap), ++ is_mobile ? HDY_FLAP_FOLD_POLICY_ALWAYS : HDY_FLAP_FOLD_POLICY_AUTO); ++ ev_toolbar_set_mobile (EV_TOOLBAR (priv->toolbar), is_mobile); ++} ++ + static gboolean + window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer dummy) + { +@@ -7409,7 +7424,9 @@ ev_window_init (EvWindow *ev_window) + GtkBuilder *builder; + GError *error = NULL; + GtkWidget *sidebar_widget; ++ GtkWidget *separator; + GtkWidget *overlay; ++ GtkWidget *clamp; + GObject *mpkeys; + guint page_cache_mb; + gboolean allow_links_change_zoom; +@@ -7425,6 +7442,8 @@ ev_window_init (EvWindow *ev_window) + G_CALLBACK (window_configure_event_cb), NULL); + g_signal_connect (ev_window, "window_state_event", + G_CALLBACK (window_state_event_cb), NULL); ++ g_signal_connect (ev_window, "size-allocate", ++ G_CALLBACK (window_size_allocate_cb), NULL); + + priv = GET_PRIVATE (ev_window); + +@@ -7512,17 +7531,19 @@ ev_window_init (EvWindow *ev_window) + priv->annots_toolbar, FALSE, TRUE, 0); + + /* Search Bar */ +- priv->search_bar = gtk_search_bar_new (); ++ priv->search_bar = hdy_search_bar_new (); ++ ++ clamp = hdy_clamp_new (); ++ gtk_container_add (GTK_CONTAINER (priv->search_bar), clamp); ++ gtk_widget_show (clamp); + + priv->search_box = ev_search_box_new (priv->model); + search_entry = GTK_ENTRY (ev_search_box_get_entry (EV_SEARCH_BOX (priv->search_box))); +- gtk_entry_set_width_chars (search_entry, 32); +- gtk_entry_set_max_length (search_entry, 512); +- gtk_container_add (GTK_CONTAINER (priv->search_bar), ++ gtk_container_add (GTK_CONTAINER (clamp), + priv->search_box); + gtk_widget_show (priv->search_box); + +- /* We don't use gtk_search_bar_connect_entry, because it clears the entry when the ++ /* We don't use hdy_search_bar_connect_entry, because it clears the entry when the + * search is closed, but we want to keep the current search. + */ + gtk_box_pack_start (GTK_BOX (priv->main_box), +@@ -7530,22 +7551,26 @@ ev_window_init (EvWindow *ev_window) + gtk_widget_show (priv->search_bar); + + /* Add the main area */ +- priv->hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); +- g_signal_connect (priv->hpaned, +- "notify::position", +- G_CALLBACK (ev_window_sidebar_position_change_cb), +- ev_window); +- +- gtk_paned_set_position (GTK_PANED (priv->hpaned), SIDEBAR_DEFAULT_SIZE); +- gtk_box_pack_start (GTK_BOX (priv->main_box), priv->hpaned, ++ priv->flap = hdy_flap_new (); ++ hdy_flap_set_swipe_to_open (HDY_FLAP (priv->flap), FALSE); ++ hdy_flap_set_locked (HDY_FLAP (priv->flap), TRUE); ++ gtk_box_pack_start (GTK_BOX (priv->main_box), priv->flap, + TRUE, TRUE, 0); +- gtk_widget_show (priv->hpaned); ++ gtk_widget_show (priv->flap); ++ ++ priv->sidebar_stack = gtk_stack_new (); ++ hdy_flap_set_flap (HDY_FLAP (priv->flap), priv->sidebar_stack); ++ gtk_widget_set_size_request (priv->sidebar_stack, SIDEBAR_DEFAULT_SIZE, -1); ++ gtk_widget_set_hexpand (priv->sidebar_stack, FALSE); ++ gtk_widget_set_hexpand_set (priv->sidebar_stack, TRUE); ++ gtk_style_context_add_class (gtk_widget_get_style_context (priv->sidebar_stack), ++ "background"); ++ gtk_widget_show (priv->sidebar_stack); + + priv->sidebar = ev_sidebar_new (); + ev_sidebar_set_model (EV_SIDEBAR (priv->sidebar), + priv->model); +- gtk_paned_pack1 (GTK_PANED (priv->hpaned), +- priv->sidebar, FALSE, FALSE); ++ gtk_container_add (GTK_CONTAINER (priv->sidebar_stack), priv->sidebar); + gtk_widget_show (priv->sidebar); + + /* Stub sidebar, for now */ +@@ -7628,6 +7653,10 @@ ev_window_init (EvWindow *ev_window) + LAYERS_SIDEBAR_ID, _("Layers"), + LAYERS_SIDEBAR_ICON); + ++ separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL); ++ hdy_flap_set_separator (HDY_FLAP (priv->flap), separator); ++ gtk_widget_show (separator); ++ + priv->view_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + + overlay = gtk_overlay_new (); +@@ -7647,8 +7676,10 @@ ev_window_init (EvWindow *ev_window) + TRUE, TRUE, 0); + gtk_widget_show (overlay); + +- gtk_paned_add2 (GTK_PANED (priv->hpaned), +- priv->view_box); ++ hdy_flap_set_content (HDY_FLAP (priv->flap), priv->view_box); ++ hdy_flap_set_reveal_flap (HDY_FLAP (priv->flap), FALSE); ++ gtk_widget_set_size_request (priv->view_box, 360, -1); ++ gtk_widget_set_hexpand (priv->view_box, TRUE); + gtk_widget_show (priv->view_box); + + priv->view = ev_view_new (); +@@ -7734,6 +7765,8 @@ ev_window_init (EvWindow *ev_window) + "result-activated", + G_CALLBACK (find_sidebar_result_activated_cb), + ev_window); ++ gtk_container_add (GTK_CONTAINER (priv->sidebar_stack), priv->find_sidebar); ++ gtk_widget_show (priv->find_sidebar); + + /* We own a ref on these widgets, as we can swap them in and out */ + g_object_ref (priv->view); +@@ -7785,10 +7818,10 @@ ev_window_init (EvWindow *ev_window) + ev_window); + + /* Connect sidebar signals */ +- g_signal_connect (priv->sidebar, +- "notify::visible", +- G_CALLBACK (ev_window_sidebar_visibility_changed_cb), +- ev_window); ++ g_signal_connect_swapped (priv->flap, ++ "notify::reveal-flap", ++ G_CALLBACK (flap_reveal_changed_cb), ++ ev_window); + g_signal_connect (priv->sidebar, + "notify::current-page", + G_CALLBACK (ev_window_sidebar_current_page_changed_cb), +@@ -7969,5 +8002,5 @@ ev_window_set_divider_position (EvWindow *ev_window, + + priv = GET_PRIVATE (ev_window); + +- gtk_paned_set_position (GTK_PANED (priv->hpaned), sidebar_width); ++ gtk_widget_set_size_request (priv->sidebar_stack, sidebar_width, -1); + } diff --git a/evince-mobile/PKGBUILD b/evince-mobile/PKGBUILD new file mode 100644 index 0000000..777461e --- /dev/null +++ b/evince-mobile/PKGBUILD @@ -0,0 +1,93 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor: Kevin MacMartin <prurigro@gmail.com> +# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org> +# Contributor: Jan de Groot <jgc@archlinux.org> + +_pkgname=evince +pkgname=$_pkgname-mobile +pkgver=46.0 +pkgrel=1 +pkgdesc="Document viewer (PDF, PostScript, XPS, djvu, dvi, tiff, cbr, cbz, cb7, cbt)" +url="https://wiki.gnome.org/Apps/Evince" +arch=('x86_64' 'armv7h' 'aarch64') +license=('GPL-2.0-or-later') +depends=( + dconf + djvulibre + gnome-desktop + gsettings-desktop-schemas + gsfonts + gspell + gst-plugins-base-libs + gtk3 + gvfs + libarchive + libgxps + libhandy + libsecret + libspectre + libsynctex + libxml2 + poppler-glib +) +makedepends=( + appstream-glib + gi-docgen + git + gobject-introspection + meson + texlive-bin + yelp-tools +) +optdepends=('texlive-bin: DVI support') +provides=(libev{document,view}3.so $_pkgname) +conflicts=($_pkgname) +_commit=87a7a199c785e9b53279b2ba20134a341786ce3f # tags/46.0^0 +source=("git+https://gitlab.gnome.org/GNOME/evince.git#commit=$_commit" + '0001-toolbar-Allow-to-toggle-the-sidebar-button.patch' + '0002-toolbar-Allow-hiding-zoom-annotation-and-page-widgets.patch' + '0003-properties-view-Reduce-the-label-width-chars.patch' + '0004-window-Port-it-to-phones.patch') +sha256sums=('c1fb163ba552999714380c05d9189019f221b6de7b7554fb09d6dfbc74b5638d' + '22a5c037d60cce4869193a294f90c071dab2a47ff97f9632eb22ba0f8377b4a0' + '0153d21c3da3a65c28c246bc31a44b307c1af4e6e56f897b8e8ec15b92974df3' + 'b184beef8d11f3d1196869744865b94343b75440f326582e51cb7fb3f4beb176' + 'f125e441c0d5cc80599859347903f6b3e1d82cab25b30df508ed0bb6892c8a45') + +pkgver() { + cd $_pkgname + git describe --tags | sed 's/[^-]*-g/r&/;s/-/+/g' +} + +prepare() { + cd $_pkgname + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + local meson_options=( + -D ps=enabled + ) + + arch-meson $_pkgname build "${meson_options[@]}" + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" + + # We don't need to provide evince-lib-docs. + rm -r "$pkgdir"/usr/share/doc/lib* +} diff --git a/feedbackd/PKGBUILD b/feedbackd/PKGBUILD new file mode 100644 index 0000000..2c5ebf3 --- /dev/null +++ b/feedbackd/PKGBUILD @@ -0,0 +1,41 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=feedbackd +pkgver=0.3.0 +pkgrel=1 +pkgdesc="A daemon to provide haptic, led and audio feedback triggered by application events" +url="https://source.puri.sm/Librem5/feedbackd" +arch=('x86_64' 'armv7h' 'aarch64') +license=('GPL-3.0-or-later AND LGPL-2.1-or-later') +depends=('gobject-introspection' 'gsound' 'json-glib' 'libgmobile' 'libgudev') +makedepends=('git' 'meson' 'vala') +_fbd_themes_name=feedbackd-device-themes +_fbd_themes_ver=0.1.0 +source=(https://source.puri.sm/Librem5/$pkgname/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz + https://source.puri.sm/Librem5/${_fbd_themes_name}/-/archive/v${_fbd_themes_ver}/${_fbd_themes_name}-v${_fbd_themes_ver}.tar.gz) + +build() { + arch-meson $pkgname-v${pkgver} output + ninja -C output +} + +check() { + ninja -C output test +} + +package() { + DESTDIR="$pkgdir" ninja -C output install + install -Dm644 "$srcdir"/$pkgname-v${pkgver}/debian/feedbackd.udev \ + "$pkgdir"/usr/lib/udev/rules.d/90-feedbackd.rules + sed -i 's/libexec/lib/g' "$pkgdir"/usr/lib/udev/rules.d/90-feedbackd.rules + + # FIXME: We aren't supposed to abuse video group, but we need to find a + # efficient way to add user to feedbackd group. + sed -i 's/-G feedbackd/-G video/g' "$pkgdir"/usr/lib/udev/rules.d/90-feedbackd.rules + + # It would make much more sense to bundle fbd device configuration with the pkg. + find ${srcdir}/${_fbd_themes_name}-v${_fbd_themes_ver}/data -name \*.json \ + -exec cp {} ${pkgdir}/usr/share/feedbackd/themes \; +} + +md5sums=('9203393ae6e2d9debdd58ec32a827a24' + 'bf51ba9cb3dbd19878781bd2544c4b02') diff --git a/gnome-calls/PKGBUILD b/gnome-calls/PKGBUILD new file mode 100644 index 0000000..79b97b5 --- /dev/null +++ b/gnome-calls/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=gnome-calls +pkgver=46.3 +pkgrel=1 +pkgdesc="Make and receive PSTN phone calls" +url="https://gitlab.gnome.org/GNOME/calls" +license=('GPL-3.0-or-later') +arch=('x86_64' 'armv7h' 'aarch64') +depends=( + 'callaudiod' + 'evolution-data-server' + 'feedbackd' + 'folks' + 'gobject-introspection' + 'gom' + 'gst-plugins-bad' + 'gst-plugins-good' + 'gtk3' + 'libhandy' + 'libpeas' + 'modemmanager' + 'sofia-sip' + 'wayland-protocols' + ) +makedepends=( + 'git' + 'glib2-devel' + 'meson' + 'ninja' + 'python-docutils' + 'python-packaging' + 'vala' + ) +checkdepends=('xorg-server-xvfb') +replaces=('calls') +_commit="f8c247148717bbad9414a9b246d88d1e685e68ed" # tags/v46.3 +source=("git+https://gitlab.gnome.org/GNOME/calls.git#commit=$_commit") +sha256sums=('4eddd4cbdd10c9f3f611573b05b5ce7275f1dab3f6ae1aeda9e4b2fc2ea2494b') + +pkgver() { + cd calls + git describe --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' +} + +prepare() { + cd calls + git submodule--helper update --init + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + arch-meson calls output + ninja -C output +} + +## SIP test hanging +#check() { +# xvfb-run ninja -C output test +#} + +package() { + DESTDIR="$pkgdir" ninja -C output install +} diff --git a/gnome-clocks-mobile/0001-timer-Use-name-that-can-be-added-to-the-event-naming.patch b/gnome-clocks-mobile/0001-timer-Use-name-that-can-be-added-to-the-event-naming.patch new file mode 100644 index 0000000..f70f277 --- /dev/null +++ b/gnome-clocks-mobile/0001-timer-Use-name-that-can-be-added-to-the-event-naming.patch @@ -0,0 +1,26 @@ +From 43940ccd1f5976b54fc39b0882512815cdf6a0c3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org> +Date: Mon, 24 Feb 2020 13:00:59 +0100 +Subject: [PATCH 01/16] timer: Use name that can be added to the event naming + spec + +--- + src/timer-face.vala | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/timer-face.vala b/src/timer-face.vala +index 5cad12f..8ee6732 100644 +--- a/src/timer-face.vala ++++ b/src/timer-face.vala +@@ -71,7 +71,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + save (); + }); + +- bell = new Utils.Bell ("complete"); ++ bell = new Utils.Bell ("timeout-completed"); + notification = new GLib.Notification (_("Time is up!")); + notification.set_body (_("Timer countdown finished")); + notification.set_priority (HIGH); +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0002-Use-libfeedback-in-instead-of-GSound.patch b/gnome-clocks-mobile/0002-Use-libfeedback-in-instead-of-GSound.patch new file mode 100644 index 0000000..74ca953 --- /dev/null +++ b/gnome-clocks-mobile/0002-Use-libfeedback-in-instead-of-GSound.patch @@ -0,0 +1,151 @@ +From 91f0925ed8ffea4898840cd0c7e9c43c5487d2ca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org> +Date: Sat, 22 Feb 2020 18:51:42 +0100 +Subject: [PATCH 02/16] Use libfeedback in instead of GSound + +This allows to use haptic (and later led) based +feedback on top of audio. +--- + meson.build | 2 +- + src/main.vala | 9 ++++++++- + src/meson.build | 3 ++- + src/utils.vala | 47 +++++++++++++++++++++-------------------------- + 4 files changed, 32 insertions(+), 29 deletions(-) + +diff --git a/meson.build b/meson.build +index 032f16d..a5ffc9b 100644 +--- a/meson.build ++++ b/meson.build +@@ -14,7 +14,7 @@ glib = dependency('glib-2.0', version: '>= 2.68') + gio = dependency('gio-2.0', version: '>= 2.58') + gobject = dependency('gobject-2.0', version: '>= 2.58') + gtk = dependency('gtk+-3.0', version: '>=3.20') +-gsound = dependency('gsound', version: '>=0.98') ++libfeedback = dependency('libfeedback-0.0', version: '>= 0.0.0') + gweather = dependency('gweather-3.0', version: '>=3.32.0') + gnomedesktop = dependency('gnome-desktop-3.0', version: '>=3.8') + geocodeglib = dependency('geocode-glib-1.0', version: '>=1.0') +diff --git a/src/main.vala b/src/main.vala +index 97d3350..905ef7f 100644 +--- a/src/main.vala ++++ b/src/main.vala +@@ -24,6 +24,13 @@ int main (string[] args) { + + Environment.set_application_name (_("Clocks")); + ++ try { ++ Lfb.init(Config.APP_ID); ++ } catch (GLib.Error e) { ++ warning ("Couldn't init libfeedback: %s", e.message); ++ } + var app = new Clocks.Application (); +- return app.run (args); ++ var ret = app.run (args); ++ Lfb.uninit(); ++ return ret; + } +diff --git a/src/meson.build b/src/meson.build +index 4c51188..e5b0edd 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -59,6 +59,7 @@ clocks_c_args = [ + '-include', 'config.h', + '-DGWEATHER_I_KNOW_THIS_IS_UNSTABLE', + '-DGNOME_DESKTOP_USE_UNSTABLE_API', ++ '-DLIBFEEDBACK_USE_UNSTABLE_API', + ] + + clocks_dependencies = [ +@@ -66,10 +67,10 @@ clocks_dependencies = [ + gio, + gobject, + gtk, +- gsound, + gweather, + gnomedesktop, + geocodeglib, ++ libfeedback, + libgeoclue, + libhandy, + math +diff --git a/src/utils.vala b/src/utils.vala +index d5594e7..1b38fba 100644 +--- a/src/utils.vala ++++ b/src/utils.vala +@@ -392,44 +392,31 @@ public class Weekdays { + } + + public class Bell : Object { +- private GSound.Context? gsound; + private GLib.Cancellable cancellable; ++ private Lfb.Event event; + private string soundtheme; +- private string sound; ++ private string eventname; + +- public Bell (string soundid) { +- try { +- gsound = new GSound.Context (); +- } catch (GLib.Error e) { +- warning ("Sound could not be initialized, error: %s", e.message); +- } +- +- var settings = new GLib.Settings ("org.gnome.desktop.sound"); ++ public Bell (string eventid) { ++ var settings = new GLib.Settings("org.gnome.desktop.sound"); + soundtheme = settings.get_string ("theme-name"); +- sound = soundid; +- cancellable = new GLib.Cancellable (); ++ eventname = eventid; ++ cancellable = new GLib.Cancellable(); + } + + private async void ring_real (bool repeat) { +- if (gsound == null) { ++ if (!Lfb.is_initted()) + return; +- } +- +- if (cancellable.is_cancelled ()) { +- cancellable.reset (); +- } + ++ event = new Lfb.Event (eventname); ++ if (repeat) ++ event.timeout = 0; + try { +- do { +- yield ((GSound.Context) gsound).play_full (cancellable, +- GSound.Attribute.EVENT_ID, sound, +- GSound.Attribute.CANBERRA_XDG_THEME_NAME, soundtheme, +- GSound.Attribute.MEDIA_ROLE, "alarm"); +- } while (repeat); ++ yield event.trigger_feedback_async (cancellable); + } catch (GLib.IOError.CANCELLED e) { + // ignore + } catch (GLib.Error e) { +- warning ("Error playing sound: %s", e.message); ++ warning ("Error triggering feedback for event %s: %s", eventname, e.message); + } + } + +@@ -442,7 +429,15 @@ public class Bell : Object { + } + + public void stop () { +- cancellable.cancel (); ++ event.end_feedback_async.begin (cancellable, (obj, res) => { ++ try { ++ event.end_feedback_async.end(res); ++ } catch (GLib.IOError.CANCELLED e) { ++ // ignore ++ } catch (GLib.Error e) { ++ warning ("Error ending feedback for event %s: %s", eventname, e.message); ++ } ++ }); + } + } + +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0003-timers-persist-running-timers.patch b/gnome-clocks-mobile/0003-timers-persist-running-timers.patch new file mode 100644 index 0000000..251eca2 --- /dev/null +++ b/gnome-clocks-mobile/0003-timers-persist-running-timers.patch @@ -0,0 +1,200 @@ +From 9a0a5995f58b07bd2a9aedbe34c712b07f801415 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Thu, 26 Nov 2020 16:45:49 +0100 +Subject: [PATCH 03/16] timers: persist running timers + +Persist timer state between app starts by storing the remaining +time and the timestamp of when it was started. +--- + src/timer-face.vala | 2 ++ + src/timer-item.vala | 69 +++++++++++++++++++++++++++++++++++++-------- + src/timer-row.vala | 15 ++++++++-- + 3 files changed, 72 insertions(+), 14 deletions(-) + +diff --git a/src/timer-face.vala b/src/timer-face.vala +index 8ee6732..1e8e650 100644 +--- a/src/timer-face.vala ++++ b/src/timer-face.vala +@@ -56,6 +56,8 @@ public class Face : Gtk.Stack, Clocks.Clock { + ((Item)timer).ring.connect (() => ring ()); + ((Item)timer).notify["state"].connect (() => { + this.is_running = this.get_total_active_timers () != 0; ++ /* We need to save state changes */ ++ save (); + }); + return row; + }); +diff --git a/src/timer-item.vala b/src/timer-item.vala +index b226d83..e2a55a5 100644 +--- a/src/timer-item.vala ++++ b/src/timer-item.vala +@@ -41,6 +41,7 @@ public class Item : Object, ContentItem { + private int stored_minute; + private int stored_second; + ++ private GLib.DateTime? start_time; + + public signal void ring (); + public signal void countdown_updated (int hours, int minutes, int seconds); +@@ -52,6 +53,12 @@ public class Item : Object, ContentItem { + public void serialize (GLib.VariantBuilder builder) { + builder.open (new GLib.VariantType ("a{sv}")); + builder.add ("{sv}", "duration", new GLib.Variant.int32 (get_total_seconds ())); ++ if (span > 0) { ++ builder.add ("{sv}", "time_left", new GLib.Variant.int32 ((int32) Math.ceil (span))); ++ } ++ if (start_time != null) { ++ builder.add ("{sv}", "start_time", new GLib.Variant.int64 (((!) start_time).to_unix ())); ++ } + if (name != null) { + builder.add ("{sv}", "name", new GLib.Variant.string ((string) name)); + } +@@ -63,10 +70,18 @@ public class Item : Object, ContentItem { + Variant val; + int duration = 0; + string? name = null; ++ int span = 0; ++ GLib.DateTime? start_time = null; + + var iter = time_variant.iterator (); + while (iter.next ("{sv}", out key, out val)) { + switch (key) { ++ case "time_left": ++ span = (int32) val; ++ break; ++ case "start_time": ++ start_time = new GLib.DateTime.from_unix_local ((int64) val); ++ break; + case "duration": + duration = (int32) val; + break; +@@ -76,33 +91,63 @@ public class Item : Object, ContentItem { + } + } + +- return duration != 0 ? (Item?) new Item.from_seconds (duration, name) : null; ++ return duration != 0 ? (Item?) new Item.from_seconds (duration, name, start_time, (double) span) : null; + } + +- public Item.from_seconds (int seconds, string? name) { +- ++ public Item.from_seconds (int seconds, ++ string? name, ++ GLib.DateTime? start_time = null, ++ double time_left = 0) { + int rest = 0; + int h = seconds / 3600; + rest = seconds - h * 3600; + int m = rest / 60; + int s = rest - m * 60; + +- this (h, m, s, name); ++ this (h, m, s, name, start_time, time_left); + } + +- public Item (int h, int m, int s, string? name) { ++ public Item (int h, ++ int m, ++ int s, ++ string? name, ++ GLib.DateTime? start_time = null, ++ double time_left = 0) { + Object (name: name); + hours = h; + minutes = m; + seconds = s; + +- span = get_total_seconds (); + timer = new GLib.Timer (); + +- timeout_id = 0; ++ if (start_time != null) { ++ this.start_time = start_time; ++ start (); ++ } else if (time_left > 0) { ++ this.span = time_left; ++ state = State.PAUSED; ++ } ++ } ++ ++ public void update_countdown () { ++ int h, m, s; ++ if (state == State.STOPPED) { ++ countdown_updated (hours, minutes, seconds); ++ }else { ++ Utils.time_to_hms (span, out h, out m, out s, null); ++ countdown_updated (h, m, s); ++ } + } + + public virtual signal void start () { ++ if (start_time == null) { ++ start_time = new GLib.DateTime.now (); ++ if (span == 0) ++ span = get_total_seconds (); ++ } else { ++ span = get_total_seconds () - new GLib.DateTime.now ().difference ((!) start_time) / TimeSpan.SECOND; ++ } ++ + state = State.RUNNING; + timeout_id = GLib.Timeout.add (100, () => { + var e = timer.elapsed (); +@@ -134,16 +179,18 @@ public class Item : Object, ContentItem { + } + + public virtual signal void pause () { +- state = State.PAUSED; ++ start_time = null; + span -= timer.elapsed (); + timer.stop (); ++ state = State.PAUSED; + } + + public virtual signal void reset () { +- state = State.STOPPED; +- span = get_total_seconds (); ++ start_time = null; ++ span = 0; + timer.reset (); +- timeout_id = 0; ++ state = State.STOPPED; ++ update_countdown (); + } + } + +diff --git a/src/timer-row.vala b/src/timer-row.vala +index bec09e7..b5d7302 100644 +--- a/src/timer-row.vala ++++ b/src/timer-row.vala +@@ -78,7 +78,18 @@ public class Row : Gtk.ListBoxRow { + item.reset.connect (() => this.reset ()); + delete_button.clicked.connect (() => deleted ()); + +- reset (); ++ item.update_countdown (); ++ switch (item.state) { ++ case STOPPED: ++ reset (); ++ break; ++ case RUNNING: ++ this.start (); ++ break; ++ case PAUSED: ++ this.pause (); ++ break; ++ } + } + + [GtkCallback] +@@ -105,8 +116,6 @@ public class Row : Gtk.ListBoxRow { + countdown_label.get_style_context ().remove_class ("timer-running"); + start_stack.visible_child_name = "start"; + name_stack.visible_child_name = "edit"; +- +- update_countdown (item.hours, item.minutes, item.seconds); + } + + private void start () { +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0004-alarm-item-Make-sure-that-the-time-property-is-alway.patch b/gnome-clocks-mobile/0004-alarm-item-Make-sure-that-the-time-property-is-alway.patch new file mode 100644 index 0000000..8c42e73 --- /dev/null +++ b/gnome-clocks-mobile/0004-alarm-item-Make-sure-that-the-time-property-is-alway.patch @@ -0,0 +1,215 @@ +From e06420480258cda94e20b482529c788efab83a2f Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Thu, 12 Nov 2020 13:38:07 +0100 +Subject: [PATCH 04/16] alarm-item: Make sure that the time property is always + set + +The time property for an AlarmItem isn't nullable therefore it needs to +be set during construction. +--- + src/alarm-face.vala | 18 +++++++---- + src/alarm-item.vala | 12 ++++---- + src/alarm-setup-dialog.vala | 59 +++++++++++-------------------------- + 3 files changed, 36 insertions(+), 53 deletions(-) + +diff --git a/src/alarm-face.vala b/src/alarm-face.vala +index 0fe77cb..cf9a592 100644 +--- a/src/alarm-face.vala ++++ b/src/alarm-face.vala +@@ -108,7 +108,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + } + + internal void edit (Item alarm) { +- var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), alarm, alarms); ++ var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), alarm, alarms, true); + + // Disable alarm while editing it and remember the original active state. + alarm.editing = true; +@@ -116,7 +116,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + dialog.response.connect ((dialog, response) => { + alarm.editing = false; + if (response == Gtk.ResponseType.OK) { +- ((SetupDialog) dialog).apply_to_alarm (alarm); ++ ((SetupDialog) dialog).apply_to_alarm (); + save (); + } else if (response == DELETE_ALARM) { + alarms.delete_item (alarm); +@@ -137,11 +137,19 @@ public class Face : Gtk.Stack, Clocks.Clock { + } + + public void activate_new () { +- var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), null, alarms); ++ var wc = Utils.WallClock.get_default (); ++ var alarm = new Item ({ wc.date_time.get_hour (), wc.date_time.get_minute () }, false); ++ var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), alarm, alarms); ++ ++ // Disable alarm while editing it and remember the original active state. ++ alarm.editing = true; ++ + dialog.response.connect ((dialog, response) => { ++ alarm.editing = false; ++ // Enable the newly created alarm ++ alarm.active = true; + if (response == Gtk.ResponseType.OK) { +- var alarm = new Item (); +- ((SetupDialog) dialog).apply_to_alarm (alarm); ++ ((SetupDialog) dialog).apply_to_alarm (); + alarms.add (alarm); + save (); + } +diff --git a/src/alarm-item.vala b/src/alarm-item.vala +index 6103342..26f655f 100644 +--- a/src/alarm-item.vala ++++ b/src/alarm-item.vala +@@ -104,9 +104,12 @@ private class Item : Object, ContentItem { + private Utils.Bell bell; + private GLib.Notification notification; + +- public Item (string? id = null) { ++ public Item (AlarmTime time, bool active = true, Utils.Weekdays? days = null, string? id = null) { + var guid = id != null ? (string) id : GLib.DBus.generate_guid (); +- Object (id: guid); ++ Object (id: guid, ++ active: active, ++ time: time, ++ days: days); + } + + private void setup_bell () { +@@ -271,11 +274,8 @@ private class Item : Object, ContentItem { + } + + if (hour >= 0 && minute >= 0) { +- Item alarm = new Item (id); ++ Item alarm = new Item ({ hour, minute }, active, days, id); + alarm.name = name; +- alarm.active = active; +- alarm.time = { hour, minute }; +- alarm.days = days; + alarm.ring_minutes = ring_minutes; + alarm.snooze_minutes = snooze_minutes; + alarm.reset (); +diff --git a/src/alarm-setup-dialog.vala b/src/alarm-setup-dialog.vala +index 97cde1f..d20ec61 100644 +--- a/src/alarm-setup-dialog.vala ++++ b/src/alarm-setup-dialog.vala +@@ -75,6 +75,7 @@ private class DurationModel : ListModel, Object { + [GtkTemplate (ui = "/org/gnome/clocks/ui/alarm-setup-dialog.ui")] + private class SetupDialog : Gtk.Dialog { + private Utils.WallClock.Format format; ++ public Item alarm { get; set; } + [GtkChild] + private unowned Gtk.Grid time_grid; + [GtkChild] +@@ -103,20 +104,21 @@ private class SetupDialog : Gtk.Dialog { + typeof (DayPickerRow).ensure (); + } + +- public SetupDialog (Gtk.Window parent, Item? alarm, ListModel all_alarms) { ++ public SetupDialog (Gtk.Window parent, Item alarm, ListModel all_alarms, bool edit_alarm = false) { + Object (transient_for: parent, +- title: alarm != null ? _("Edit Alarm") : _("New Alarm"), ++ alarm: alarm, ++ title: edit_alarm ? _("Edit Alarm") : _("New Alarm"), + use_header_bar: 1); + + add_button (_("Cancel"), Gtk.ResponseType.CANCEL); +- if (alarm != null) { ++ if (edit_alarm) { + add_button (_("Done"), Gtk.ResponseType.OK); + } else { + add_button (_("Add"), Gtk.ResponseType.OK); + } + set_default_response (Gtk.ResponseType.OK); + +- delete_button.visible = alarm != null; ++ delete_button.visible = edit_alarm; + + other_alarms = new List<Item> (); + var n = all_alarms.get_n_items (); +@@ -158,39 +160,13 @@ private class SetupDialog : Gtk.Dialog { + am_pm_stack.visible_child = am_pm_button; + } + +- set_from_alarm (alarm); ++ set_from_alarm (); + } + + // Sets up the dialog to show the values of alarm. +- public void set_from_alarm (Item? alarm) { +- string? name; +- bool active; +- int hour; +- int minute; +- int snooze_minutes; +- int ring_minutes; +- unowned Utils.Weekdays? days; +- +- if (alarm == null) { +- var wc = Utils.WallClock.get_default (); +- // Not great but we can't null it +- name = ""; +- hour = wc.date_time.get_hour (); +- minute = wc.date_time.get_minute (); +- days = null; +- active = true; +- ring_minutes = 5; +- snooze_minutes = 10; +- } else { +- name = ((Item) alarm).name; +- hour = ((Item) alarm).time.hour; +- minute = ((Item) alarm).time.minute; +- days = ((Item) alarm).days; +- active = ((Item) alarm).active; +- ring_minutes = ((Item) alarm).ring_minutes; +- snooze_minutes = ((Item) alarm).snooze_minutes; +- } +- ++ public void set_from_alarm () { ++ var hour = alarm.time.hour; ++ var minute = alarm.time.minute; + // Set the time. + if (format == Utils.WallClock.Format.TWELVE) { + if (hour < 12) { +@@ -204,22 +180,22 @@ private class SetupDialog : Gtk.Dialog { + hour = 12; + } + } +- ring_duration.set_selected_index (duration_model.find_by_duration (ring_minutes)); +- snooze_duration.set_selected_index (duration_model.find_by_duration (snooze_minutes)); ++ ring_duration.set_selected_index (duration_model.find_by_duration (alarm.ring_minutes)); ++ snooze_duration.set_selected_index (duration_model.find_by_duration (alarm.snooze_minutes)); + + h_spinbutton.set_value (hour); + m_spinbutton.set_value (minute); + + // Set the name. +- name_entry.set_text ((string) name); ++ name_entry.set_text ((string) alarm.name); + +- if (days != null) { +- repeats.load ((Utils.Weekdays) days); ++ if (alarm.days != null) { ++ repeats.load ((Utils.Weekdays) alarm.days); + } + } + + // Sets alarm according to the current dialog settings. +- public void apply_to_alarm (Item alarm) { ++ public void apply_to_alarm () { + var name = name_entry.get_text (); + var hour = h_spinbutton.get_value_as_int (); + var minute = m_spinbutton.get_value_as_int (); +@@ -254,8 +230,7 @@ private class SetupDialog : Gtk.Dialog { + } + + private void avoid_duplicate_alarm () { +- var alarm = new Item (); +- apply_to_alarm (alarm); ++ apply_to_alarm (); + + var duplicate = alarm.check_duplicate_alarm (other_alarms); + this.set_response_sensitive (Gtk.ResponseType.OK, !duplicate); +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0005-alarm-remove-edit-property.patch b/gnome-clocks-mobile/0005-alarm-remove-edit-property.patch new file mode 100644 index 0000000..387fb3a --- /dev/null +++ b/gnome-clocks-mobile/0005-alarm-remove-edit-property.patch @@ -0,0 +1,64 @@ +From 329dcc1fdc1b620228457fe1544b62661698a044 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Mon, 16 Nov 2020 11:36:29 +0100 +Subject: [PATCH 05/16] alarm: remove edit property + +--- + src/alarm-face.vala | 8 -------- + src/alarm-item.vala | 5 +++-- + 2 files changed, 3 insertions(+), 10 deletions(-) + +diff --git a/src/alarm-face.vala b/src/alarm-face.vala +index cf9a592..9cf1207 100644 +--- a/src/alarm-face.vala ++++ b/src/alarm-face.vala +@@ -110,11 +110,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + internal void edit (Item alarm) { + var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), alarm, alarms, true); + +- // Disable alarm while editing it and remember the original active state. +- alarm.editing = true; +- + dialog.response.connect ((dialog, response) => { +- alarm.editing = false; + if (response == Gtk.ResponseType.OK) { + ((SetupDialog) dialog).apply_to_alarm (); + save (); +@@ -141,11 +137,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + var alarm = new Item ({ wc.date_time.get_hour (), wc.date_time.get_minute () }, false); + var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), alarm, alarms); + +- // Disable alarm while editing it and remember the original active state. +- alarm.editing = true; +- + dialog.response.connect ((dialog, response) => { +- alarm.editing = false; + // Enable the newly created alarm + alarm.active = true; + if (response == Gtk.ResponseType.OK) { +diff --git a/src/alarm-item.vala b/src/alarm-item.vala +index 26f655f..9febf63 100644 +--- a/src/alarm-item.vala ++++ b/src/alarm-item.vala +@@ -34,7 +34,8 @@ private class Item : Object, ContentItem { + SNOOZING + } + +- public bool editing { get; set; default = false; } ++ // Missed can't be a state because we couldn't scheduale next alarms without override missed ++ public bool missed { get; set; default = false; } + + public string id { get; construct set; } + +@@ -184,7 +185,7 @@ private class Item : Object, ContentItem { + } + + private bool compare_with_item (Item i) { +- return (this.alarm_time.compare (i.alarm_time) == 0 && (this.active || this.editing) && i.active); ++ return (this.time.compare (i.time) == 0); + } + + public bool check_duplicate_alarm (List<Item> alarms) { +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0006-alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch b/gnome-clocks-mobile/0006-alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch new file mode 100644 index 0000000..74f478a --- /dev/null +++ b/gnome-clocks-mobile/0006-alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch @@ -0,0 +1,504 @@ +From e8584352c152fc891fa82a0d3fceb1810cc6f4e0 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Fri, 13 Nov 2020 17:59:06 +0100 +Subject: [PATCH 06/16] alarms: Make alarms persisted and add missed alarms + notation + +This stores the alarm state as well as the alarm and snooze time +to gsettings. This alllows us to tell the user about missed alarms. +A user could miss alarms for two reasons: + - Clocks wasn't running when the alarm went of. + - The user didn't stop the alarm within "ring-time" + +This also adds the baseline for starting Clocks via systemd user .timer +units by making Clocks checks at startup if any alarms need to go off. + +As a side effect: closing Clocks doesn't stop an alarm and when Clocks +is reopend within "ring-time" after an alarm or snooze the alarm starts +ringing again. +--- + src/alarm-face.vala | 5 +- + src/alarm-item.vala | 218 +++++++++++++++++++++++------------- + src/alarm-setup-dialog.vala | 12 +- + src/application.vala | 5 +- + src/window.vala | 3 + + 5 files changed, 156 insertions(+), 87 deletions(-) + +diff --git a/src/alarm-face.vala b/src/alarm-face.vala +index 9cf1207..8654e76 100644 +--- a/src/alarm-face.vala ++++ b/src/alarm-face.vala +@@ -66,7 +66,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + }); + + listbox.bind_model (alarms, (item) => { +- item.notify["active"].connect (save); ++ item.notify["state"].connect (save); + return new Row ((Item) item, this); + }); + +@@ -134,12 +134,13 @@ public class Face : Gtk.Stack, Clocks.Clock { + + public void activate_new () { + var wc = Utils.WallClock.get_default (); +- var alarm = new Item ({ wc.date_time.get_hour (), wc.date_time.get_minute () }, false); ++ var alarm = new Item (wc.date_time.get_hour (), wc.date_time.get_minute ()); + var dialog = new SetupDialog ((Gtk.Window) get_toplevel (), alarm, alarms); + + dialog.response.connect ((dialog, response) => { + // Enable the newly created alarm + alarm.active = true; ++ + if (response == Gtk.ResponseType.OK) { + ((SetupDialog) dialog).apply_to_alarm (); + alarms.add (alarm); +diff --git a/src/alarm-item.vala b/src/alarm-item.vala +index 9febf63..ab9ca9b 100644 +--- a/src/alarm-item.vala ++++ b/src/alarm-item.vala +@@ -20,15 +20,9 @@ + namespace Clocks { + namespace Alarm { + +-private struct AlarmTime { +- public int hour; +- public int minute; +-} +- + private class Item : Object, ContentItem { +- // FIXME: should we add a "MISSED" state where the alarm stopped +- // ringing but we keep showing the ringing panel? + public enum State { ++ DISABLED, + READY, + RINGING, + SNOOZING +@@ -43,6 +37,12 @@ private class Item : Object, ContentItem { + + public int ring_minutes { get; set; default = 5; } + ++ public bool recurring { ++ get { ++ return days != null && !((!) days).empty; ++ } ++ } ++ + public string? name { + get { + return _name; +@@ -54,21 +54,34 @@ private class Item : Object, ContentItem { + } + } + +- public AlarmTime time { get; set; } +- + public Utils.Weekdays? days { get; set; } + +- public State state { get; private set; } ++ private State _state = State.DISABLED; ++ public State state { ++ get { ++ return _state; ++ } ++ private set { ++ if (_state == value) ++ return; ++ ++ _state = value; ++ notify_property ("active"); ++ } ++ } + + public string time_label { + owned get { +- return Utils.WallClock.get_default ().format_time (alarm_time); ++ return Utils.WallClock.get_default ().format_time (time); + } + } + + public string snooze_time_label { + owned get { +- return Utils.WallClock.get_default ().format_time (snooze_time); ++ if (snooze_time == null) ++ return Utils.WallClock.get_default ().format_time (time.add_minutes (snooze_minutes)); ++ else ++ return Utils.WallClock.get_default ().format_time ((!) snooze_time); + } + } + +@@ -78,37 +91,43 @@ private class Item : Object, ContentItem { + } + } + ++ public GLib.DateTime time { get; set; } ++ + [CCode (notify = false)] + public bool active { + get { +- return _active && !this.editing; ++ return this.state > State.DISABLED; + } +- + set { +- if (value != _active) { +- _active = value; +- if (_active) { +- reset (); +- } else if (state == State.RINGING) { +- stop (); +- } ++ if (this.state != State.DISABLED && !value) { ++ stop (); ++ this.state = State.DISABLED; ++ notify_property ("active"); ++ } else if (this.state == State.DISABLED && value) { ++ this.missed = false; ++ this.time = get_next_alarm_time (time.get_hour (), time.get_minute (), days); ++ this.state = State.READY; + notify_property ("active"); + } + } + } + + private string _name; +- private bool _active = true; +- private GLib.DateTime alarm_time; +- private GLib.DateTime snooze_time; +- private GLib.DateTime ring_end_time; ++ private GLib.DateTime? snooze_time; + private Utils.Bell bell; + private GLib.Notification notification; + +- public Item (AlarmTime time, bool active = true, Utils.Weekdays? days = null, string? id = null) { ++ public Item (int hour, int minute, Utils.Weekdays? days = null, string? id = null) { ++ var guid = id != null ? (string) id : GLib.DBus.generate_guid (); ++ var time = get_next_alarm_time (hour, minute, days); ++ Object (id: guid, ++ time: time, ++ days: days); ++ } ++ ++ public Item.for_specific_time (GLib.DateTime time, Utils.Weekdays? days = null, string? id = null) { + var guid = id != null ? (string) id : GLib.DBus.generate_guid (); + Object (id: guid, +- active: active, + time: time, + days: days); + } +@@ -122,24 +141,39 @@ private class Item : Object, ContentItem { + notification.add_button (_("Snooze"), "app.snooze-alarm::".concat (id)); + } + +- public void reset () { +- update_alarm_time (); +- update_snooze_time (alarm_time); +- state = State.READY; ++ private void show_missed_notification () { ++ var app = (Clocks.Application) GLib.Application.get_default (); ++ var notification = new GLib.Notification (_("Missed alarm")); ++ string label; ++ if (name != null && ((!) name).length > 0) { ++ // Translators: The first %s is the time and the second %s is the title ++ label = _("%s: %s").printf (time_label, (!) name); ++ } else { ++ // Translators: %s is a time ++ label = _("%s").printf (time_label); ++ } ++ ++ notification.set_body (label); ++ app.send_notification ("alarm-clock-missed", notification); ++ } ++ ++ public void set_alarm_time (int hour, int minute, Utils.Weekdays? days) { ++ this.days = days; ++ this.time = get_next_alarm_time (hour, minute, days); + } + +- private void update_alarm_time () { ++ private static GLib.DateTime get_next_alarm_time (int hour, int minute, Utils.Weekdays? days) { + var wallclock = Utils.WallClock.get_default (); + var now = wallclock.date_time; + var dt = new GLib.DateTime (wallclock.timezone, + now.get_year (), + now.get_month (), + now.get_day_of_month (), +- time.hour, +- time.minute, ++ hour, ++ minute, + 0); + +- if (days == null || ((Utils.Weekdays) days).empty) { ++ if (days == null || ((!) days).empty) { + // Alarm without days. + if (dt.compare (now) <= 0) { + // Time already passed, ring tomorrow. +@@ -148,16 +182,13 @@ private class Item : Object, ContentItem { + } else { + // Alarm with at least one day set. + // Find the next possible day for ringing +- while (dt.compare (now) <= 0 || ! ((Utils.Weekdays) days).get ((Utils.Weekdays.Day) (dt.get_day_of_week () - 1))) { ++ while (dt.compare (now) <= 0 || ++ ! ((Utils.Weekdays) days).get ((Utils.Weekdays.Day) (dt.get_day_of_week () - 1))) { + dt = dt.add_days (1); + } + } + +- alarm_time = dt; +- } +- +- private void update_snooze_time (GLib.DateTime start_time) { +- snooze_time = start_time.add_minutes (snooze_minutes); ++ return dt; + } + + public virtual signal void ring () { +@@ -167,30 +198,43 @@ private class Item : Object, ContentItem { + } + + private void start_ringing (GLib.DateTime now) { +- update_snooze_time (now); +- ring_end_time = now.add_minutes (ring_minutes); + state = State.RINGING; + ring (); + } + + public void snooze () { + bell.stop (); ++ if (snooze_time == null) ++ snooze_time = time.add_minutes (snooze_minutes); ++ else ++ snooze_time = ((!) snooze_time).add_minutes (snooze_minutes); ++ + state = State.SNOOZING; + } + + public void stop () { + bell.stop (); +- update_snooze_time (alarm_time); +- state = State.READY; ++ snooze_time = null; ++ ++ // scheduale the next alarm if recurring ++ if (recurring) { ++ time = get_next_alarm_time (time.get_hour (), time.get_minute (), days); ++ state = State.READY; ++ GLib.Timeout.add_seconds (120, () => { ++ missed = false; ++ return GLib.Source.REMOVE; ++ }); ++ } else { ++ state = State.DISABLED; ++ } + } + + private bool compare_with_item (Item i) { +- return (this.time.compare (i.time) == 0); ++ return (this.time.get_hour () == i.time.get_hour () && ++ this.time.get_minute () == i.time.get_minute ()); + } + + public bool check_duplicate_alarm (List<Item> alarms) { +- update_alarm_time (); +- + foreach (var item in alarms) { + if (this.compare_with_item (item)) { + return true; +@@ -199,11 +243,21 @@ private class Item : Object, ContentItem { + return false; + } + ++ private void start_ringing_or_missed (GLib.DateTime now, GLib.DateTime ring_end_time) { ++ if (now.compare (ring_end_time) > 0 ) { ++ missed = true; ++ show_missed_notification (); ++ stop (); ++ } else { ++ start_ringing (now); ++ } ++ } ++ + // Update the state and ringing time. Ring or stop + // depending on the current time. + // Returns true if the state changed, false otherwise. + public bool tick () { +- if (!active) { ++ if (state == State.DISABLED) { + return false; + } + +@@ -212,17 +266,28 @@ private class Item : Object, ContentItem { + var wallclock = Utils.WallClock.get_default (); + var now = wallclock.date_time; + +- if (state == State.RINGING && now.compare (ring_end_time) > 0) { +- stop (); +- } +- +- if (state == State.SNOOZING && now.compare (snooze_time) > 0) { +- start_ringing (now); +- } +- +- if (state == State.READY && now.compare (alarm_time) > 0) { +- start_ringing (now); +- update_alarm_time (); // reschedule for the next repeat ++ GLib.DateTime ring_end_time; ++ if (snooze_time != null) ++ ring_end_time = ((!) snooze_time).add_minutes (ring_minutes); ++ else ++ ring_end_time = time.add_minutes (ring_minutes); ++ ++ switch (state) { ++ case State.DISABLED: ++ break; ++ case State.RINGING: ++ // make sure the state changes ++ last_state = State.READY; ++ start_ringing_or_missed (now, ring_end_time); ++ break; ++ case State.SNOOZING: ++ if (snooze_time != null && now.compare ((!) snooze_time) > 0) ++ start_ringing_or_missed (now, ring_end_time); ++ break; ++ case State.READY: ++ if (now.compare (time) > 0) ++ start_ringing_or_missed (now, ring_end_time); ++ break; + } + + return state != last_state; +@@ -232,9 +297,10 @@ private class Item : Object, ContentItem { + builder.open (new GLib.VariantType ("a{sv}")); + builder.add ("{sv}", "name", new GLib.Variant.string ((string) name)); + builder.add ("{sv}", "id", new GLib.Variant.string (id)); +- builder.add ("{sv}", "active", new GLib.Variant.boolean (active)); +- builder.add ("{sv}", "hour", new GLib.Variant.int32 (time.hour)); +- builder.add ("{sv}", "minute", new GLib.Variant.int32 (time.minute)); ++ builder.add ("{sv}", "state", new GLib.Variant.int32 (state)); ++ builder.add ("{sv}", "time", new GLib.Variant.int64 (time.to_unix ())); ++ if (snooze_time != null) ++ builder.add ("{sv}", "snooze_time", new GLib.Variant.int64 (((!) snooze_time).to_unix ())); + builder.add ("{sv}", "days", ((Utils.Weekdays) days).serialize ()); + builder.add ("{sv}", "snooze_minutes", new GLib.Variant.int32 (snooze_minutes)); + builder.add ("{sv}", "ring_minutes", new GLib.Variant.int32 (ring_minutes)); +@@ -246,9 +312,9 @@ private class Item : Object, ContentItem { + Variant val; + string? name = null; + string? id = null; +- bool active = true; +- int hour = -1; +- int minute = -1; ++ State state = State.DISABLED; ++ GLib.DateTime? time = null; ++ GLib.DateTime? snooze_time = null; + int snooze_minutes = 10; + int ring_minutes = 5; + Utils.Weekdays? days = null; +@@ -259,12 +325,12 @@ private class Item : Object, ContentItem { + name = (string) val; + } else if (key == "id") { + id = (string) val; +- } else if (key == "active") { +- active = (bool) val; +- } else if (key == "hour") { +- hour = (int32) val; +- } else if (key == "minute") { +- minute = (int32) val; ++ } else if (key == "state") { ++ state = (State) val; ++ } else if (key == "time") { ++ time = new GLib.DateTime.from_unix_local ((int64) val); ++ } else if (key == "snooze_time") { ++ snooze_time = new GLib.DateTime.from_unix_local ((int64) val); + } else if (key == "days") { + days = Utils.Weekdays.deserialize (val); + } else if (key == "snooze_minutes") { +@@ -274,12 +340,14 @@ private class Item : Object, ContentItem { + } + } + +- if (hour >= 0 && minute >= 0) { +- Item alarm = new Item ({ hour, minute }, active, days, id); ++ if (time != null) { ++ Item alarm = new Item.for_specific_time ((!) time, days, id); ++ alarm.state = state; + alarm.name = name; ++ if (snooze_time != null) ++ alarm.snooze_time = (!) snooze_time; + alarm.ring_minutes = ring_minutes; + alarm.snooze_minutes = snooze_minutes; +- alarm.reset (); + return alarm; + } else { + warning ("Invalid alarm %s", name != null ? (string) name : "[unnamed]"); +diff --git a/src/alarm-setup-dialog.vala b/src/alarm-setup-dialog.vala +index d20ec61..2d826d0 100644 +--- a/src/alarm-setup-dialog.vala ++++ b/src/alarm-setup-dialog.vala +@@ -165,8 +165,8 @@ private class SetupDialog : Gtk.Dialog { + + // Sets up the dialog to show the values of alarm. + public void set_from_alarm () { +- var hour = alarm.time.hour; +- var minute = alarm.time.minute; ++ var hour = alarm.time.get_hour (); ++ var minute = alarm.time.get_minute (); + // Set the time. + if (format == Utils.WallClock.Format.TWELVE) { + if (hour < 12) { +@@ -211,21 +211,15 @@ private class SetupDialog : Gtk.Dialog { + } + } + +- AlarmTime time = { hour, minute }; +- + var days = repeats.store (); + + alarm.freeze_notify (); + + alarm.name = name; +- alarm.time = time; +- alarm.days = days; ++ alarm.set_alarm_time (hour, minute, days); + alarm.snooze_minutes = snooze_item.minutes; + alarm.ring_minutes = ring_item.minutes; + +- // Force update of alarm_time before notifying the changes +- alarm.reset (); +- + alarm.thaw_notify (); + } + +diff --git a/src/application.vala b/src/application.vala +index 2e67046..92aba34 100644 +--- a/src/application.vala ++++ b/src/application.vala +@@ -170,7 +170,10 @@ public class Application : Gtk.Application { + public new void send_notification (string notification_id, GLib.Notification notification) { + base.send_notification (notification_id, notification); + +- system_notifications.append (notification_id); ++ // We don't want to withdraw missed notifications ++ if (notification_id != "alarm-clock-missed") { ++ system_notifications.append (notification_id); ++ } + } + + private void withdraw_notifications () { +diff --git a/src/window.vala b/src/window.vala +index 55c7f2e..5c35967 100644 +--- a/src/window.vala ++++ b/src/window.vala +@@ -158,6 +158,9 @@ public class Window : Hdy.ApplicationWindow { + if (Config.PROFILE == "Devel") { + style.add_class ("devel"); + } ++ ++ // Immidiatly check if we need to notifiy the user about alarms ++ Utils.WallClock.get_default ().tick (); + } + + [Signal (action = true)] +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0007-Fixed-infinite-alarming.patch b/gnome-clocks-mobile/0007-Fixed-infinite-alarming.patch new file mode 100644 index 0000000..7e5ffcd --- /dev/null +++ b/gnome-clocks-mobile/0007-Fixed-infinite-alarming.patch @@ -0,0 +1,36 @@ +From b5b5ad980f72d2b7622d311f31fda5695f49ed8e Mon Sep 17 00:00:00 2001 +From: Steve Stevens <steve@heunox.com> +Date: Sun, 9 Jan 2022 12:06:47 -0700 +Subject: [PATCH 07/16] Fixed infinite alarming + +This issue is caused by the start_ringing() function being called every time +the tick() function is called. Thus causing multiple rings to start happening +if an alarm isn't stopped soon enough all from the same alarm. + +Origin: https://gitlab.gnome.org/GNOME/gnome-clocks/-/merge_requests/185 +Dependancy: alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch +Applied-Upstream: False +--- + src/alarm-item.vala | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/alarm-item.vala b/src/alarm-item.vala +index ab9ca9b..6dcb73d 100644 +--- a/src/alarm-item.vala ++++ b/src/alarm-item.vala +@@ -198,8 +198,10 @@ private class Item : Object, ContentItem { + } + + private void start_ringing (GLib.DateTime now) { +- state = State.RINGING; +- ring (); ++ if ( state != State.RINGING ) { ++ state = State.RINGING; ++ ring (); ++ } + } + + public void snooze () { +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0008-Alarms-Fix-wiping-edit-data.patch b/gnome-clocks-mobile/0008-Alarms-Fix-wiping-edit-data.patch new file mode 100644 index 0000000..82ca5bc --- /dev/null +++ b/gnome-clocks-mobile/0008-Alarms-Fix-wiping-edit-data.patch @@ -0,0 +1,50 @@ +From bd2fce71df6d3eab84486a445f38e5ed38828f79 Mon Sep 17 00:00:00 2001 +From: Steve Stevens <steve@heunox.com> +Date: Sun, 9 Jan 2022 12:07:43 -0700 +Subject: [PATCH 08/16] Alarms: Fix wiping edit data + +The notifies called when setting up the alarm-setup-dialog would cause +the alarm item to be nulled out when attempting to update the alarm with +the data. Thus this patch suspends those notify actions until the +initial setup of the dialog is complete. + +Dependancy: alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch +Applied-Upstream: False +--- + src/alarm-setup-dialog.vala | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/alarm-setup-dialog.vala b/src/alarm-setup-dialog.vala +index 2d826d0..85c9d06 100644 +--- a/src/alarm-setup-dialog.vala ++++ b/src/alarm-setup-dialog.vala +@@ -99,6 +99,7 @@ private class SetupDialog : Gtk.Dialog { + private unowned Gtk.Button delete_button; + private List<Item> other_alarms; + private DurationModel duration_model; ++ private bool lock_notify = true; + + static construct { + typeof (DayPickerRow).ensure (); +@@ -192,6 +193,8 @@ private class SetupDialog : Gtk.Dialog { + if (alarm.days != null) { + repeats.load ((Utils.Weekdays) alarm.days); + } ++ lock_notify = false; ++ avoid_duplicate_alarm (); + } + + // Sets alarm according to the current dialog settings. +@@ -224,6 +227,9 @@ private class SetupDialog : Gtk.Dialog { + } + + private void avoid_duplicate_alarm () { ++ if (lock_notify) { ++ return; ++ } + apply_to_alarm (); + + var duplicate = alarm.check_duplicate_alarm (other_alarms); +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0009-Don-t-show-numpad-when-setting-a-new-alarm-timer.patch b/gnome-clocks-mobile/0009-Don-t-show-numpad-when-setting-a-new-alarm-timer.patch new file mode 100644 index 0000000..7c38c07 --- /dev/null +++ b/gnome-clocks-mobile/0009-Don-t-show-numpad-when-setting-a-new-alarm-timer.patch @@ -0,0 +1,44 @@ +From 7f0a060e316ceb9e123ec71d74c7a7502d5dfc1b Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Wed, 2 Dec 2020 16:57:31 +0100 +Subject: [PATCH 09/16] Don't show numpad when setting a new alarm/timer + +Fixes https://source.puri.sm/Librem5/gnome-clocks/-/issues/26 +--- + src/alarm-setup-dialog.vala | 4 ++++ + src/timer-setup.vala | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/alarm-setup-dialog.vala b/src/alarm-setup-dialog.vala +index 85c9d06..5831cf3 100644 +--- a/src/alarm-setup-dialog.vala ++++ b/src/alarm-setup-dialog.vala +@@ -160,6 +160,10 @@ private class SetupDialog : Gtk.Dialog { + am_pm_stack.add (am_pm_button); + am_pm_stack.visible_child = am_pm_button; + } ++ /* Workaround: To keep the osk closed ++ * https://gitlab.gnome.org/GNOME/gtk/merge_requests/978#note_546576 */ ++ h_spinbutton.set ("im-module", "gtk-im-context-none", null); ++ m_spinbutton.set ("im-module", "gtk-im-context-none", null); + + set_from_alarm (); + } +diff --git a/src/timer-setup.vala b/src/timer-setup.vala +index 69129f9..4f460ce 100644 +--- a/src/timer-setup.vala ++++ b/src/timer-setup.vala +@@ -49,6 +49,10 @@ public class Setup : Gtk.Box { + insert_action_group ("timer-setup", actions); + + time_grid.set_direction (Gtk.TextDirection.LTR); ++ ++ h_spinbutton.set ("im-module", "gtk-im-context-none", null); ++ m_spinbutton.set ("im-module", "gtk-im-context-none", null); ++ s_spinbutton.set ("im-module", "gtk-im-context-none", null); + } + + private int get_duration () { +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0010-add-option-to-start-hidden.patch b/gnome-clocks-mobile/0010-add-option-to-start-hidden.patch new file mode 100644 index 0000000..eb8f202 --- /dev/null +++ b/gnome-clocks-mobile/0010-add-option-to-start-hidden.patch @@ -0,0 +1,63 @@ +From d09089c22fa81abac887006e1942674bcad736a9 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Thu, 3 Dec 2020 22:54:42 +0100 +Subject: [PATCH 10/16] add option to start hidden + +--- + src/application.vala | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/application.vala b/src/application.vala +index 92aba34..4bc24c6 100644 +--- a/src/application.vala ++++ b/src/application.vala +@@ -21,6 +21,7 @@ namespace Clocks { + public class Application : Gtk.Application { + const OptionEntry[] OPTION_ENTRIES = { + { "version", 'v', 0, OptionArg.NONE, null, N_("Print version information and exit"), null }, ++ { "hidden", 0, 0, OptionArg.NONE, null, N_("Start without showing a window"), null }, + { (string) null } + }; + +@@ -36,6 +37,7 @@ public class Application : Gtk.Application { + private World.ShellWorldClocks world_clocks; + private uint world_clocks_id = 0; + private Window? window; ++ private bool start_hidden = false; + private List<string> system_notifications; + + private Window ensure_window () ensures (window != null) { +@@ -96,7 +98,11 @@ public class Application : Gtk.Application { + base.activate (); + + var win = ensure_window (); +- win.present (); ++ if (!start_hidden) { ++ win.present (); ++ } else { ++ start_hidden = false; ++ } + + win.focus_in_event.connect (() => { + withdraw_notifications (); +@@ -142,6 +148,9 @@ public class Application : Gtk.Application { + print ("%s %s\n", (string) Environment.get_application_name (), Config.VERSION); + return 0; + } ++ if (options.contains("hidden")) { ++ start_hidden = true; ++ } + + return -1; + } +@@ -155,6 +164,7 @@ public class Application : Gtk.Application { + win.show_world (); + win.present (); + ++ + var world = GWeather.Location.get_world (); + if (world != null) { + // The result is actually nullable +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0011-autostart-gnome-clocks.patch b/gnome-clocks-mobile/0011-autostart-gnome-clocks.patch new file mode 100644 index 0000000..78e9492 --- /dev/null +++ b/gnome-clocks-mobile/0011-autostart-gnome-clocks.patch @@ -0,0 +1,61 @@ +From eef891c43eac9bade177f575ca78d867df31dc5c Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Fri, 27 Nov 2020 18:47:34 +0100 +Subject: [PATCH 11/16] autostart gnome-clocks + +--- + data/meson.build | 10 +++++++++- + data/org.gnome.clocks-daemon.desktop.in | 16 ++++++++++++++++ + 2 files changed, 25 insertions(+), 1 deletion(-) + create mode 100644 data/org.gnome.clocks-daemon.desktop.in + +diff --git a/data/meson.build b/data/meson.build +index c0817fd..497b3be 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -46,6 +46,15 @@ if desktop_file_validate.found() + endif + + ++desktop_daemon_file = i18n.merge_file( ++ input : 'org.gnome.clocks-daemon.desktop.in', ++ output : '@0@-daemon.desktop'.format(app_id), ++ type : 'desktop', ++ po_dir : '../po', ++ install : true, ++ install_dir : join_paths(get_option('sysconfdir'), 'xdg/autostart') ++) ++ + dbusconf = configuration_data() + dbusconf.set('bindir', join_paths(get_option('prefix'), get_option('bindir'))) + dbusconf.set('name', app_id) +@@ -113,4 +122,3 @@ if glib_compile_schemas.found() + ] + ) + endif +- +diff --git a/data/org.gnome.clocks-daemon.desktop.in b/data/org.gnome.clocks-daemon.desktop.in +new file mode 100644 +index 0000000..49187ca +--- /dev/null ++++ b/data/org.gnome.clocks-daemon.desktop.in +@@ -0,0 +1,16 @@ ++[Desktop Entry] ++Name=Clocks ++GenericName=Clocks ++X-GNOME-FullName=GNOME Clocks ++Comment=Clocks for world times, plus alarms, stopwatch and a timer ++# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++Keywords=time;timer;alarm;world clock;stopwatch;time zone; ++Exec=gnome-clocks --hidden ++# Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++Icon=@icon@ ++Terminal=false ++Type=Application ++Categories=GNOME;GTK;Utility;Clock; ++StartupNotify=false ++NoDisplay=true ++X-GNOME-AutoRestart=true +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0012-alarm-setup-dialog-Allow-much-smaller-heights-useing.patch b/gnome-clocks-mobile/0012-alarm-setup-dialog-Allow-much-smaller-heights-useing.patch new file mode 100644 index 0000000..ef9b60c --- /dev/null +++ b/gnome-clocks-mobile/0012-alarm-setup-dialog-Allow-much-smaller-heights-useing.patch @@ -0,0 +1,359 @@ +From b7f9d6e3df2d8291194b5b5eacff1386b1b50dea Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Mon, 14 Dec 2020 17:56:13 +0100 +Subject: [PATCH 12/16] alarm-setup-dialog: Allow much smaller heights useing a + ScrolledWindow + +--- + data/ui/alarm-setup-dialog.ui | 298 ++++++++++++++++++---------------- + 1 file changed, 154 insertions(+), 144 deletions(-) + +diff --git a/data/ui/alarm-setup-dialog.ui b/data/ui/alarm-setup-dialog.ui +index f332c4a..2429ce5 100644 +--- a/data/ui/alarm-setup-dialog.ui ++++ b/data/ui/alarm-setup-dialog.ui +@@ -17,187 +17,197 @@ + <property name="modal">True</property> + <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> +- <property name="default-height">350</property> +- <property name="height-request">350</property> + <property name="type_hint">dialog</property> + <property name="gravity">center</property> + <property name="title" translatable="yes">New Alarm</property> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="visible">True</property> ++ <property name="border-width">0</property> + <child> +- <object class="HdyClamp"> ++ <object class="GtkScrolledWindow"> + <property name="visible">True</property> +- <property name="maximum-size">450</property> ++ <property name="hexpand">True</property> ++ <property name="vexpand">True</property> ++ <property name="hscrollbar-policy">never</property> ++ <property name="propagate-natural-height">True</property> ++ <property name="propagate-natural-width">True</property> + <child> +- <object class="GtkBox"> ++ <object class="HdyClamp"> + <property name="visible">True</property> +- <property name="spacing">12</property> +- <property name="orientation">vertical</property> ++ <property name="maximum-size">450</property> + <child> +- <object class="GtkGrid" id="time_grid"> ++ <object class="GtkBox"> + <property name="visible">True</property> +- <property name="halign">center</property> +- <property name="margin_top">12</property> +- <property name="column_spacing">6</property> ++ <property name="orientation">vertical</property> ++ <property name="margin">12</property> + <child> +- <object class="GtkLabel" id="dummy_label1"> ++ <object class="GtkGrid" id="time_grid"> + <property name="visible">True</property> +- <property name="margin_start">6</property> +- <property name="margin_end">6</property> +- </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkLabel" id="label2"> +- <property name="visible">True</property> +- <property name="label">∶</property> +- </object> +- <packing> +- <property name="left_attach">2</property> +- <property name="top_attach">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkSpinButton" id="m_spinbutton"> +- <property name="visible">True</property> +- <property name="max_length">2</property> +- <property name="activates_default">False</property> +- <property name="text">0</property> +- <property name="xalign">0.5</property> +- <property name="input_purpose">number</property> +- <property name="orientation">vertical</property> +- <property name="adjustment">m_adjustment</property> +- <property name="numeric">True</property> +- <property name="wrap">True</property> +- <property name="width-request">60</property> +- <signal name="changed" handler="spinbuttons_changed" object="ClocksAlarmSetupDialog" swapped="no"/> +- <signal name="output" handler="show_leading_zeros" object="ClocksAlarmSetupDialog" swapped="no"/> +- </object> +- <packing> +- <property name="left_attach">3</property> +- <property name="top_attach">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkStack" id="am_pm_stack"> +- <property name="visible">True</property> +- <property name="margin_start">6</property> +- <property name="margin_end">6</property> ++ <property name="halign">center</property> ++ <property name="column_spacing">6</property> + <child> +- <object class="GtkLabel" id="dummy_label2"> ++ <object class="GtkLabel" id="dummy_label1"> + <property name="visible">True</property> +- <property name="can_focus">False</property> ++ <property name="margin_start">6</property> ++ <property name="margin_end">6</property> + </object> ++ <packing> ++ <property name="left_attach">0</property> ++ <property name="top_attach">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="label2"> ++ <property name="visible">True</property> ++ <property name="label">∶</property> ++ </object> ++ <packing> ++ <property name="left_attach">2</property> ++ <property name="top_attach">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkSpinButton" id="m_spinbutton"> ++ <property name="visible">True</property> ++ <property name="max_length">2</property> ++ <property name="activates_default">False</property> ++ <property name="text">0</property> ++ <property name="xalign">0.5</property> ++ <property name="input_purpose">number</property> ++ <property name="orientation">vertical</property> ++ <property name="adjustment">m_adjustment</property> ++ <property name="numeric">True</property> ++ <property name="wrap">True</property> ++ <property name="width-request">60</property> ++ <signal name="changed" handler="spinbuttons_changed" object="ClocksAlarmSetupDialog" swapped="no"/> ++ <signal name="output" handler="show_leading_zeros" object="ClocksAlarmSetupDialog" swapped="no"/> ++ </object> ++ <packing> ++ <property name="left_attach">3</property> ++ <property name="top_attach">0</property> ++ </packing> + </child> +- </object> +- <packing> +- <property name="left_attach">4</property> +- <property name="top_attach">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkSpinButton" id="h_spinbutton"> +- <property name="visible">True</property> +- <property name="max_length">2</property> +- <property name="activates_default">False</property> +- <property name="text">0</property> +- <property name="xalign">0.5</property> +- <property name="input_purpose">number</property> +- <property name="orientation">vertical</property> +- <property name="adjustment">h_adjustment</property> +- <property name="numeric">True</property> +- <property name="wrap">True</property> +- <property name="width-request">60</property> +- <signal name="changed" handler="spinbuttons_changed" object="ClocksAlarmSetupDialog" swapped="no"/> +- <signal name="output" handler="show_leading_zeros" object="ClocksAlarmSetupDialog" swapped="no"/> +- </object> +- <packing> +- <property name="left_attach">1</property> +- <property name="top_attach">0</property> +- </packing> +- </child> +- <style> +- <class name="clocks-alarm-setup-time"/> +- </style> +- </object> +- </child> +- <child> +- <object class="GtkListBox" id="listbox"> +- <property name="visible">True</property> +- <property name="selection_mode">none</property> +- <child> +- <object class="ClocksAlarmDayPickerRow" id="repeats"> +- <property name="visible">True</property> +- <signal name="days_changed" handler="days_changed" swapped="no" /> +- </object> +- </child> +- <child> +- <object class="HdyActionRow"> +- <property name="visible">True</property> +- <property name="activatable">False</property> +- <property name="selectable">False</property> +- <property name="title" translatable="yes">Name</property> +- <property name="subtitle" translatable="yes">Optional</property> + <child> +- <object class="GtkEntry" id="name_entry"> ++ <object class="GtkStack" id="am_pm_stack"> + <property name="visible">True</property> +- <property name="valign">center</property> +- <property name="hexpand">True</property> +- <property name="activates_default">True</property> +- <signal name="changed" handler="entry_changed" object="ClocksAlarmSetupDialog" swapped="no"/> ++ <property name="margin_start">6</property> ++ <property name="margin_end">6</property> ++ <child> ++ <object class="GtkLabel" id="dummy_label2"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ </object> ++ </child> + </object> ++ <packing> ++ <property name="left_attach">4</property> ++ <property name="top_attach">0</property> ++ </packing> + </child> ++ <child> ++ <object class="GtkSpinButton" id="h_spinbutton"> ++ <property name="visible">True</property> ++ <property name="max_length">2</property> ++ <property name="activates_default">False</property> ++ <property name="text">0</property> ++ <property name="xalign">0.5</property> ++ <property name="input_purpose">number</property> ++ <property name="orientation">vertical</property> ++ <property name="adjustment">h_adjustment</property> ++ <property name="numeric">True</property> ++ <property name="wrap">True</property> ++ <property name="width-request">60</property> ++ <signal name="changed" handler="spinbuttons_changed" object="ClocksAlarmSetupDialog" swapped="no"/> ++ <signal name="output" handler="show_leading_zeros" object="ClocksAlarmSetupDialog" swapped="no"/> ++ </object> ++ <packing> ++ <property name="left_attach">1</property> ++ <property name="top_attach">0</property> ++ </packing> ++ </child> ++ <style> ++ <class name="clocks-alarm-setup-time"/> ++ </style> + </object> + </child> + <child> +- <object class="HdyComboRow" id="ring_duration"> ++ <object class="GtkListBox" id="listbox"> + <property name="visible">True</property> +- <property name="activatable">False</property> +- <property name="selectable">False</property> +- <property name="title" translatable="yes">Ring Duration</property> ++ <property name="selection_mode">none</property> ++ <property name="margin_top">12</property> ++ <child> ++ <object class="ClocksAlarmDayPickerRow" id="repeats"> ++ <property name="visible">True</property> ++ <signal name="days_changed" handler="days_changed" swapped="no" /> ++ </object> ++ </child> ++ <child> ++ <object class="HdyActionRow"> ++ <property name="visible">True</property> ++ <property name="activatable">False</property> ++ <property name="selectable">False</property> ++ <property name="title" translatable="yes">Name</property> ++ <property name="subtitle" translatable="yes">Optional</property> ++ <child> ++ <object class="GtkEntry" id="name_entry"> ++ <property name="visible">True</property> ++ <property name="valign">center</property> ++ <property name="hexpand">True</property> ++ <property name="activates_default">True</property> ++ <signal name="changed" handler="entry_changed" object="ClocksAlarmSetupDialog" swapped="no"/> ++ </object> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="HdyComboRow" id="ring_duration"> ++ <property name="visible">True</property> ++ <property name="activatable">False</property> ++ <property name="selectable">False</property> ++ <property name="title" translatable="yes">Ring Duration</property> ++ </object> ++ </child> ++ <child> ++ <object class="HdyComboRow" id="snooze_duration"> ++ <property name="visible">True</property> ++ <property name="activatable">False</property> ++ <property name="selectable">False</property> ++ <property name="title" translatable="yes">Snooze Duration</property> ++ </object> ++ </child> ++ <style> ++ <class name="content"/> ++ </style> + </object> + </child> + <child> +- <object class="HdyComboRow" id="snooze_duration"> ++ <object class="GtkButton" id="delete_button"> + <property name="visible">True</property> +- <property name="activatable">False</property> +- <property name="selectable">False</property> +- <property name="title" translatable="yes">Snooze Duration</property> ++ <property name="label" translatable="yes">R_emove Alarm</property> ++ <property name="use-underline">True</property> ++ <property name="margin_top">12</property> ++ <property name="halign">start</property> ++ <signal name="clicked" handler="delete" swapped="no" /> ++ <style> ++ <class name="destructive-action"/> ++ </style> + </object> + </child> +- <style> +- <class name="content"/> +- <class name="clocks-list"/> +- </style> +- </object> +- </child> +- <child> +- <object class="GtkButton" id="delete_button"> +- <property name="visible">True</property> +- <property name="label" translatable="yes">R_emove Alarm</property> +- <property name="use-underline">True</property> +- <property name="margin">6</property> +- <property name="halign">start</property> +- <signal name="clicked" handler="delete" swapped="no" /> +- <style> +- <class name="destructive-action"/> +- </style> +- </object> +- </child> +- <child> +- <object class="GtkRevealer" id="label_revealer"> +- <property name="visible">True</property> + <child> +- <object class="GtkLabel" id="warn_label"> ++ <object class="GtkRevealer" id="label_revealer"> + <property name="visible">True</property> +- <property name="label" translatable="yes">You already have an alarm for this time.</property> ++ <child> ++ <object class="GtkLabel" id="warn_label"> ++ <property name="margin_top">12</property> ++ <property name="visible">True</property> ++ <property name="label" translatable="yes">You already have an alarm for this time.</property> ++ </object> ++ </child> + </object> + </child> + </object> ++ + </child> + </object> + </child> +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0013-timer-setup-remove-unused-lables.patch b/gnome-clocks-mobile/0013-timer-setup-remove-unused-lables.patch new file mode 100644 index 0000000..e81d1c9 --- /dev/null +++ b/gnome-clocks-mobile/0013-timer-setup-remove-unused-lables.patch @@ -0,0 +1,52 @@ +From 8828ebc1ddb39ae0730367b38344adc601692946 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Mon, 14 Dec 2020 18:14:59 +0100 +Subject: [PATCH 13/16] timer-setup: remove unused lables + +--- + data/ui/timer-setup.ui | 22 ---------------------- + 1 file changed, 22 deletions(-) + +diff --git a/data/ui/timer-setup.ui b/data/ui/timer-setup.ui +index 8a2f3b1..588aedb 100644 +--- a/data/ui/timer-setup.ui ++++ b/data/ui/timer-setup.ui +@@ -206,17 +206,6 @@ + <property name="halign">center</property> + <property name="valign">center</property> + <property name="column_spacing">10</property> +- <child> +- <object class="GtkLabel"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="hexpand">True</property> +- </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">0</property> +- </packing> +- </child> + <child> + <object class="GtkSpinButton" id="h_spinbutton"> + <property name="visible">True</property> +@@ -325,17 +314,6 @@ + <property name="top_attach">0</property> + </packing> + </child> +- <child> +- <object class="GtkLabel"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="hexpand">True</property> +- </object> +- <packing> +- <property name="left_attach">6</property> +- <property name="top_attach">0</property> +- </packing> +- </child> + </object> + <packing> + <property name="expand">True</property> +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0014-timer-Allow-much-smaller-heights-useing-a-ScrolledWi.patch b/gnome-clocks-mobile/0014-timer-Allow-much-smaller-heights-useing-a-ScrolledWi.patch new file mode 100644 index 0000000..92e9ea9 --- /dev/null +++ b/gnome-clocks-mobile/0014-timer-Allow-much-smaller-heights-useing-a-ScrolledWi.patch @@ -0,0 +1,163 @@ +From 239add0b868bb338a0eb9998fa2e5d9b23550a99 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Mon, 14 Dec 2020 18:34:46 +0100 +Subject: [PATCH 14/16] timer: Allow much smaller heights useing a + ScrolledWindow + +--- + data/ui/timer-face.ui | 81 +++++++++++++++++++++---------------- + data/ui/timer-setup.ui | 1 - + src/timer-setup-dialog.vala | 13 +++++- + 3 files changed, 57 insertions(+), 38 deletions(-) + +diff --git a/data/ui/timer-face.ui b/data/ui/timer-face.ui +index 123a8c5..87331ec 100644 +--- a/data/ui/timer-face.ui ++++ b/data/ui/timer-face.ui +@@ -7,55 +7,66 @@ + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> +- <object class="GtkBox" id="no_timer_container"> ++ <object class="GtkScrolledWindow"> + <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="halign">center</property> +- <property name="valign">center</property> +- <property name="orientation">vertical</property> +- <property name="spacing">18</property> ++ <property name="hexpand">True</property> ++ <property name="vexpand">True</property> ++ <property name="hscrollbar-policy">never</property> ++ <property name="propagate-natural-height">True</property> ++ <property name="propagate-natural-width">True</property> + <child> +- <object class="GtkLabel"> ++ <object class="GtkBox" id="no_timer_container"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="label" translatable="yes">Select Duration</property> +- <style> +- <class name="timer-header"/> +- </style> +- </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">True</property> +- <property name="position">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkButton" id="start_button"> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> + <property name="halign">center</property> + <property name="valign">center</property> ++ <property name="orientation">vertical</property> ++ <property name="spacing">18</property> ++ <property name="margin">12</property> + <child> +- <object class="GtkImage"> ++ <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> ++ <property name="label" translatable="yes">Select Duration</property> ++ <style> ++ <class name="timer-header"/> ++ </style> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkButton" id="start_button"> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="receives_default">True</property> + <property name="halign">center</property> + <property name="valign">center</property> +- <property name="icon_name">media-playback-start-symbolic</property> ++ <child> ++ <object class="GtkImage"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="halign">center</property> ++ <property name="valign">center</property> ++ <property name="icon_name">media-playback-start-symbolic</property> ++ </object> ++ </child> ++ <style> ++ <class name="pill-button"/> ++ <class name="large-button"/> ++ <class name="suggested-action"/> ++ </style> + </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">1</property> ++ </packing> + </child> +- <style> +- <class name="pill-button"/> +- <class name="large-button"/> +- <class name="suggested-action"/> +- </style> + </object> +- <packing> +- <property name="expand">False</property> +- <property name="fill">True</property> +- <property name="position">1</property> +- </packing> + </child> + </object> + <packing> +diff --git a/data/ui/timer-setup.ui b/data/ui/timer-setup.ui +index 588aedb..37a181d 100644 +--- a/data/ui/timer-setup.ui ++++ b/data/ui/timer-setup.ui +@@ -198,7 +198,6 @@ + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_top">12</property> +- <property name="margin_bottom">12</property> + <child> + <object class="GtkGrid" id="time_grid"> + <property name="visible">True</property> +diff --git a/src/timer-setup-dialog.vala b/src/timer-setup-dialog.vala +index e360ad8..6e94b90 100644 +--- a/src/timer-setup-dialog.vala ++++ b/src/timer-setup-dialog.vala +@@ -25,14 +25,23 @@ public class SetupDialog: Gtk.Dialog { + + public SetupDialog (Gtk.Window parent) { + Object (modal: true, transient_for: parent, title: _("New Timer"), use_header_bar: 1); +- this.set_default_size (640, 360); + + add_button (_("Cancel"), Gtk.ResponseType.CANCEL); + var create_button = add_button (_("Add"), Gtk.ResponseType.ACCEPT); + create_button.get_style_context ().add_class ("suggested-action"); + + timer_setup = new Setup (); +- this.get_content_area ().add (timer_setup); ++ timer_setup.margin = 12; ++ var container = new Gtk.ScrolledWindow (null, null); ++ container.hexpand = true; ++ container.vexpand = true; ++ container.propagate_natural_height = true; ++ container.propagate_natural_width = true; ++ container.hscrollbar_policy = Gtk.PolicyType.NEVER; ++ container.border_width = 0; ++ container.visible = true; ++ container.add (timer_setup); ++ this.get_content_area ().add (container); + timer_setup.duration_changed.connect ((duration) => { + this.set_response_sensitive (Gtk.ResponseType.ACCEPT, duration != 0); + }); +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0015-alarm-make-ringing-panel-fit-to-small-window-heights.patch b/gnome-clocks-mobile/0015-alarm-make-ringing-panel-fit-to-small-window-heights.patch new file mode 100644 index 0000000..4d5cd43 --- /dev/null +++ b/gnome-clocks-mobile/0015-alarm-make-ringing-panel-fit-to-small-window-heights.patch @@ -0,0 +1,226 @@ +From 845abcf43c0f86ee9405ef7aeaee63adcc16e1d1 Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Tue, 15 Dec 2020 14:23:43 +0100 +Subject: [PATCH 15/16] alarm: make ringing panel fit to small window heights + +--- + data/ui/alarm-ringing-panel.ui | 181 ++++++++++++++++----------------- + 1 file changed, 90 insertions(+), 91 deletions(-) + +diff --git a/data/ui/alarm-ringing-panel.ui b/data/ui/alarm-ringing-panel.ui +index df04bc7..76ead33 100644 +--- a/data/ui/alarm-ringing-panel.ui ++++ b/data/ui/alarm-ringing-panel.ui +@@ -7,119 +7,118 @@ + <object class="HdyWindowHandle"> + <property name="visible">True</property> + <child> +- <object class="GtkGrid"> ++ <object class="HdyClamp"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="margin_left">6</property> +- <property name="margin_right">6</property> +- <property name="margin_top">6</property> +- <property name="margin_bottom">6</property> +- <property name="hexpand">True</property> +- <property name="vexpand">True</property> +- <property name="row_spacing">48</property> +- <property name="column_spacing">24</property> + <child> +- <object class="GtkGrid" id="button_grid"> ++ <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="halign">center</property> +- <property name="valign">center</property> +- <property name="hexpand">True</property> +- <property name="vexpand">True</property> +- <property name="row_spacing">24</property> + <property name="column_spacing">24</property> +- <child> +- <object class="GtkButton" id="stop_button"> +- <property name="label" translatable="yes">Stop</property> +- <property name="width_request">200</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> +- <style> +- <class name="pill-button"/> +- <class name="large-button"/> +- <class name="destructive-action"/> +- </style> +- </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">0</property> +- </packing> +- </child> +- <child> +- <object class="GtkButton" id="snooze_button"> +- <property name="label" translatable="yes">Snooze</property> +- <property name="width_request">200</property> +- <property name="visible">True</property> +- <property name="can_focus">True</property> +- <property name="receives_default">True</property> +- <style> +- <class name="pill-button"/> +- <class name="large-button"/> +- </style> +- </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">1</property> +- </packing> +- </child> +- </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">1</property> +- </packing> +- </child> +- <child> +- <object class="GtkBox"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="halign">center</property> ++ <property name="row_spacing">12</property> ++ <property name="margin">12</property> + <property name="valign">center</property> +- <property name="hexpand">True</property> +- <property name="vexpand">True</property> +- <property name="orientation">vertical</property> + <child> +- <object class="GtkLabel" id="time_label"> ++ <object class="GtkFlowBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="justify">center</property> +- <property name="wrap">True</property> +- <property name="xalign">0.5</property> +- <attributes> +- <attribute name="font-features" value="tnum=1"/> +- </attributes> +- <style> +- <class name="clocks-ringing-label"/> +- </style> ++ <property name="row_spacing">24</property> ++ <property name="column_spacing">24</property> ++ <property name="max_children_per_line">2</property> ++ <property name="hexpand">True</property> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <child> ++ <object class="GtkButton" id="stop_button"> ++ <property name="label" translatable="yes">Stop</property> ++ <property name="width_request">200</property> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="receives_default">True</property> ++ <style> ++ <class name="pill-button"/> ++ <class name="large-button"/> ++ <class name="destructive-action"/> ++ </style> ++ </object> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <child> ++ <object class="GtkButton" id="snooze_button"> ++ <property name="label" translatable="yes">Snooze</property> ++ <property name="width_request">200</property> ++ <property name="visible">True</property> ++ <property name="can_focus">True</property> ++ <property name="receives_default">True</property> ++ <style> ++ <class name="pill-button"/> ++ <class name="large-button"/> ++ </style> ++ </object> ++ </child> ++ </object> ++ </child> + </object> + <packing> +- <property name="expand">False</property> +- <property name="fill">True</property> +- <property name="position">0</property> ++ <property name="left_attach">0</property> ++ <property name="top_attach">1</property> + </packing> + </child> + <child> +- <object class="GtkLabel" id="title_label"> ++ <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="justify">center</property> +- <property name="wrap">True</property> +- <property name="margin_top">24</property> +- <style> +- <class name="clocks-ringing-title"/> +- </style> ++ <property name="orientation">vertical</property> ++ <child> ++ <object class="GtkLabel" id="time_label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="justify">center</property> ++ <property name="wrap">True</property> ++ <property name="xalign">0.5</property> ++ <attributes> ++ <attribute name="font-features" value="tnum=1"/> ++ </attributes> ++ <style> ++ <class name="clocks-ringing-label"/> ++ </style> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="title_label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="justify">center</property> ++ <property name="wrap">True</property> ++ <style> ++ <class name="clocks-ringing-title"/> ++ </style> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">1</property> ++ </packing> ++ </child> + </object> + <packing> +- <property name="expand">False</property> +- <property name="fill">True</property> +- <property name="position">1</property> ++ <property name="left_attach">0</property> ++ <property name="top_attach">0</property> + </packing> + </child> + </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">0</property> +- </packing> + </child> + </object> + </child> +-- +2.34.1 + diff --git a/gnome-clocks-mobile/0016-world-standalone-allow-smaller-window-heights.patch b/gnome-clocks-mobile/0016-world-standalone-allow-smaller-window-heights.patch new file mode 100644 index 0000000..1548f6e --- /dev/null +++ b/gnome-clocks-mobile/0016-world-standalone-allow-smaller-window-heights.patch @@ -0,0 +1,39 @@ +From 7403c9567f2f89fd588ad1796b1a816d5d12bccf Mon Sep 17 00:00:00 2001 +From: Julian Sparber <julian@sparber.net> +Date: Tue, 15 Dec 2020 14:31:12 +0100 +Subject: [PATCH 16/16] world-standalone: allow smaller window heights + +--- + data/ui/world-standalone.ui | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/data/ui/world-standalone.ui b/data/ui/world-standalone.ui +index 46667d7..8f7acff 100644 +--- a/data/ui/world-standalone.ui ++++ b/data/ui/world-standalone.ui +@@ -38,22 +38,8 @@ + <property name="can_focus">False</property> + <property name="halign">center</property> + <property name="valign">center</property> +- <property name="margin_start">34</property> +- <property name="margin_end">34</property> +- <property name="margin_bottom">12</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> +- <child> +- <object class="GtkLabel" id="dummy_label"> +- <property name="visible">True</property> +- <property name="can_focus">False</property> +- <property name="label"> </property> +- </object> +- <packing> +- <property name="left_attach">0</property> +- <property name="top_attach">1</property> +- </packing> +- </child> + <child> + <object class="GtkLabel" id="time_label"> + <property name="visible">True</property> +-- +2.34.1 + diff --git a/gnome-clocks-mobile/PKGBUILD b/gnome-clocks-mobile/PKGBUILD new file mode 100644 index 0000000..4b2f741 --- /dev/null +++ b/gnome-clocks-mobile/PKGBUILD @@ -0,0 +1,81 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org> + +pkgname=gnome-clocks-mobile +_pkgname=gnome-clocks +pkgver=41.0 +pkgrel=3 +pkgdesc="Clocks applications for GNOME" +url="https://wiki.gnome.org/Apps/Clocks" +arch=(x86_64 armv7h aarch64) +license=(GPL) +depends=(gtk3 libgweather gnome-desktop geoclue2 geocode-glib feedbackd libhandy) +makedepends=(vala gobject-introspection yelp-tools git meson) +provides=(gnome-clocks) +conflicts=(gnome-clocks) +_commit=90d36119a5ac0bb86586e261a26562baea4d577c # tags/41.0^0 +source=("git+https://gitlab.gnome.org/GNOME/gnome-clocks.git#commit=$_commit" + '0001-timer-Use-name-that-can-be-added-to-the-event-naming.patch' + '0002-Use-libfeedback-in-instead-of-GSound.patch' + '0003-timers-persist-running-timers.patch' + '0004-alarm-item-Make-sure-that-the-time-property-is-alway.patch' + '0005-alarm-remove-edit-property.patch' + '0006-alarms-Make-alarms-persisted-and-add-missed-alarms-n.patch' + '0007-Fixed-infinite-alarming.patch' + '0008-Alarms-Fix-wiping-edit-data.patch' + '0009-Don-t-show-numpad-when-setting-a-new-alarm-timer.patch' + '0010-add-option-to-start-hidden.patch' + '0011-autostart-gnome-clocks.patch' + '0012-alarm-setup-dialog-Allow-much-smaller-heights-useing.patch' + '0013-timer-setup-remove-unused-lables.patch' + '0014-timer-Allow-much-smaller-heights-useing-a-ScrolledWi.patch' + '0015-alarm-make-ringing-panel-fit-to-small-window-heights.patch' + '0016-world-standalone-allow-smaller-window-heights.patch') +sha256sums=('SKIP' + '4aa66ae47df1d970ed6138e3d3cec7eea588af7dfa39f0940c13dfa5164052ad' + '9e692d5e340c81943b7312249054a74ee4f83c756a5bf510102a01f5f9ffc458' + '4d46e7968b54d7f16c89ec2d69a5e06c8952253e589bf58546d2dddf86f4d57a' + '10b5aec1a643e8210e410aed716c136a949aa5eacc2b9589fd81c97d99536b79' + 'a22e67d3d580c5291b706048c55410e7cbe2d9e59e57c29357e4bbdd00ceaf5f' + '5ac80e8d2379577e6f5f5b0e7862446d6a017b319401f7bdc2ce523d9ac55da6' + '0ae3d7354a491296c03f4102aace3eaf6f0193efda2311b462cf1afa3f9c7a37' + '73dea007e55d6fec12730fdb1cd7bf319c8b373b337f79e7b91d912ec3d8cc40' + 'c242f5fd594cc58ba5dd5b313cb5a057308503c94576bbaa58928181a77cf083' + '1f0a13d25aae7942859decb9167a1e53ce24060cc56ef17a0d0b2c10fb77204f' + 'dc9fe50c7b6c902eeeb2e67f4a81b017856f800c98b6ce68627db3e8fc5c39b7' + '8b15b617990827196c7444b4238c562af004dd5d98841e00d8829d12a70b0621' + '437bf6caa21232c7d8ec40d541ebd443e9343197cd21256e4ce8a1cab6045f6a' + 'bb0121b34c44b0515a9289704e0562871cd5da1544ca520fb04b80baa5c388fe' + '664515657ee315894be6e1b0b87c9308d9dc1de2eb00aebc29ecf87c133147ac' + '992d8868dc96d5b5742cafa26f119484d461a84ee29ac5cf1985ea7f51942d36') + +pkgver() { + cd $_pkgname + git describe --tags | sed 's/-/+/g' +} + +prepare() { + cd $_pkgname + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + arch-meson $_pkgname build + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" +} diff --git a/gnome-contacts-mobile/0001-ContactSheet-Add-make-call-and-send-sms-button.patch b/gnome-contacts-mobile/0001-ContactSheet-Add-make-call-and-send-sms-button.patch new file mode 100644 index 0000000..97e4308 --- /dev/null +++ b/gnome-contacts-mobile/0001-ContactSheet-Add-make-call-and-send-sms-button.patch @@ -0,0 +1,68 @@ +From: Julian Sparber <julian@sparber.net> +Date: Wed, 13 Jul 2022 22:03:09 +0400 +Subject: contact-sheet: Add call and send sms buttons + +This adds a button to make calls via the default handler for tel: +and a button to send sms via the default handler for sms: + +The buttons are hidden when no handler is available. +--- + src/contacts-contact-sheet.vala | 15 +++++++++++++++ + src/contacts-utils.vala | 18 ++++++++++++++++++ + 2 files changed, 33 insertions(+) + +diff --git a/src/contacts-contact-sheet.vala b/src/contacts-contact-sheet.vala +index e662ee0..c93370d 100644 +--- a/src/contacts-contact-sheet.vala ++++ b/src/contacts-contact-sheet.vala +@@ -245,6 +245,21 @@ public class Contacts.ContactSheet : Gtk.Widget { + var row = new ContactSheetRow (chunk, + phone.raw_number, + phone.get_phone_type ().display_name); ++ ++ // Show a call button when we have a handler for it ++ if (AppInfo.get_all_for_type ("x-scheme-handler/tel").length () > 0) { ++ var call_button = row.add_button ("call-start-symbolic"); ++ call_button.clicked.connect (() => { ++ Utils.start_call (phone.raw_number, get_root () as Gtk.Window); ++ }); ++ } ++ if (AppInfo.get_all_for_type ("x-scheme-handler/sms").length () > 0) { ++ var sms_button = row.add_button ("chat-message-new-symbolic"); ++ sms_button.clicked.connect (() => { ++ Utils.send_sms (phone.raw_number, get_root () as Gtk.Window); ++ }); ++ } ++ + group.add (row); + } + +diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala +index a457a2e..2e6aeef 100644 +--- a/src/contacts-utils.vala ++++ b/src/contacts-utils.vala +@@ -19,6 +19,24 @@ using Folks; + + namespace Contacts.Utils { + ++ public void start_call (string number, Gtk.Window toplevel) { ++ var uri = "tel:" + Uri.escape_string (number, "+" , false); ++ try { ++ Gtk.show_uri (toplevel, uri, 0); ++ } catch (Error e) { ++ debug ("Couldn't launch URI \"%s\": %s", uri, e.message); ++ } ++ } ++ ++ public void send_sms (string number, Gtk.Window toplevel) { ++ var uri = "sms:" + Uri.escape_string (number, "+" , false); ++ try { ++ Gtk.show_uri (toplevel, uri, 0); ++ } catch (Error e) { ++ debug ("Couldn't launch URI \"%s\": %s", uri, e.message); ++ } ++ } ++ + public T? get_first<T> (Gee.Collection<T> collection) { + var i = collection.iterator(); + if (i.next()) diff --git a/gnome-contacts-mobile/PKGBUILD b/gnome-contacts-mobile/PKGBUILD new file mode 100644 index 0000000..ed369b7 --- /dev/null +++ b/gnome-contacts-mobile/PKGBUILD @@ -0,0 +1,75 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> +# Contributor: Ionut Biru <ibiru@archlinux.org> + +pkgname=gnome-contacts-mobile +_pkgname=gnome-contacts +pkgver=45.1 +pkgrel=1 +pkgdesc="Contacts Manager for GNOME - Forked for Purism patches" +url="https://wiki.gnome.org/Apps/Contacts" +arch=(x86_64 armv7h aarch64) +license=(GPL-2.0-or-later) +depends=( + cairo + dconf + evolution-data-server + folks + gdk-pixbuf2 + glib2 + gnome-online-accounts + gtk4 + hicolor-icon-theme + libadwaita + libgee + libgoa + libportal + libportal-gtk4 + pango + qrencode +) +makedepends=( + appstream-glib + git + gobject-introspection + meson + vala +) +provides=(gnome-contacts) +conflicts=(gnome-contacts) +_commit=aa0456c32a6ec8e766ea090e7f3fb85e0035f506 # tags/45.1^0 +source=("git+https://gitlab.gnome.org/GNOME/gnome-contacts.git#commit=$_commit" + '0001-ContactSheet-Add-make-call-and-send-sms-button.patch') +b2sums=('SKIP' + 'fa242d8e587486496502cafbb565423752c7f3d49c15bc364a26f64bb81ddbe070f900fa68c8c24d863a894123416ecef7b9b9902d2acbe077523a036d3ccf5c') + +pkgver() { + cd $_pkgname + git describe --tags | sed 's/-/+/g' +} + +prepare() { + cd $_pkgname + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + arch-meson $_pkgname build + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" +} diff --git a/gnome-control-center-mobile/0001-avatar-chooser-Adapt-to-work-on-librem5.patch b/gnome-control-center-mobile/0001-avatar-chooser-Adapt-to-work-on-librem5.patch new file mode 100644 index 0000000..e760691 --- /dev/null +++ b/gnome-control-center-mobile/0001-avatar-chooser-Adapt-to-work-on-librem5.patch @@ -0,0 +1,41 @@ +From: Mohammed Sadiq <sadiq@sadiqpk.org> +Date: Fri, 20 Sep 2019 16:11:07 +0530 +Subject: [PATCH 1/7] avatar-chooser: Adapt to work on librem5 + +--- + panels/system/users/cc-avatar-chooser.ui | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/panels/system/users/cc-avatar-chooser.ui b/panels/system/users/cc-avatar-chooser.ui +index 0f19c6e..d1ed9ae 100644 +--- a/panels/system/users/cc-avatar-chooser.ui ++++ b/panels/system/users/cc-avatar-chooser.ui +@@ -3,6 +3,11 @@ + <!-- interface-requires gtk+ 3.8 --> + <template class="CcAvatarChooser" parent="GtkPopover"> + <property name="visible">False</property> ++ <child> ++ <object class="GtkScrolledWindow"> ++ <property name="visible">1</property> ++ <property name="hscrollbar-policy">never</property> ++ <property name="min-content-height">380</property> + <child> + <object class="GtkBox"> + <property name="orientation">GTK_ORIENTATION_VERTICAL</property> +@@ -11,7 +16,7 @@ + <object class="GtkFlowBox" id="flowbox"> + <property name="selection-mode">none</property> + <property name="homogeneous">True</property> +- <property name="max-children-per-line">5</property> ++ <property name="max-children-per-line">3</property> + <property name="column-spacing">10</property> + </object> + </child> +@@ -29,5 +34,7 @@ + </child> + </object> + </child> ++ </object> ++ </child> + </template> + </interface> diff --git a/gnome-control-center-mobile/0004-power-add-more-suspend-timing-options.patch b/gnome-control-center-mobile/0004-power-add-more-suspend-timing-options.patch new file mode 100644 index 0000000..ba17cae --- /dev/null +++ b/gnome-control-center-mobile/0004-power-add-more-suspend-timing-options.patch @@ -0,0 +1,27 @@ +From: Arnaud Ferraris <arnaud.ferraris@collabora.com> +Date: Mon, 25 May 2020 21:03:38 +0200 +Subject: [PATCH 4/4] power: add more suspend timing options + +--- + panels/power/cc-power-panel.ui | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/panels/power/cc-power-panel.ui b/panels/power/cc-power-panel.ui +index b6efcd0..4e5bae1 100644 +--- a/panels/power/cc-power-panel.ui ++++ b/panels/power/cc-power-panel.ui +@@ -8,6 +8,14 @@ + <column type="gint"/> + </columns> + <data> ++ <row> ++ <col id="0" translatable="yes" context="automatic_suspend" comments="Translators: Option for &quot;Delay&quot; in &quot;Automatic suspend&quot; dialog.">5 minutes</col> ++ <col id="1">300</col> ++ </row> ++ <row> ++ <col id="0" translatable="yes" context="automatic_suspend" comments="Translators: Option for &quot;Delay&quot; in &quot;Automatic suspend&quot; dialog.">10 minutes</col> ++ <col id="1">600</col> ++ </row> + <row> + <col id="0" translatable="yes" context="automatic_suspend" comments="Translators: Option for &quot;Delay&quot; in &quot;Automatic suspend&quot; dialog.">15 minutes</col> + <col id="1">900</col> diff --git a/gnome-control-center-mobile/Add-patches-to-check-if-phone.patch b/gnome-control-center-mobile/Add-patches-to-check-if-phone.patch new file mode 100644 index 0000000..52a9dcb --- /dev/null +++ b/gnome-control-center-mobile/Add-patches-to-check-if-phone.patch @@ -0,0 +1,37 @@ +From: Mohammed Sadiq <sadiq@sadiqpk.org> +Date: Tue, 2 Mar 2021 16:45:32 +0530 +Subject: [PATCH 1/8] Add patches to check if phone + +--- + panels/common/pureos.h | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + create mode 100644 panels/common/pureos.h + +diff --git a/panels/common/pureos.h b/panels/common/pureos.h +new file mode 100644 +index 0000000..2e31d7e +--- /dev/null ++++ b/panels/common/pureos.h +@@ -0,0 +1,22 @@ ++#include <gtk/gtk.h> ++ ++static inline gboolean ++pureos_get_is_phone (void) ++{ ++ GSettingsSchema *schema; ++ GSettings *gsettings; ++ gboolean is_phone; ++ ++ schema = g_settings_schema_source_lookup (g_settings_schema_source_get_default (), ++ "org.gtk.Settings.Purism", TRUE); ++ ++ if (!schema) ++ return FALSE; ++ ++ gsettings = g_settings_new_full (schema, NULL, NULL); ++ is_phone = g_settings_get_boolean (gsettings, "is-phone"); ++ g_object_unref (gsettings); ++ g_settings_schema_unref (schema); ++ ++ return is_phone; ++} diff --git a/gnome-control-center-mobile/PKGBUILD b/gnome-control-center-mobile/PKGBUILD new file mode 100644 index 0000000..a50beaa --- /dev/null +++ b/gnome-control-center-mobile/PKGBUILD @@ -0,0 +1,152 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> +# Contributor: Jan de Groot <jgc@archlinux.org> + +_pkgname=gnome-control-center +pkgname=gnome-control-center-mobile +pkgver=46.0.1 +pkgrel=1 +pkgdesc="GNOME's main interface to configure various aspects of the desktop - Purism fork" +url="https://gitlab.gnome.org/GNOME/gnome-control-center" +license=(GPL-2.0-or-later) +arch=(x86_64 armv7h aarch64) +depends=( + accountsservice + bolt + cairo + colord-gtk4 + cups-pk-helper + dconf + fontconfig + gcc-libs + gcr-4 + gdk-pixbuf2 + glib2 + glibc + gnome-bluetooth-3.0 + gnome-color-manager + gnome-desktop-4 + gnome-online-accounts + gnome-settings-daemon + gnutls + graphene + gsettings-desktop-schemas + gsound + gtk4 + hicolor-icon-theme + json-glib + krb5 + libadwaita + libcolord + libcups + libepoxy + libgoa + libgtop + libgudev + libibus + libmm-glib + libnm + libnma-gtk4 + libpulse + libpwquality + libsecret + libsoup3 + libwacom + libx11 + libxi + libxml2 + modemmanager + pango + polkit + smbclient + sound-theme-freedesktop + tecla + udisks2 + upower +) +makedepends=( + docbook-xsl + git + meson + python + python-packaging +) +checkdepends=( + python-dbusmock + python-gobject + xorg-server-xvfb +) +optdepends=( + 'fwupd: device security panel' + 'gnome-remote-desktop: screen sharing' + + # Cannot be a depend because when gnome-shell checkdepends on + # gnome-control-center depends on gnome-shell depends on libmutter-12.so, it + # makes building gnome-shell against libmutter-13.so impossible + 'gnome-shell: multitasking panel' + + 'gnome-user-share: WebDAV file sharing' + 'networkmanager: network settings' + 'openssh: remote login' + 'power-profiles-daemon: power profiles' + 'rygel: media sharing' + 'system-config-printer: printer settings' +) +provides=(gnome-control-center) +conflicts=(gnome-control-center) +source=( + "git+https://gitlab.gnome.org/GNOME/gnome-control-center.git?signed#tag=$pkgver" + "git+https://gitlab.gnome.org/GNOME/libgnome-volume-control.git" + # purism + '0001-avatar-chooser-Adapt-to-work-on-librem5.patch' + 'Add-patches-to-check-if-phone.patch' + # mobian + '0004-power-add-more-suspend-timing-options.patch' + 'resize-connection-editor.patch' +) +sha256sums=('5ee40c5b39544aba9ff36156bc5e5e3258e065e92518a1c150a2936bafe3db0a' + 'SKIP' + 'c18c1b9fdab8e8b7aad8519a58996267377965dbe3d8d8dc9a9129fe80da01ef' + '09e36b0aa2c40d6b6f5be11fd9617223d5b142ff8b50db6fce0eeebc63007327' + '6f1906d58edfa87658c6396091601cab44f40046aced3a56bf5b4e46c0510fb6' + 'c006215f8e8c6ef523708089f246815f845d82d94e5f442460d4a4aafdfb617b') +validpgpkeys=( + 9B60FE7947F0A3C58136817F2C2A218742E016BE # Felipe Borges (GNOME) <felipeborges@gnome.org> +) + +prepare() { + cd ${_pkgname} + + git submodule init subprojects/gvc + git submodule set-url subprojects/gvc "$srcdir/libgnome-volume-control" + git -c protocol.file.allow=always submodule update + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + local meson_options=( + -D documentation=true + ) + + arch-meson ${_pkgname} build "${meson_options[@]}" + meson compile -C build +} + +check() { + GTK_A11Y=none dbus-run-session xvfb-run -s '-nolisten local +iglx -noreset' \ + meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" + + echo "X-Purism-FormFactor=Workstation;Mobile;" >> "$pkgdir/usr/share/applications/gnome-control-center.desktop" +} diff --git a/gnome-control-center-mobile/resize-connection-editor.patch b/gnome-control-center-mobile/resize-connection-editor.patch new file mode 100644 index 0000000..d4a13f0 --- /dev/null +++ b/gnome-control-center-mobile/resize-connection-editor.patch @@ -0,0 +1,614 @@ +From: Debian GNOME Maintainers + <pkg-gnome-maintainers@lists.alioth.debian.org> +Date: Thu, 2 Jun 2022 14:36:35 +0200 +Subject: resize-connection-editor + +=================================================================== +--- + .../connection-editor/8021x-security-page.ui | 6 +-- + .../connection-editor/ce-page-8021x-security.c | 2 +- + panels/network/connection-editor/ce-page-ip4.c | 4 +- + panels/network/connection-editor/ce-page-ip6.c | 4 +- + .../network/connection-editor/ce-page-security.c | 2 +- + .../network/connection-editor/connection-editor.ui | 4 +- + panels/network/connection-editor/details-page.ui | 9 +++-- + panels/network/connection-editor/ethernet-page.ui | 36 ++++++++--------- + panels/network/connection-editor/ip4-page.ui | 42 ++++++++++---------- + panels/network/connection-editor/ip6-page.ui | 46 +++++++++++----------- + panels/network/connection-editor/security-page.ui | 6 +-- + panels/network/connection-editor/vpn-page.ui | 6 +-- + panels/network/connection-editor/wifi-page.ui | 6 +-- + 13 files changed, 87 insertions(+), 86 deletions(-) + +diff --git a/panels/network/connection-editor/8021x-security-page.ui b/panels/network/connection-editor/8021x-security-page.ui +index 4880d99..2e774a3 100644 +--- a/panels/network/connection-editor/8021x-security-page.ui ++++ b/panels/network/connection-editor/8021x-security-page.ui +@@ -8,14 +8,14 @@ + <property name="propagate-natural-width">True</property> + <child> + <object class="GtkGrid" id="grid"> +- <property name="margin_start">50</property> +- <property name="margin_end">50</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">12</property> + <property name="margin_bottom">12</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="row_spacing">10</property> +- <property name="column_spacing">6</property> ++ <property name="column_spacing">2</property> + <child> + <object class="GtkLabel" id="security_label"> + <property name="xalign">1</property> +diff --git a/panels/network/connection-editor/ce-page-8021x-security.c b/panels/network/connection-editor/ce-page-8021x-security.c +index 3826946..97cd01a 100644 +--- a/panels/network/connection-editor/ce-page-8021x-security.c ++++ b/panels/network/connection-editor/ce-page-8021x-security.c +@@ -68,7 +68,7 @@ finish_setup (CEPage8021xSecurity *self, gpointer unused, GError *error, gpointe + if (error) + return; + +- self->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); ++ self->group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); + + self->security = nma_ws_802_1x_new (self->connection, FALSE, FALSE); + if (!self->security) { +diff --git a/panels/network/connection-editor/ce-page-ip4.c b/panels/network/connection-editor/ce-page-ip4.c +index b7a687d..0aeed7c 100644 +--- a/panels/network/connection-editor/ce-page-ip4.c ++++ b/panels/network/connection-editor/ce-page-ip4.c +@@ -247,7 +247,7 @@ add_address_row (CEPageIP4 *self, + row = gtk_list_box_row_new (); + gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE); + +- row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++ row_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_add_css_class (row_box, "linked"); + + widget = GTK_WIDGET (ce_ip_address_entry_new (AF_INET)); +@@ -393,7 +393,7 @@ add_route_row (CEPageIP4 *self, + row = gtk_list_box_row_new (); + gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE); + +- row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++ row_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_add_css_class (row_box, "linked"); + + widget = GTK_WIDGET (ce_ip_address_entry_new (AF_INET)); +diff --git a/panels/network/connection-editor/ce-page-ip6.c b/panels/network/connection-editor/ce-page-ip6.c +index a5e5dcb..0a02fc0 100644 +--- a/panels/network/connection-editor/ce-page-ip6.c ++++ b/panels/network/connection-editor/ce-page-ip6.c +@@ -231,7 +231,7 @@ add_address_row (CEPageIP6 *self, + row = gtk_list_box_row_new (); + gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE); + +- row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++ row_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_add_css_class (row_box, "linked"); + + widget = GTK_WIDGET (ce_ip_address_entry_new (AF_INET6)); +@@ -369,7 +369,7 @@ add_route_row (CEPageIP6 *self, + row = gtk_list_box_row_new (); + gtk_list_box_row_set_activatable (GTK_LIST_BOX_ROW (row), FALSE); + +- row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++ row_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_add_css_class (row_box, "linked"); + + widget = GTK_WIDGET (ce_ip_address_entry_new (AF_INET6)); +diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c +index fbc627a..2a51301 100644 +--- a/panels/network/connection-editor/ce-page-security.c ++++ b/panels/network/connection-editor/ce-page-security.c +@@ -234,7 +234,7 @@ finish_setup (CEPageSecurity *self) + sw = nm_connection_get_setting_wireless (self->connection); + g_assert (sw); + +- self->group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); ++ self->group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); + + dev_caps = NM_WIFI_DEVICE_CAP_CIPHER_WEP40 + | NM_WIFI_DEVICE_CAP_CIPHER_WEP104 +diff --git a/panels/network/connection-editor/connection-editor.ui b/panels/network/connection-editor/connection-editor.ui +index 89f8418..0c3b116 100644 +--- a/panels/network/connection-editor/connection-editor.ui ++++ b/panels/network/connection-editor/connection-editor.ui +@@ -3,7 +3,7 @@ + <template class="NetConnectionEditor" parent="AdwWindow"> + <property name="destroy-with-parent">True</property> + <property name="modal">True</property> +- <property name="width_request">360</property> ++ <property name="width_request">320</property> + <property name="height_request">294</property> + <child> + <object class="AdwToolbarView"> +@@ -59,7 +59,7 @@ + <object class="AdwBin" id="add_connection_frame"> + <property name="hexpand">True</property> + <property name="vexpand">True</property> +- <property name="width_request">300</property> ++ <property name="width_request">200</property> + <property name="valign">start</property> + <property name="margin-start">12</property> + <property name="margin-end">12</property> +diff --git a/panels/network/connection-editor/details-page.ui b/panels/network/connection-editor/details-page.ui +index 8ae94ff..163e8a5 100644 +--- a/panels/network/connection-editor/details-page.ui ++++ b/panels/network/connection-editor/details-page.ui +@@ -8,12 +8,12 @@ + <property name="propagate-natural-width">True</property> + <child> + <object class="GtkGrid"> +- <property name="margin_start">24</property> +- <property name="margin_end">24</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">24</property> + <property name="margin_bottom">24</property> + <property name="row_spacing">12</property> +- <property name="column_spacing">12</property> ++ <property name="column_spacing">2</property> + <child> + <object class="GtkLabel" id="strength_heading_label"> + <property name="xalign">1</property> +@@ -414,6 +414,7 @@ + <object class="GtkLabel"> + <property name="xalign">0</property> + <property name="label" translatable="yes">_Metered connection: has data limits or can incur charges</property> ++ <property name="wrap">True</property> + <property name="hexpand">True</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">restrict_data_check</property> +@@ -424,7 +425,7 @@ + <property name="xalign">0</property> + <property name="label" translatable="yes">Software updates and other large downloads will not be started automatically.</property> + <property name="wrap">True</property> +- <property name="max_width_chars">60</property> ++ <property name="max_width_chars">30</property> + <style> + <class name="dim-label" /> + </style> +diff --git a/panels/network/connection-editor/ethernet-page.ui b/panels/network/connection-editor/ethernet-page.ui +index 89cdf8f..9c7cf3d 100644 +--- a/panels/network/connection-editor/ethernet-page.ui ++++ b/panels/network/connection-editor/ethernet-page.ui +@@ -13,14 +13,14 @@ + <property name="propagate-natural-width">True</property> + <child> + <object class="GtkGrid"> +- <property name="margin_start">50</property> +- <property name="margin_end">50</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">12</property> + <property name="margin_bottom">12</property> +- <property name="hexpand">True</property> ++ <property name="hexpand">False</property> + <property name="vexpand">True</property> +- <property name="row_spacing">10</property> +- <property name="column_spacing">6</property> ++ <property name="row_spacing">5</property> ++ <property name="column_spacing">2</property> + <child> + <object class="GtkLabel"> + <property name="xalign">1</property> +@@ -37,8 +37,8 @@ + <object class="GtkEntry" id="name_entry"> + <property name="invisible_char">●</property> + <layout> +- <property name="column">1</property> +- <property name="row">0</property> ++ <property name="column">0</property> ++ <property name="row">1</property> + </layout> + </object> + </child> +@@ -50,7 +50,7 @@ + <property name="mnemonic_widget">mac_combo</property> + <layout> + <property name="column">0</property> +- <property name="row">1</property> ++ <property name="row">2</property> + </layout> + </object> + </child> +@@ -60,8 +60,8 @@ + <property name="entry_text_column">0</property> + <property name="id_column">1</property> + <layout> +- <property name="column">1</property> +- <property name="row">1</property> ++ <property name="column">0</property> ++ <property name="row">2</property> + </layout> + </object> + </child> +@@ -71,8 +71,8 @@ + <property name="hexpand">True</property> + <property name="active_id">0</property> + <layout> +- <property name="column">1</property> +- <property name="row">2</property> ++ <property name="column">0</property> ++ <property name="row">3</property> + </layout> + <child internal-child="entry"> + <object class="GtkEntry"> +@@ -88,7 +88,7 @@ + <property name="mnemonic_widget">mtu_spin</property> + <layout> + <property name="column">0</property> +- <property name="row">3</property> ++ <property name="row">4</property> + </layout> + </object> + </child> +@@ -101,7 +101,7 @@ + <property name="mnemonic_widget">cloned_mac_combo</property> + <layout> + <property name="column">0</property> +- <property name="row">2</property> ++ <property name="row">3</property> + </layout> + </object> + </child> +@@ -109,8 +109,8 @@ + <object class="GtkLabel" id="mtu_label"> + <property name="label" translatable="yes">bytes</property> + <layout> +- <property name="column">2</property> +- <property name="row">3</property> ++ <property name="column">1</property> ++ <property name="row">4</property> + </layout> + </object> + </child> +@@ -118,8 +118,8 @@ + <object class="GtkSpinButton" id="mtu_spin"> + <property name="adjustment">mtu_adjustment</property> + <layout> +- <property name="column">1</property> +- <property name="row">3</property> ++ <property name="column">0</property> ++ <property name="row">4</property> + </layout> + </object> + </child> +diff --git a/panels/network/connection-editor/ip4-page.ui b/panels/network/connection-editor/ip4-page.ui +index 31183b4..c988c26 100644 +--- a/panels/network/connection-editor/ip4-page.ui ++++ b/panels/network/connection-editor/ip4-page.ui +@@ -10,13 +10,13 @@ + <object class="GtkViewport"> + <child> + <object class="GtkGrid" id="main_box"> +- <property name="margin_start">24</property> +- <property name="margin_end">24</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">24</property> + <property name="margin_bottom">24</property> + <property name="orientation">vertical</property> +- <property name="row-spacing">6</property> +- <property name="column-spacing">6</property> ++ <property name="row-spacing">2</property> ++ <property name="column-spacing">2</property> + <child> + <object class="GtkLabel"> + <property name="label" translatable="yes">IPv_4 Method</property> +@@ -38,8 +38,8 @@ + <property name="action-name">ip4page.ip4method</property> + <property name="action-target">'automatic'</property> + <layout> +- <property name="row">0</property> +- <property name="column">1</property> ++ <property name="row">1</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -49,8 +49,8 @@ + <property name="action-name">ip4page.ip4method</property> + <property name="action-target">'local'</property> + <layout> +- <property name="row">0</property> +- <property name="column">2</property> ++ <property name="row">2</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -60,8 +60,8 @@ + <property name="action-name">ip4page.ip4method</property> + <property name="action-target">'manual'</property> + <layout> +- <property name="row">1</property> +- <property name="column">1</property> ++ <property name="row">3</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -71,8 +71,8 @@ + <property name="action-name">ip4page.ip4method</property> + <property name="action-target">'disabled'</property> + <layout> +- <property name="row">1</property> +- <property name="column">2</property> ++ <property name="row">4</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -82,8 +82,8 @@ + <property name="action-name">ip4page.ip4method</property> + <property name="action-target">'shared'</property> + <layout> +- <property name="row">2</property> +- <property name="column">1</property> ++ <property name="row">5</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -92,9 +92,9 @@ + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <layout> +- <property name="row">3</property> ++ <property name="row">6</property> + <property name="column">0</property> +- <property name="column-span">3</property> ++ <property name="column-span">1</property> + </layout> + <child> + <object class="GtkBox" id="address_box"> +@@ -112,7 +112,7 @@ + </child> + <child> + <object class="GtkBox"> +- <property name="orientation">horizontal</property> ++ <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="address_address_label"> + <property name="hexpand">True</property> +@@ -260,7 +260,7 @@ + <property name="orientation">vertical</property> + <child> + <object class="GtkBox"> +- <property name="orientation">horizontal</property> ++ <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="routes_address_label"> + <property name="hexpand">True</property> +@@ -357,19 +357,19 @@ + </widgets> + </object> + <object class="GtkSizeGroup" id="routes_metric_sizegroup"> +- <property name="mode">horizontal</property> ++ <property name="mode">vertical</property> + <widgets> + <widget name="routes_metric_label" /> + </widgets> + </object> + <object class="GtkSizeGroup" id="routes_sizegroup"> +- <property name="mode">horizontal</property> ++ <property name="mode">vertical</property> + <widgets> + <widget name="routes_stub_box" /> + </widgets> + </object> + <object class="GtkSizeGroup" id="address_sizegroup"> +- <property name="mode">horizontal</property> ++ <property name="mode">vertical</property> + <widgets> + <widget name="address_stub_box" /> + </widgets> +diff --git a/panels/network/connection-editor/ip6-page.ui b/panels/network/connection-editor/ip6-page.ui +index fc68016..f553bab 100644 +--- a/panels/network/connection-editor/ip6-page.ui ++++ b/panels/network/connection-editor/ip6-page.ui +@@ -10,13 +10,13 @@ + <object class="GtkViewport"> + <child> + <object class="GtkGrid" id="main_box"> +- <property name="margin_start">24</property> +- <property name="margin_end">24</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">24</property> + <property name="margin_bottom">24</property> + <property name="orientation">vertical</property> +- <property name="row-spacing">6</property> +- <property name="column-spacing">6</property> ++ <property name="row-spacing">2</property> ++ <property name="column-spacing">2</property> + <child> + <object class="GtkLabel"> + <property name="label" translatable="yes">IPv_6 Method</property> +@@ -38,8 +38,8 @@ + <property name="action-name">ip6page.ip6method</property> + <property name="action-target">'automatic'</property> + <layout> +- <property name="row">0</property> +- <property name="column">1</property> ++ <property name="row">1</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -49,8 +49,8 @@ + <property name="action-name">ip6page.ip6method</property> + <property name="action-target">'dhcp'</property> + <layout> +- <property name="row">0</property> +- <property name="column">2</property> ++ <property name="row">2</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -60,8 +60,8 @@ + <property name="action-name">ip6page.ip6method</property> + <property name="action-target">'local'</property> + <layout> +- <property name="row">1</property> +- <property name="column">1</property> ++ <property name="row">3</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -71,8 +71,8 @@ + <property name="action-name">ip6page.ip6method</property> + <property name="action-target">'manual'</property> + <layout> +- <property name="row">1</property> +- <property name="column">2</property> ++ <property name="row">4</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -82,8 +82,8 @@ + <property name="action-name">ip6page.ip6method</property> + <property name="action-target">'disabled'</property> + <layout> +- <property name="row">2</property> +- <property name="column">1</property> ++ <property name="row">5</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -93,8 +93,8 @@ + <property name="action-name">ip6page.ip6method</property> + <property name="action-target">'shared'</property> + <layout> +- <property name="row">2</property> +- <property name="column">2</property> ++ <property name="row">6</property> ++ <property name="column">0</property> + </layout> + </object> + </child> +@@ -103,9 +103,9 @@ + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <layout> +- <property name="row">3</property> ++ <property name="row">7</property> + <property name="column">0</property> +- <property name="column-span">3</property> ++ <property name="column-span">1</property> + </layout> + <child> + <object class="GtkBox" id="address_box"> +@@ -123,7 +123,7 @@ + </child> + <child> + <object class="GtkBox"> +- <property name="orientation">horizontal</property> ++ <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="address_address_label"> + <property name="hexpand">True</property> +@@ -271,7 +271,7 @@ + <property name="orientation">vertical</property> + <child> + <object class="GtkBox"> +- <property name="orientation">horizontal</property> ++ <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="routes_address_label"> + <property name="hexpand">True</property> +@@ -368,19 +368,19 @@ + </widgets> + </object> + <object class="GtkSizeGroup" id="routes_metric_sizegroup"> +- <property name="mode">horizontal</property> ++ <property name="mode">vertical </property> + <widgets> + <widget name="routes_metric_label" /> + </widgets> + </object> + <object class="GtkSizeGroup" id="routes_sizegroup"> +- <property name="mode">horizontal</property> ++ <property name="mode">vertical </property> + <widgets> + <widget name="routes_stub_box" /> + </widgets> + </object> + <object class="GtkSizeGroup" id="address_sizegroup"> +- <property name="mode">horizontal</property> ++ <property name="mode">vertical </property> + <widgets> + <widget name="address_stub_box" /> + </widgets> +diff --git a/panels/network/connection-editor/security-page.ui b/panels/network/connection-editor/security-page.ui +index affba83..ef8723a 100644 +--- a/panels/network/connection-editor/security-page.ui ++++ b/panels/network/connection-editor/security-page.ui +@@ -8,14 +8,14 @@ + <property name="propagate-natural-width">True</property> + <child> + <object class="GtkGrid"> +- <property name="margin_start">50</property> +- <property name="margin_end">50</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">12</property> + <property name="margin_bottom">12</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="row_spacing">10</property> +- <property name="column_spacing">6</property> ++ <property name="column_spacing">2</property> + <child> + <object class="GtkLabel" id="security_label"> + <property name="xalign">1</property> +diff --git a/panels/network/connection-editor/vpn-page.ui b/panels/network/connection-editor/vpn-page.ui +index d087e5e..8ce453b 100644 +--- a/panels/network/connection-editor/vpn-page.ui ++++ b/panels/network/connection-editor/vpn-page.ui +@@ -8,12 +8,12 @@ + <property name="propagate-natural-width">True</property> + <child> + <object class="GtkBox" id="box"> +- <property name="margin_start">50</property> +- <property name="margin_end">50</property> ++ <property name="margin_start">12</property> ++ <property name="margin_end">12</property> + <property name="margin_top">12</property> + <property name="margin_bottom">12</property> + <property name="orientation">vertical</property> +- <property name="spacing">10</property> ++ <property name="spacing">2</property> + <child> + <object class="GtkBox"> + <property name="spacing">6</property> +diff --git a/panels/network/connection-editor/wifi-page.ui b/panels/network/connection-editor/wifi-page.ui +index daf0ea6..eae877f 100644 +--- a/panels/network/connection-editor/wifi-page.ui ++++ b/panels/network/connection-editor/wifi-page.ui +@@ -8,14 +8,14 @@ + <property name="propagate-natural-width">True</property> + <child> + <object class="GtkGrid"> +- <property name="margin_start">50</property> +- <property name="margin_end">50</property> ++ <property name="margin_start">10</property> ++ <property name="margin_end">10</property> + <property name="margin_top">12</property> + <property name="margin_bottom">12</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="row_spacing">10</property> +- <property name="column_spacing">6</property> ++ <property name="column_spacing">2</property> + <child> + <object class="GtkLabel"> + <property name="xalign">1</property> diff --git a/gnome-usage-mobile/0001-Add-libgtherm-dependency.patch b/gnome-usage-mobile/0001-Add-libgtherm-dependency.patch new file mode 100644 index 0000000..af7e11a --- /dev/null +++ b/gnome-usage-mobile/0001-Add-libgtherm-dependency.patch @@ -0,0 +1,117 @@ +From 792b2465d27c4cbc851ef1675f6661cb741fc987 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org> +Date: Thu, 2 Jul 2020 20:43:33 +0200 +Subject: [PATCH 1/2] Add libgtherm dependency + +This will be used by the thermal view +--- + .gitignore | 3 ++- + meson.build | 22 ++++++++++++++++++++++ + org.gnome.Usage.json | 13 +++++++++++++ + src/meson.build | 1 + + subprojects/libgtherm.wrap | 5 +++++ + 5 files changed, 43 insertions(+), 1 deletion(-) + create mode 100644 subprojects/libgtherm.wrap + +diff --git a/.gitignore b/.gitignore +index 870c299..bd7f5b3 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -7,4 +7,5 @@ build + .ccls-cache + .gdb_history + compile_commands.json +-*~ +\ No newline at end of file ++subprojects/gtherm/ ++*~ +diff --git a/meson.build b/meson.build +index d2f40ac..25e11fa 100644 +--- a/meson.build ++++ b/meson.build +@@ -8,6 +8,7 @@ project( + cc = meson.get_compiler('c') + valac = meson.get_compiler('vala') + ++libgtherm_dep = dependency('libgtherm-0.0', required: false) + glib_dep = dependency('glib-2.0', version : '>=2.38') + gobject_dep = dependency('gobject-2.0') + gio_dep = dependency('gio-2.0') +@@ -41,6 +42,27 @@ else + libhandy_vapidir = '' + endif + ++if not libgtherm_dep.found() ++ libgtherm_subproj = subproject( ++ 'libgtherm', ++ default_options: [ ++ 'gtk_doc=false', ++ ] ++ ) ++ ++ # When using libgtherm as subproject, make sure we get the VAPI file ++ libgtherm_dep = declare_dependency( ++ dependencies: [ ++ libgtherm_subproj.get_variable('libgtherm_dep'), ++ libgtherm_subproj.get_variable('libgtherm_vapi'), ++ ] ++ ) ++ ++ libgtherm_vapidir = join_paths(meson.build_root(), 'subprojects', 'libgtherm', 'src') ++else ++ libgtherm_vapidir = '' ++endif ++ + gnome = import('gnome') + i18n = import('i18n') + +diff --git a/org.gnome.Usage.json b/org.gnome.Usage.json +index b8de5b2..ed7f9bb 100644 +--- a/org.gnome.Usage.json ++++ b/org.gnome.Usage.json +@@ -39,6 +39,19 @@ + } + ] + }, ++ { ++ "name" : "libgtherm", ++ "buildsystem" : "meson", ++ "config-opts" : [ ++ "-Dgtk_doc=false" ++ ], ++ "sources" : [ ++ { ++ "type" : "git", ++ "url" : "https://source.puri.sm/Librem5/gtherm.git" ++ } ++ ] ++ }, + { + "name" : "libhandy", + "buildsystem" : "meson", +diff --git a/src/meson.build b/src/meson.build +index 935e2d6..0c29986 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -56,6 +56,7 @@ deps = [ + libgtop_dep, + tracker_dep, + libdazzle_dep, ++ libgtherm_dep, + libhandy_dep, + cc.find_library('m'), + valac.find_library('config', dirs: vapi_dir), +diff --git a/subprojects/libgtherm.wrap b/subprojects/libgtherm.wrap +new file mode 100644 +index 0000000..79b76f4 +--- /dev/null ++++ b/subprojects/libgtherm.wrap +@@ -0,0 +1,5 @@ ++[wrap-git] ++directory=gtherm ++url=https://source.puri.sm/Librem5/gtherm.git ++revision=origin/master ++ +-- +2.30.0 + diff --git a/gnome-usage-mobile/0002-Add-initial-thermal-view.patch b/gnome-usage-mobile/0002-Add-initial-thermal-view.patch new file mode 100644 index 0000000..4f2c06b --- /dev/null +++ b/gnome-usage-mobile/0002-Add-initial-thermal-view.patch @@ -0,0 +1,1048 @@ +From f3c54d6ac42c7131c095205c7a46ccce375f8d18 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org> +Date: Mon, 28 Oct 2019 11:05:50 +0100 +Subject: [PATCH 2/2] Add initial thermal view + +Just thermal zone temperature for now, no cooling devices +--- + data/meson.build | 1 + + data/org.gnome.Usage.gresource.xml | 3 + + data/ui/no-gthd-view.ui | 41 +++++++++++ + data/ui/thermal-row.ui | 60 +++++++++++++++ + data/ui/thermal-view.ui | 60 +++++++++++++++ + src/graph-switcher-button.vala | 6 ++ + src/meson.build | 9 +++ + src/no-gthd-view.vala | 23 ++++++ + src/system-monitor.vala | 14 ++++ + src/thermal-graph-model.vala | 57 ++++++++++++++ + src/thermal-graph-stack-switcher.vala | 96 ++++++++++++++++++++++++ + src/thermal-graph.vala | 63 ++++++++++++++++ + src/thermal-list-box.vala | 102 ++++++++++++++++++++++++++ + src/thermal-monitor.vala | 69 +++++++++++++++++ + src/thermal-row.vala | 53 +++++++++++++ + src/thermal-sub-view.vala | 85 +++++++++++++++++++++ + src/thermal-view.vala | 59 +++++++++++++++ + src/window.vala | 1 + + 18 files changed, 802 insertions(+) + create mode 100644 data/ui/no-gthd-view.ui + create mode 100644 data/ui/thermal-row.ui + create mode 100644 data/ui/thermal-view.ui + create mode 100644 src/no-gthd-view.vala + create mode 100644 src/thermal-graph-model.vala + create mode 100644 src/thermal-graph-stack-switcher.vala + create mode 100644 src/thermal-graph.vala + create mode 100644 src/thermal-list-box.vala + create mode 100644 src/thermal-monitor.vala + create mode 100644 src/thermal-row.vala + create mode 100644 src/thermal-sub-view.vala + create mode 100644 src/thermal-view.vala + +diff --git a/data/meson.build b/data/meson.build +index 03b5f3c..e0a99b9 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -2,6 +2,7 @@ resource_data = files( + 'interface/adwaita.css', + 'ui/primary-menu.ui', + 'ui/memory-speedometer.ui', ++ 'ui/no-gthd-view.ui', + 'ui/no-results-found-view.ui', + 'ui/performance-view.ui', + 'ui/process-row.ui', +diff --git a/data/org.gnome.Usage.gresource.xml b/data/org.gnome.Usage.gresource.xml +index d980239..d7449af 100644 +--- a/data/org.gnome.Usage.gresource.xml ++++ b/data/org.gnome.Usage.gresource.xml +@@ -6,6 +6,7 @@ + <file preprocess="xml-stripblanks">ui/primary-menu.ui</file> + <file preprocess="xml-stripblanks">ui/loading-notification.ui</file> + <file preprocess="xml-stripblanks">ui/memory-speedometer.ui</file> ++ <file preprocess="xml-stripblanks">ui/no-gthd-view.ui</file> + <file preprocess="xml-stripblanks">ui/no-results-found-view.ui</file> + <file preprocess="xml-stripblanks">ui/performance-view.ui</file> + <file preprocess="xml-stripblanks">ui/quit-process-dialog.ui</file> +@@ -17,5 +18,7 @@ + <file preprocess="xml-stripblanks">ui/process-row.ui</file> + <file preprocess="xml-stripblanks">ui/swap-speedometer.ui</file> + <file preprocess="xml-stripblanks">ui/window.ui</file> ++ <file preprocess="xml-stripblanks">ui/thermal-row.ui</file> ++ <file preprocess="xml-stripblanks">ui/thermal-view.ui</file> + </gresource> + </gresources> +diff --git a/data/ui/no-gthd-view.ui b/data/ui/no-gthd-view.ui +new file mode 100644 +index 0000000..d6d0a25 +--- /dev/null ++++ b/data/ui/no-gthd-view.ui +@@ -0,0 +1,41 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<interface> ++ <!-- interface-requires gtk+ 3.9 --> ++ <template class="UsageNoGthdView" parent="UsageView"> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkBox"> ++ <property name="margin-top">40</property> ++ <property name="orientation">vertical</property> ++ <child> ++ <object class="GtkImage"> ++ <property name="margin">10</property> ++ <property name="icon-name">system-run-symbolic</property> ++ <property name="pixel-size">72</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkLabel"> ++ <attributes> ++ <attribute name="font-desc" value="16"/> ++ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/> ++ </attributes> ++ <property name="label" translatable="yes">Thermal daemon is not running</property> ++ <property name="margin">10</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkLabel"> ++ <attributes> ++ <attribute name="font-desc" value="12"/> ++ </attributes> ++ <property name="label" translatable="yes">Please start gthd</property> ++ <style> ++ <class name="dim-label"/> ++ </style> ++ </object> ++ </child> ++ </object> ++ </child> ++ </template> ++</interface> +diff --git a/data/ui/thermal-row.ui b/data/ui/thermal-row.ui +new file mode 100644 +index 0000000..b6c4202 +--- /dev/null ++++ b/data/ui/thermal-row.ui +@@ -0,0 +1,60 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<!-- Generated with glade 3.22.1 --> ++<interface> ++ <requires lib="gtk+" version="3.10"/> ++ <template class="UsageThermalZoneRow" parent="GtkListBoxRow"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <child> ++ <object class="GtkBox"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="orientation">vertical</property> ++ <child> ++ <object class="GtkBox"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <child> ++ <object class="GtkLabel" id="type_label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="margin_left">6</property> ++ <property name="wrap">True</property> ++ <property name="ellipsize">end</property> ++ <property name="max_width_chars">60</property> ++ <attributes> ++ <attribute name="scale" value="1"/> ++ </attributes> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">False</property> ++ <property name="position">2</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="temp_label"> ++ <property name="visible">True</property> ++ <property name="can_focus">False</property> ++ <property name="margin_right">10</property> ++ <property name="ellipsize">end</property> ++ <property name="max_width_chars">30</property> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="pack_type">end</property> ++ <property name="position">3</property> ++ </packing> ++ </child> ++ </object> ++ <packing> ++ <property name="expand">False</property> ++ <property name="fill">True</property> ++ <property name="position">0</property> ++ </packing> ++ </child> ++ </object> ++ </child> ++ </template> ++</interface> +diff --git a/data/ui/thermal-view.ui b/data/ui/thermal-view.ui +new file mode 100644 +index 0000000..7df8e00 +--- /dev/null ++++ b/data/ui/thermal-view.ui +@@ -0,0 +1,60 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<interface> ++ <!-- interface-requires gtk+ 3.9 --> ++ ++ <template class="UsageThermalView" parent="UsageView"> ++ <property name="visible">True</property> ++ ++ <child> ++ ++ <object class="HdyLeaflet" id="leaflet"> ++ <property name="visible">True</property> ++ <property name="orientation">horizontal</property> ++ <property name="visible-child">content_box</property> ++ ++ <child> ++ <object class="GtkBox" id="switcher_box"> ++ <property name="hexpand">False</property> ++ <property name="hexpand-set">True</property> ++ <property name="width-request">200</property> ++ <style> ++ <class name="sidebar"/> ++ </style> ++ </object> ++ </child> ++ ++ <child> ++ <object class="GtkBox" id="content_box"> ++ <property name="visible">True</property> ++ <property name="orientation">vertical</property> ++ <property name="width-request">360</property> ++ ++ <child> ++ <object class="UsageAnimatedScrolledWindow" id="scrolled_window"> ++ <property name="visible">True</property> ++ <property name="vexpand">True</property> ++ <child> ++ <object class="HdyClamp"> ++ <property name="visible">True</property> ++ <property name="margin-start">12</property> ++ <property name="margin-end">12</property> ++ <property name="expand">True</property> ++ <property name="maximum-size">600</property> ++ <property name="tightening-threshold">400</property> ++ <child> ++ <object class="GtkBox" id="thermal_content"> ++ <property name="visible">True</property> ++ <property name="orientation">vertical</property> ++ <property name="spacing">30</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ </template> ++</interface> +diff --git a/src/graph-switcher-button.vala b/src/graph-switcher-button.vala +index f0863c4..798786d 100644 +--- a/src/graph-switcher-button.vala ++++ b/src/graph-switcher-button.vala +@@ -36,6 +36,12 @@ namespace Usage + child = createContent(memory_graph, label); + } + ++ public GraphSwitcherButton.temperature(string label) ++ { ++ var thermal_graph = new ThermalGraph(); ++ child = createContent(thermal_graph, label); ++ } ++ + private Gtk.Box createContent(Dazzle.GraphView graph, string label_text) + { + graph.height_request = 80; +diff --git a/src/meson.build b/src/meson.build +index 0c29986..712841e 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -20,6 +20,7 @@ vala_sources = [ + 'memory-speedometer.vala', + 'memory-sub-view.vala', + 'monitor.vala', ++ 'no-gthd-view.vala', + 'no-results-found-view.vala', + 'notification-bar.vala', + 'performance-view.vala', +@@ -42,6 +43,14 @@ vala_sources = [ + 'storage/tracker-worker.vala', + 'swap-speedometer.vala', + 'system-monitor.vala', ++ 'thermal-list-box.vala', ++ 'thermal-row.vala', ++ 'thermal-graph.vala', ++ 'thermal-graph-stack-switcher.vala', ++ 'thermal-graph-model.vala', ++ 'thermal-monitor.vala', ++ 'thermal-view.vala', ++ 'thermal-sub-view.vala', + 'utils.vala', + 'view.vala', + 'window.vala' +diff --git a/src/no-gthd-view.vala b/src/no-gthd-view.vala +new file mode 100644 +index 0000000..23bac1a +--- /dev/null ++++ b/src/no-gthd-view.vala +@@ -0,0 +1,23 @@ ++/* no-results-found-box.vala ++ * ++ * Copyright (C) 2020 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ */ ++ ++namespace Usage ++{ ++ [GtkTemplate (ui = "/org/gnome/Usage/ui/no-gthd-view.ui")] ++ public class NoGthdView : View { } ++} +diff --git a/src/system-monitor.vala b/src/system-monitor.vala +index aa8cd88..c406a27 100644 +--- a/src/system-monitor.vala ++++ b/src/system-monitor.vala +@@ -23,6 +23,7 @@ namespace Usage + public class SystemMonitor : Object + { + public bool process_list_ready { get; private set; default = false; } ++ public bool thermal_list_ready { get; private set; default = false; } + public double cpu_load { get; private set; } + public double[] x_cpu_load { get; private set; } + public uint64 ram_usage { get; private set; } +@@ -30,10 +31,12 @@ namespace Usage + public uint64 swap_usage { get; private set; } + public uint64 swap_total { get; private set; } + public bool group_system_apps { get; set; default = true; } ++ public double[] x_temp { get; private set; } + + private CpuMonitor cpu_monitor; + private MemoryMonitor memory_monitor; + private GameMode.PidList gamemode_pids; ++ private ThermalMonitor thermal_monitor; + + private HashTable<string, AppItem> app_table; + private HashTable<GLib.Pid, Process> process_table; +@@ -58,6 +61,12 @@ namespace Usage + return app_table.get(name); + } + ++ public GLib.GenericArray<Gth.ThermalZone> get_thermal_zones() ++ { ++ return thermal_monitor.get_thermal_zones (); ++ } ++ ++ + public SystemMonitor() + { + GTop.init(); +@@ -66,6 +75,7 @@ namespace Usage + cpu_monitor = new CpuMonitor(); + memory_monitor = new MemoryMonitor(); + gamemode_pids = new GameMode.PidList(); ++ thermal_monitor = new ThermalMonitor(); + + app_table = new HashTable<string, AppItem>(str_hash, str_equal); + process_table = new HashTable<GLib.Pid, Process>(direct_hash, direct_equal); +@@ -84,6 +94,7 @@ namespace Usage + var settings = Settings.get_default(); + app_table.remove_all(); + process_list_ready = false; ++ thermal_list_ready = false; + + if(group_system_apps) { + var system = new AppItem.system(); +@@ -98,6 +109,7 @@ namespace Usage + Timeout.add(settings.data_update_interval, () => + { + process_list_ready = true; ++ thermal_list_ready = true; + return false; + }); + } +@@ -106,6 +118,7 @@ namespace Usage + { + cpu_monitor.update(); + memory_monitor.update(); ++ thermal_monitor.update(); + + cpu_load = cpu_monitor.get_cpu_load(); + x_cpu_load = cpu_monitor.get_x_cpu_load(); +@@ -113,6 +126,7 @@ namespace Usage + ram_total = memory_monitor.get_ram_total(); + swap_usage = memory_monitor.get_swap_usage(); + swap_total = memory_monitor.get_swap_total(); ++ x_temp = thermal_monitor.get_x_temp(); + + foreach (var app in app_table.get_values ()) + app.mark_as_not_updated(); +diff --git a/src/thermal-graph-model.vala b/src/thermal-graph-model.vala +new file mode 100644 +index 0000000..c325048 +--- /dev/null ++++ b/src/thermal-graph-model.vala +@@ -0,0 +1,57 @@ ++/* thermal-graph-model.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++using Dazzle; ++ ++namespace Usage { ++ ++ public class ThermalGraphModel : GraphModel { ++ public int num_zones; ++ ++ public ThermalGraphModel () { ++ var settings = Settings.get_default(); ++ SystemMonitor monitor = SystemMonitor.get_default(); ++ set_timespan (settings.graph_timespan * 1000); ++ set_max_samples (settings.graph_max_samples); ++ num_zones = monitor.x_temp.length; ++ ++ for (int i = 0; i < num_zones; i++) { ++ /* TODO: use correct zone numbers */ ++ var column_x_temp = new GraphColumn("ThermalZone: " + i.to_string(), Type.from_name("gdouble")); ++ add_column(column_x_temp); ++ } ++ ++ Timeout.add(settings.graph_update_interval, update_data); ++ } ++ ++ bool update_data() { ++ GraphModelIter iter; ++ push (out iter, get_monotonic_time ()); ++ ++ SystemMonitor monitor = SystemMonitor.get_default(); ++ ++ for (int i = 0; i < num_zones; i++) { ++ iter_set_value(iter, i, monitor.x_temp[i]); ++ } ++ ++ return true; ++ } ++ } ++} +diff --git a/src/thermal-graph-stack-switcher.vala b/src/thermal-graph-stack-switcher.vala +new file mode 100644 +index 0000000..11da822 +--- /dev/null ++++ b/src/thermal-graph-stack-switcher.vala +@@ -0,0 +1,96 @@ ++/* graph-stack-switcher.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++namespace Usage ++{ ++ public class ThermalGraphStackSwitcher : Gtk.Box ++ { ++ View[] sub_views; ++ AnimatedScrolledWindow scrolled_window; ++ ++ GraphSwitcherButton[] buttons; ++ ++ class construct ++ { ++ set_css_name("graph-stack-switcher"); ++ } ++ ++ public ThermalGraphStackSwitcher(AnimatedScrolledWindow scrolled_window, View[] sub_views) ++ { ++ Object(orientation: Gtk.Orientation.VERTICAL, spacing: 0); ++ ++ this.sub_views = sub_views; ++ this.scrolled_window = scrolled_window; ++ ++ scrolled_window.scroll_changed.connect(on_scroll_changed); ++ ++ buttons = { ++ new GraphSwitcherButton.temperature(_("Temperature")), ++ }; ++ ++ foreach(GraphSwitcherButton button in buttons) ++ { ++ this.pack_start(button, false, true, 0); ++ ++ button.button_release_event.connect(() => { ++ var button_number = get_button_number(button); ++ scroll_to_view(button_number); ++ ++ return false; ++ }); ++ } ++ } ++ ++ private int get_button_number(Gtk.Button button) ++ { ++ for(int i = 0; i < buttons.length; i++) ++ { ++ if(buttons[i] == button) ++ return i; ++ } ++ ++ return 0; ++ } ++ ++ private void scroll_to_view(int button_number) ++ { ++ Gtk.Allocation alloc; ++ ++ this.sub_views[button_number].get_allocation(out alloc); ++ scrolled_window.animated_scroll_vertically(alloc.y); ++ } ++ ++ private void on_scroll_changed(double y) ++ { ++ Gtk.Allocation alloc; ++ ++ var button_number = 0; ++ for(int i = 1; i < buttons.length; i++) ++ { ++ this.sub_views[i].get_allocation(out alloc); ++ if(y < alloc.y) ++ break; ++ button_number = i; ++ } ++ ++ buttons[button_number].set_active(true); ++ } ++ } ++} +diff --git a/src/thermal-graph.vala b/src/thermal-graph.vala +new file mode 100644 +index 0000000..02e0c65 +--- /dev/null ++++ b/src/thermal-graph.vala +@@ -0,0 +1,63 @@ ++/* thermal-graph.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++using Dazzle; ++ ++namespace Usage ++{ ++ public class ThermalGraph : GraphView ++ { ++ private static ThermalGraphModel graph_model; ++ private GraphLineRenderer[] renderers; ++ private Gdk.RGBA line_color_max; ++ private Gdk.RGBA line_color_normal; ++ ++ class construct ++ { ++ set_css_name("rg-graph"); ++ } ++ ++ public ThermalGraph() ++ { ++ get_style_context().add_class("line_max"); ++ line_color_max = get_style_context().get_color(get_style_context().get_state()); ++ get_style_context().remove_class("line_max"); ++ get_style_context().add_class("line"); ++ line_color_normal = get_style_context().get_color(get_style_context().get_state()); ++ get_style_context().remove_class("line"); ++ get_style_context().add_class("big"); ++ ++ if(graph_model == null) ++ graph_model = new ThermalGraphModel(); ++ ++ set_model(graph_model); ++ ++ renderers = new GraphLineRenderer[graph_model.num_zones]; ++ for(int i = 0; i < graph_model.num_zones; i++) ++ { ++ renderers[i] = new GraphLineRenderer(); ++ renderers[i].column = i; ++ renderers[i].stroke_color_rgba = line_color_normal; ++ renderers[i].line_width = 1.5; ++ add_renderer(renderers[i]); ++ } ++ } ++ } ++} +diff --git a/src/thermal-list-box.vala b/src/thermal-list-box.vala +new file mode 100644 +index 0000000..78c0c9d +--- /dev/null ++++ b/src/thermal-list-box.vala +@@ -0,0 +1,102 @@ ++/* cooling-list-box.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++using Gth; ++ ++namespace Usage ++{ ++ public class ThermalListBox : Gtk.ListBox ++ { ++ public bool empty { get; set; default = true; } ++ public string search_text { get; set; default = ""; } ++ ++ private ListStore model; ++ ++ public ThermalListBox() ++ { ++ set_selection_mode (Gtk.SelectionMode.NONE); ++ set_header_func (update_header); ++ ++ model = new ListStore(typeof(ThermalZone)); ++ bind_model(model, on_row_created); ++ ++ row_activated.connect((row) => { ++ var thermal_row = (ThermalZoneRow) row; ++ thermal_row.activate(); ++ }); ++ ++ this.notify["search-text"].connect ((sender, property) => { ++ update(); ++ }); ++ ++ var system_monitor = SystemMonitor.get_default(); ++ ++ system_monitor.notify["thermal-list-ready"].connect (() => { ++ if(system_monitor.thermal_list_ready) ++ update(); ++ }); ++ ++ var settings = Settings.get_default(); ++ Timeout.add(settings.list_update_interval_UI, update); ++ ++ bind_property ("empty", this, "visible", BindingFlags.INVERT_BOOLEAN); ++ } ++ ++ private bool update() ++ { ++ CompareDataFunc<ThermalZone> zone_cmp = (a, b) => { ++ ThermalZone zone_a = (ThermalZone) a; ++ ThermalZone zone_b = (ThermalZone) b; ++ ++ return (int) (zone_a.temperature < zone_b.temperature) - (int) (zone_a.temperature > zone_b.temperature); ++ }; ++ ++ model.remove_all(); ++ ++ var system_monitor = SystemMonitor.get_default(); ++ var zones = system_monitor.get_thermal_zones(); ++ ++ if(search_text == "") { ++ for (int i = 0; i < zones.length; i++) { ++ var z = zones.get(i); ++ model.insert_sorted(z, zone_cmp); ++ } ++ } ++ ++ empty = (model.get_n_items() == 0); ++ return true; ++ } ++ ++ private Gtk.Widget on_row_created (Object item) { ++ return new ThermalZoneRow((ThermalZone) item); ++ } ++ ++ private void update_header(Gtk.ListBoxRow row, Gtk.ListBoxRow? before_row) { ++ if(before_row == null) ++ row.set_header(null); ++ else { ++ var separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL); ++ separator.get_style_context().add_class("list"); ++ separator.show(); ++ row.set_header(separator); ++ } ++ } ++ } ++} +diff --git a/src/thermal-monitor.vala b/src/thermal-monitor.vala +new file mode 100644 +index 0000000..0eec651 +--- /dev/null ++++ b/src/thermal-monitor.vala +@@ -0,0 +1,69 @@ ++/* cpu-monitor.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++using GLib; ++using Gth; ++ ++namespace Usage ++{ ++ public class ThermalMonitor : Monitor ++ { ++ private double[] x_temp; ++ private GLib.DBusConnection con; ++ private Gth.Manager therm_manager; ++ private GLib.GenericArray<Gth.ThermalZone> thermal_zones; ++ ++ public ThermalMonitor() ++ { ++ try { ++ con = GLib.Bus.get_sync(GLib.BusType.SESSION); ++ therm_manager = new Gth.Manager.sync(con, 0); ++ thermal_zones = therm_manager.get_thermal_zones(); ++ } catch(IOError e) { ++ warning("GThermal Proxy creation failed: %s", e.message); ++ } catch(GLib.Error e) { ++ warning("GThermal D-Bus error: %s", e.message); ++ } ++ x_temp = new double[thermal_zones.length]; ++ } ++ ++ public GLib.GenericArray<Gth.ThermalZone> get_thermal_zones() ++ { ++ return thermal_zones; ++ } ++ ++ public void update() ++ { ++ for (int i = 0; i < x_temp.length; i++) ++ { ++ x_temp[i] = thermal_zones.get(i).temperature / 1000.0; ++ } ++ } ++ ++ public double[] get_x_temp() ++ { ++ return x_temp; ++ } ++ ++ public void update_process(ref Process process) ++ { ++ /* todo: empty since we inherited form monitor */ ++ } ++ } ++} +diff --git a/src/thermal-row.vala b/src/thermal-row.vala +new file mode 100644 +index 0000000..df3b079 +--- /dev/null ++++ b/src/thermal-row.vala +@@ -0,0 +1,53 @@ ++/* process-row.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++using Gth; ++ ++namespace Usage ++{ ++ [GtkTemplate (ui = "/org/gnome/Usage/ui/thermal-row.ui")] ++ public class ThermalZoneRow : Gtk.ListBoxRow ++ { ++ public ThermalZone zone; ++ ++ [GtkChild] ++ private Gtk.Label type_label; ++ ++ [GtkChild] ++ private Gtk.Label temp_label; ++ ++ public ThermalZoneRow(ThermalZone zone) ++ { ++ this.zone = zone; ++ update(); ++ } ++ ++ private void update() ++ { ++ type_label.label = zone.type; ++ temp_label.label = "%.2f ⁰C".printf(zone.temperature / 1000.0); ++ /* todo: add cooling devs */ ++ } ++ ++ public new void activate() ++ { ++ } ++ } ++} +diff --git a/src/thermal-sub-view.vala b/src/thermal-sub-view.vala +new file mode 100644 +index 0000000..b354548 +--- /dev/null ++++ b/src/thermal-sub-view.vala +@@ -0,0 +1,85 @@ ++/* thermal-sub-view.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++namespace Usage ++{ ++ public class ThermalSubView : View, SubView ++ { ++ private ThermalListBox thermal_list_box; ++ private NoGthdView no_thermal_view; ++ ++ public ThermalSubView() ++ { ++ name = "THERMAL"; ++ ++ var label = new Gtk.Label("<span font_desc=\"14.0\">" + _("Thermal Zones") + "</span>"); ++ label.set_use_markup(true); ++ label.margin_top = 25; ++ label.margin_bottom = 15; ++ ++ thermal_list_box = new ThermalListBox(); ++ thermal_list_box.margin_bottom = 20; ++ thermal_list_box.margin_top = 30; ++ ++ var spinner = new Gtk.Spinner(); ++ spinner.active = true; ++ spinner.margin_top = 30; ++ spinner.height_request = 250; ++ ++ no_thermal_view = new NoGthdView(); ++ ++ var thermal_graph = new ThermalGraph(); ++ thermal_graph.hexpand = true; ++ var thermal_graph_box = new GraphBox(thermal_graph); ++ thermal_graph_box.height_request = 225; ++ thermal_graph_box.valign = Gtk.Align.START; ++ ++ var thermal_box = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); ++ thermal_box.pack_start(label, false, false, 0); ++ thermal_box.pack_start(thermal_graph_box, false, false, 0); ++ ++ thermal_box.add(no_thermal_view); ++ ++ var system_monitor = SystemMonitor.get_default(); ++ system_monitor.notify["thermal-list-ready"].connect ((sender, property) => { ++ if(system_monitor.thermal_list_ready) { ++ thermal_box.pack_start(thermal_list_box, false, false, 0); ++ thermal_box.remove(spinner); ++ } else { ++ thermal_box.pack_start(spinner, true, true, 0); ++ thermal_box.remove(thermal_list_box); ++ } ++ }); ++ ++ thermal_list_box.bind_property ("empty", no_thermal_view, "visible", BindingFlags.BIDIRECTIONAL); ++ add(thermal_box); ++ } ++ ++ public override void show_all() { ++ base.show_all(); ++ this.no_thermal_view.hide(); ++ } ++ ++ public void search_in_processes(string text) ++ { ++ /* tbd */ ++ } ++ } ++} +diff --git a/src/thermal-view.vala b/src/thermal-view.vala +new file mode 100644 +index 0000000..c2fadb5 +--- /dev/null ++++ b/src/thermal-view.vala +@@ -0,0 +1,59 @@ ++/* performance-view.vala ++ * ++ * Copyright (C) 2019 Purism SPC ++ * ++ * This program is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program. If not, see <http://www.gnu.org/licenses/>. ++ * ++ * Authors: Guido Guenther <agx@sigxcpu.org> ++ */ ++ ++using Gtk; ++ ++namespace Usage ++{ ++ [GtkTemplate (ui = "/org/gnome/Usage/ui/thermal-view.ui")] ++ public class ThermalView : View ++ { ++ [GtkChild] ++ private Gtk.Box switcher_box; ++ ++ [GtkChild] ++ private Gtk.Box thermal_content; ++ ++ [GtkChild] ++ private AnimatedScrolledWindow scrolled_window; ++ ++ View[] sub_views; ++ ++ public ThermalView () ++ { ++ name = "THERMAL"; ++ title = _("Thermal"); ++ icon_name = "weather-clear-symbolic"; ++ ++ sub_views = new View[] ++ { ++ new ThermalSubView(), ++ }; ++ ++ foreach(var sub_view in sub_views) ++ thermal_content.pack_start(sub_view, true, true, 0); ++ ++ var stackSwitcher = new ThermalGraphStackSwitcher(scrolled_window, sub_views); ++ switcher_box.add (stackSwitcher); ++ ++ show_all (); ++ } ++ } ++} +diff --git a/src/window.vala b/src/window.vala +index 819162a..0fda7b3 100644 +--- a/src/window.vala ++++ b/src/window.vala +@@ -80,6 +80,7 @@ namespace Usage + { + new PerformanceView(), + new StorageView(), ++ new ThermalView(), + }; + + foreach(var view in views) { +-- +2.30.0 + diff --git a/gnome-usage-mobile/PKGBUILD b/gnome-usage-mobile/PKGBUILD new file mode 100644 index 0000000..2e442a1 --- /dev/null +++ b/gnome-usage-mobile/PKGBUILD @@ -0,0 +1,55 @@ +# Maintainer: Philip Müller <philm at manjaro dot org> +# Contributor: Balló György <ballogyor+arch at gmail dot com> + +pkgname=gnome-usage-mobile +_pkgname=gnome-usage +pkgver=3.38.1 +pkgrel=2 +pkgdesc="GNOME application to view information about use of system resources" +arch=(armv7h aarch64) +url="https://wiki.gnome.org/Apps/Usage" +license=(GPL3) +depends=(gtk3 libgtop libdazzle tracker3 libhandy gtherm xdg-user-dirs) +makedepends=(git meson vala accountsservice gamemode) +optdepends=('accountsservice: show user tags for processes' + 'gamemode: show processes requesting game mode') +provides=("$_pkgname=$pkgver") +conflicts=("$_pkgname") +_commit=4745bb5e8f2a44a35cb410020dcf6e54e73bd6e1 # tags/3.38.1^0 +source=("git+https://gitlab.gnome.org/GNOME/gnome-usage.git#commit=$_commit" + '0001-Add-libgtherm-dependency.patch' + '0002-Add-initial-thermal-view.patch') +sha256sums=('SKIP' + 'b7845a5717334e043171401188165bd5050f672fac3c73b9624b750217a6d377' + '0caa915c6d9044d57af44e9723efcfb6be1052e8b360b2c3f35dc2ef8499f38c') + +pkgver() { + cd $_pkgname + git describe --tags | sed 's/^v//;s/-/+/g' +} + +prepare() { + cd $_pkgname + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + msg2 "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + arch-meson $_pkgname build + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" +} diff --git a/gtherm/PKGBUILD b/gtherm/PKGBUILD new file mode 100644 index 0000000..17ce22c --- /dev/null +++ b/gtherm/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor: Dan Johansen <strit@manjaro.org> +# Contributor: Philip Müller <philm@manjaro.org> + +pkgname=gtherm +pkgver=0.0.3 +pkgrel=1 +pkgdesc="A simple daemon to monitor thermal zones and cooling devices" +url="https://source.puri.sm/Librem5/gtherm" +license=('GPL') +arch=('x86_64' 'armv7h' 'aarch64') +depends=('glib2' 'gobject-introspection') +makedepends=('meson' 'vala') +source=("https://source.puri.sm/Librem5/gtherm/-/archive/v$pkgver/gtherm-v$pkgver.tar.gz") +sha256sums=('a0bb7e3c8b5446e98acdd2a6c07567c88032a0c5b3e459317de6761a5bacf35f') + +build() { + arch-meson $pkgname-v$pkgver build + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + mkdir -p $pkgdir/usr/lib/systemd/user/default.target.wants + install -Dm644 $pkgname-v$pkgver/debian/gthd.user.service $pkgdir/usr/lib/systemd/user/gthd.service + ln -sfv /usr/lib/systemd/user/gthd.service $pkgdir/usr/lib/systemd/user/default.target.wants/gthd.service +} diff --git a/gtk3-mobile/0001-Allow-disabling-legacy-Tracker-search.patch b/gtk3-mobile/0001-Allow-disabling-legacy-Tracker-search.patch new file mode 100644 index 0000000..87b7622 --- /dev/null +++ b/gtk3-mobile/0001-Allow-disabling-legacy-Tracker-search.patch @@ -0,0 +1,104 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org> +Date: Mon, 18 Mar 2024 02:14:24 +0100 +Subject: [PATCH] Allow disabling legacy Tracker search + +--- + docs/reference/gtk/meson.build | 2 -- + gtk/gtksearchengine.c | 5 ++--- + gtk/meson.build | 5 ++++- + meson.build | 5 +++++ + meson_options.txt | 2 ++ + 5 files changed, 13 insertions(+), 6 deletions(-) + +diff --git a/docs/reference/gtk/meson.build b/docs/reference/gtk/meson.build +index 9fa282d38cb5..b2f977363a5a 100644 +--- a/docs/reference/gtk/meson.build ++++ b/docs/reference/gtk/meson.build +@@ -129,7 +129,6 @@ private_headers = [ + 'gtksearchenginemodel.h', + 'gtksearchenginequartz.h', + 'gtksearchenginesimple.h', +- 'gtksearchenginetracker.h', + 'gtksearchentryprivate.h', + 'gtkselectionprivate.h', + 'gtksettingsprivate.h', +@@ -208,7 +207,6 @@ private_headers = [ + 'gtkrecentchooserdefault.h', + 'gtkrecentchooserutils.h', + 'gtksearchengine.h', +- 'gtksearchenginetracker.h', + 'gtksearchenginesimple.h', + 'gtksearchenginequartz.h', + 'gtksequence.h', +diff --git a/gtk/gtksearchengine.c b/gtk/gtksearchengine.c +index 1910cc0ad337..dd4022c2cc4d 100644 +--- a/gtk/gtksearchengine.c ++++ b/gtk/gtksearchengine.c +@@ -29,9 +29,8 @@ + #if defined(HAVE_TRACKER3) + #include "gtksearchenginetracker3.h" + #endif +-#if !defined G_OS_WIN32 /* No tracker on windows */ ++#if defined(HAVE_TRACKER) + #include "gtksearchenginetracker.h" +-#define HAVE_TRACKER 1 + #endif + + #include <gdk/gdk.h> /* for GDK_WINDOWING_QUARTZ */ +@@ -388,7 +387,7 @@ _gtk_search_engine_new (void) + } + #endif + +-#ifdef HAVE_TRACKER ++#if defined(HAVE_TRACKER) + if (!engine->priv->native) + { + engine->priv->native = _gtk_search_engine_tracker_new (); +diff --git a/gtk/meson.build b/gtk/meson.build +index ea866d8231c2..03677b120f60 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -652,9 +652,12 @@ gtk_unix_sources = files( + 'gtkprintoperation-portal.c', + 'gtkprintunixdialog.c', + 'gtkprintbackend.c', +- 'gtksearchenginetracker.c', + ) + ++if os_unix and tracker_enabled ++ gtk_unix_sources += 'gtksearchenginetracker.c' ++endif ++ + if os_unix and tracker3_enabled + gtk_unix_sources += 'gtksearchenginetracker3.c' + endif +diff --git a/meson.build b/meson.build +index 24785bfe4dd8..1999f526d987 100644 +--- a/meson.build ++++ b/meson.build +@@ -466,6 +466,11 @@ if require_harfbuzz and not harfbuzz_dep.found() + fallback: ['harfbuzz', 'libharfbuzz_dep']) + endif + ++tracker_enabled = get_option('tracker') ++if tracker_enabled ++ cdata.set('HAVE_TRACKER', true) ++endif ++ + tracker3_enabled = get_option('tracker3') + if tracker3_enabled + tracker3_dep = dependency('tracker-sparql-3.0', required: false) +diff --git a/meson_options.txt b/meson_options.txt +index 94099aa01eb3..3b5485a88f74 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -17,6 +17,8 @@ option('cloudproviders', type: 'boolean', value: false, + description : 'Enable the cloudproviders support') + option('profiler', type: 'boolean', value: false, + description : 'Enable profiler support') ++option('tracker', type: 'boolean', value: true, ++ description : 'Enable Tracker filechooser search') + option('tracker3', type: 'boolean', value: false, + description : 'Enable Tracker3 filechooser search') + diff --git a/gtk3-mobile/Add-GtkHdyAnimation.patch b/gtk3-mobile/Add-GtkHdyAnimation.patch new file mode 100644 index 0000000..a0e92fc --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyAnimation.patch @@ -0,0 +1,348 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 16 Dec 2020 18:54:47 +0500 +Subject: Add GtkHdyAnimation + +This is imported from HdyAnimation from libhandy 1.0.2. +--- + gtk/hdy-animation-private.h | 53 ++++++++++ + gtk/hdy-animation.c | 250 ++++++++++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + 3 files changed, 305 insertions(+) + create mode 100644 gtk/hdy-animation-private.h + create mode 100644 gtk/hdy-animation.c + +diff --git a/gtk/hdy-animation-private.h b/gtk/hdy-animation-private.h +new file mode 100644 +index 0000000..6816f6e +--- /dev/null ++++ b/gtk/hdy-animation-private.h +@@ -0,0 +1,53 @@ ++/* ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkwidget.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_ANIMATION (gtk_hdy_animation_get_type()) ++ ++typedef struct _GtkHdyAnimation GtkHdyAnimation; ++ ++typedef void (*GtkHdyAnimationValueCallback) (gdouble value, ++ gpointer user_data); ++typedef void (*GtkHdyAnimationDoneCallback) (gpointer user_data); ++typedef double (*GtkHdyAnimationEasingFunc) (gdouble t); ++ ++GType gtk_hdy_animation_get_type (void) G_GNUC_CONST; ++ ++GtkHdyAnimation *gtk_hdy_animation_new (GtkWidget *widget, ++ gdouble from, ++ gdouble to, ++ gint64 duration, ++ GtkHdyAnimationEasingFunc easing_func, ++ GtkHdyAnimationValueCallback value_cb, ++ GtkHdyAnimationDoneCallback done_cb, ++ gpointer user_data); ++ ++GtkHdyAnimation *gtk_hdy_animation_ref (GtkHdyAnimation *self); ++void gtk_hdy_animation_unref (GtkHdyAnimation *self); ++ ++void gtk_hdy_animation_start (GtkHdyAnimation *self); ++void gtk_hdy_animation_stop (GtkHdyAnimation *self); ++ ++gdouble gtk_hdy_animation_get_value (GtkHdyAnimation *self); ++ ++G_DEFINE_AUTOPTR_CLEANUP_FUNC (GtkHdyAnimation, gtk_hdy_animation_unref) ++ ++gboolean gtk_hdy_get_enable_animations (GtkWidget *widget); ++ ++gdouble gtk_hdy_lerp (gdouble a, gdouble b, gdouble t); ++ ++gdouble gtk_hdy_ease_out_cubic (gdouble t); ++ ++G_END_DECLS +diff --git a/gtk/hdy-animation.c b/gtk/hdy-animation.c +new file mode 100644 +index 0000000..0de1128 +--- /dev/null ++++ b/gtk/hdy-animation.c +@@ -0,0 +1,250 @@ ++/* ++ * Copyright (C) 2019-2020 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++ ++#include "hdy-animation-private.h" ++ ++/** ++ * SECTION:hdy-animation ++ * @short_description: Animation helpers ++ * @title: Animation Helpers ++ * ++ * Animation helpers. ++ * ++ * Since: 0.0.11 ++ */ ++ ++G_DEFINE_BOXED_TYPE (GtkHdyAnimation, gtk_hdy_animation, gtk_hdy_animation_ref, gtk_hdy_animation_unref) ++ ++struct _GtkHdyAnimation ++{ ++ gatomicrefcount ref_count; ++ ++ GtkWidget *widget; ++ ++ gdouble value; ++ ++ gdouble value_from; ++ gdouble value_to; ++ gint64 duration; /* ms */ ++ ++ gint64 start_time; /* ms */ ++ guint tick_cb_id; ++ ++ GtkHdyAnimationEasingFunc easing_func; ++ GtkHdyAnimationValueCallback value_cb; ++ GtkHdyAnimationDoneCallback done_cb; ++ gpointer user_data; ++}; ++ ++static void ++set_value (GtkHdyAnimation *self, ++ gdouble value) ++{ ++ self->value = value; ++ self->value_cb (value, self->user_data); ++} ++ ++static gboolean ++tick_cb (GtkWidget *widget, ++ GdkFrameClock *frame_clock, ++ GtkHdyAnimation *self) ++{ ++ gint64 frame_time = gdk_frame_clock_get_frame_time (frame_clock) / 1000; /* ms */ ++ gdouble t = (gdouble) (frame_time - self->start_time) / self->duration; ++ ++ if (t >= 1) { ++ self->tick_cb_id = 0; ++ ++ set_value (self, self->value_to); ++ ++ g_signal_handlers_disconnect_by_func (self->widget, gtk_hdy_animation_stop, self); ++ ++ self->done_cb (self->user_data); ++ ++ return G_SOURCE_REMOVE; ++ } ++ ++ set_value (self, gtk_hdy_lerp (self->value_from, self->value_to, self->easing_func (t))); ++ ++ return G_SOURCE_CONTINUE; ++} ++ ++static void ++gtk_hdy_animation_free (GtkHdyAnimation *self) ++{ ++ gtk_hdy_animation_stop (self); ++ ++ g_slice_free (GtkHdyAnimation, self); ++} ++ ++GtkHdyAnimation * ++gtk_hdy_animation_new (GtkWidget *widget, ++ gdouble from, ++ gdouble to, ++ gint64 duration, ++ GtkHdyAnimationEasingFunc easing_func, ++ GtkHdyAnimationValueCallback value_cb, ++ GtkHdyAnimationDoneCallback done_cb, ++ gpointer user_data) ++{ ++ GtkHdyAnimation *self; ++ ++ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); ++ g_return_val_if_fail (easing_func != NULL, NULL); ++ g_return_val_if_fail (value_cb != NULL, NULL); ++ g_return_val_if_fail (done_cb != NULL, NULL); ++ ++ self = g_slice_new0 (GtkHdyAnimation); ++ ++ g_atomic_ref_count_init (&self->ref_count); ++ ++ self->widget = widget; ++ self->value_from = from; ++ self->value_to = to; ++ self->duration = duration; ++ self->easing_func = easing_func; ++ self->value_cb = value_cb; ++ self->done_cb = done_cb; ++ self->user_data = user_data; ++ ++ self->value = from; ++ ++ return self; ++} ++ ++GtkHdyAnimation * ++gtk_hdy_animation_ref (GtkHdyAnimation *self) ++{ ++ g_return_val_if_fail (self != NULL, NULL); ++ ++ g_atomic_ref_count_inc (&self->ref_count); ++ ++ return self; ++} ++ ++void ++gtk_hdy_animation_unref (GtkHdyAnimation *self) ++{ ++ g_return_if_fail (self != NULL); ++ ++ if (g_atomic_ref_count_dec (&self->ref_count)) ++ gtk_hdy_animation_free (self); ++} ++ ++void ++gtk_hdy_animation_start (GtkHdyAnimation *self) ++{ ++ g_return_if_fail (self != NULL); ++ ++ if (!gtk_hdy_get_enable_animations (self->widget) || ++ !gtk_widget_get_mapped (self->widget) || ++ self->duration <= 0) { ++ set_value (self, self->value_to); ++ ++ self->done_cb (self->user_data); ++ ++ return; ++ } ++ ++ self->start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (self->widget)) / 1000; ++ ++ if (self->tick_cb_id) ++ return; ++ ++ g_signal_connect_swapped (self->widget, "unmap", ++ G_CALLBACK (gtk_hdy_animation_stop), self); ++ self->tick_cb_id = gtk_widget_add_tick_callback (self->widget, (GtkTickCallback) tick_cb, self, NULL); ++} ++ ++void ++gtk_hdy_animation_stop (GtkHdyAnimation *self) ++{ ++ g_return_if_fail (self != NULL); ++ ++ if (!self->tick_cb_id) ++ return; ++ ++ gtk_widget_remove_tick_callback (self->widget, self->tick_cb_id); ++ self->tick_cb_id = 0; ++ ++ g_signal_handlers_disconnect_by_func (self->widget, gtk_hdy_animation_stop, self); ++ ++ self->done_cb (self->user_data); ++} ++ ++gdouble ++gtk_hdy_animation_get_value (GtkHdyAnimation *self) ++{ ++ g_return_val_if_fail (self != NULL, 0.0); ++ ++ return self->value; ++} ++ ++/** ++ * gtk_hdy_get_enable_animations: ++ * @widget: a #GtkWidget ++ * ++ * Returns whether animations are enabled for that widget. This should be used ++ * when implementing an animated widget to know whether to animate it or not. ++ * ++ * Returns: %TRUE if animations are enabled for @widget. ++ * ++ * Since: 0.0.11 ++ */ ++gboolean ++gtk_hdy_get_enable_animations (GtkWidget *widget) ++{ ++ gboolean enable_animations = TRUE; ++ ++ g_assert (GTK_IS_WIDGET (widget)); ++ ++ g_object_get (gtk_widget_get_settings (widget), ++ "gtk-enable-animations", &enable_animations, ++ NULL); ++ ++ return enable_animations; ++} ++ ++/** ++ * gtk_hdy_lerp: (skip) ++ * @a: the start ++ * @b: the end ++ * @t: the interpolation rate ++ * ++ * Computes the linear interpolation between @a and @b for @t. ++ * ++ * Returns: the linear interpolation between @a and @b for @t. ++ * ++ * Since: 0.0.11 ++ */ ++gdouble ++gtk_hdy_lerp (gdouble a, gdouble b, gdouble t) ++{ ++ return a * (1.0 - t) + b * t; ++} ++ ++/* From clutter-easing.c, based on Robert Penner's ++ * infamous easing equations, MIT license. ++ */ ++ ++/** ++ * gtk_hdy_ease_out_cubic: ++ * @t: the term ++ * ++ * Computes the ease out for @t. ++ * ++ * Returns: the ease out for @t. ++ * ++ * Since: 0.0.11 ++ */ ++gdouble ++gtk_hdy_ease_out_cubic (gdouble t) ++{ ++ gdouble p = t - 1; ++ return p * p * p + 1; ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 1d35e83..9fe7c4d 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -383,6 +383,7 @@ gtk_sources = files( + 'gtkwin32draw.c', + 'gtkwin32theme.c', + 'gdkpixbufutils.c', ++ 'hdy-animation.c', + 'hdy-css.c', + 'hdy-view-switcher-bar.c', + 'hdy-view-switcher-button.c', +@@ -394,6 +395,7 @@ gtk_sources = files( + gtk_private_type_headers = files( + 'gtkcsstypesprivate.h', + 'gtktexthandleprivate.h', ++ 'hdy-animation-private.h', + 'hdy-css-private.h', + 'hdy-view-switcher-bar-private.h', + 'hdy-view-switcher-button-private.h', diff --git a/gtk3-mobile/Add-GtkHdyClamp.patch b/gtk3-mobile/Add-GtkHdyClamp.patch new file mode 100644 index 0000000..059a189 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyClamp.patch @@ -0,0 +1,642 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 14 Oct 2020 19:27:32 +0500 +Subject: Add GtkHdyClamp + +This is imported from HdyLeaflet from libhandy 1.0.0. +--- + gtk/hdy-clamp-private.h | 31 +++ + gtk/hdy-clamp.c | 566 ++++++++++++++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + 3 files changed, 599 insertions(+) + create mode 100644 gtk/hdy-clamp-private.h + create mode 100644 gtk/hdy-clamp.c + +diff --git a/gtk/hdy-clamp-private.h b/gtk/hdy-clamp-private.h +new file mode 100644 +index 0000000..b41278f +--- /dev/null ++++ b/gtk/hdy-clamp-private.h +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (C) 2018 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkbin.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_CLAMP (gtk_hdy_clamp_get_type()) ++ ++G_DECLARE_FINAL_TYPE (GtkHdyClamp, gtk_hdy_clamp, GTK, HDY_CLAMP, GtkBin) ++ ++GtkWidget *gtk_hdy_clamp_new (void); ++ ++gint gtk_hdy_clamp_get_maximum_size (GtkHdyClamp *self); ++void gtk_hdy_clamp_set_maximum_size (GtkHdyClamp *self, ++ gint maximum_size); ++ ++gint gtk_hdy_clamp_get_tightening_threshold (GtkHdyClamp *self); ++void gtk_hdy_clamp_set_tightening_threshold (GtkHdyClamp *self, ++ gint tightening_threshold); ++ ++G_END_DECLS +diff --git a/gtk/hdy-clamp.c b/gtk/hdy-clamp.c +new file mode 100644 +index 0000000..8b287dc +--- /dev/null ++++ b/gtk/hdy-clamp.c +@@ -0,0 +1,566 @@ ++/* ++ * Copyright (C) 2018 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "gtkorientable.h" ++#include "gtkstylecontext.h" ++#include "gtktypebuiltins.h" ++#include "hdy-clamp-private.h" ++#include "hdy-animation-private.h" ++ ++#include <math.h> ++ ++/** ++ * SECTION:hdy-clamp ++ * @short_description: A container constraining its child to a given size. ++ * @Title: GtkHdyClamp ++ * ++ * The #GtkHdyClamp widget constraints the size of the widget it contains to a ++ * given maximum size. It will constrain the width if it is horizontal, or the ++ * height if it is vertical. The expansion of the child from its minimum to its ++ * maximum size is eased out for a smooth transition. ++ * ++ * If the child requires more than the requested maximum size, it will be ++ * allocated the minimum size it can fit in instead. ++ * ++ * # CSS nodes ++ * ++ * #GtkHdyClamp has a single CSS node with name clamp. The node will get the style ++ * classes .large when its child reached its maximum size, .small when the clamp ++ * allocates its full size to its child, .medium in-between, or none if it ++ * didn't compute its size yet. ++ * ++ * Since: 1.0 ++ */ ++ ++#define GTK_HDY_EASE_OUT_TAN_CUBIC 3 ++ ++enum { ++ PROP_0, ++ PROP_MAXIMUM_SIZE, ++ PROP_TIGHTENING_THRESHOLD, ++ ++ /* Overridden properties */ ++ PROP_ORIENTATION, ++ ++ LAST_PROP = PROP_TIGHTENING_THRESHOLD + 1, ++}; ++ ++struct _GtkHdyClamp ++{ ++ GtkBin parent_instance; ++ ++ gint maximum_size; ++ gint tightening_threshold; ++ ++ GtkOrientation orientation; ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++G_DEFINE_TYPE_WITH_CODE (GtkHdyClamp, gtk_hdy_clamp, GTK_TYPE_BIN, ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)) ++ ++static void ++set_orientation (GtkHdyClamp *self, ++ GtkOrientation orientation) ++{ ++ if (self->orientation == orientation) ++ return; ++ ++ self->orientation = orientation; ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ g_object_notify (G_OBJECT (self), "orientation"); ++} ++ ++static void ++gtk_hdy_clamp_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyClamp *self = GTK_HDY_CLAMP (object); ++ ++ switch (prop_id) { ++ case PROP_MAXIMUM_SIZE: ++ g_value_set_int (value, gtk_hdy_clamp_get_maximum_size (self)); ++ break; ++ case PROP_TIGHTENING_THRESHOLD: ++ g_value_set_int (value, gtk_hdy_clamp_get_tightening_threshold (self)); ++ break; ++ case PROP_ORIENTATION: ++ g_value_set_enum (value, self->orientation); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_clamp_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyClamp *self = GTK_HDY_CLAMP (object); ++ ++ switch (prop_id) { ++ case PROP_MAXIMUM_SIZE: ++ gtk_hdy_clamp_set_maximum_size (self, g_value_get_int (value)); ++ break; ++ case PROP_TIGHTENING_THRESHOLD: ++ gtk_hdy_clamp_set_tightening_threshold (self, g_value_get_int (value)); ++ break; ++ case PROP_ORIENTATION: ++ set_orientation (self, g_value_get_enum (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++/** ++ * get_child_size: ++ * @self: a #GtkHdyClamp ++ * @for_size: the size of the clamp ++ * @child_minimum: the minimum size reachable by the child, and hence by @self ++ * @child_maximum: the maximum size @self will ever allocate its child ++ * @lower_threshold: the threshold below which @self will allocate its full size to its child ++ * @upper_threshold: the threshold up from which @self will allocate its maximum size to its child ++ * ++ * Measures the child's extremes, the clamp's thresholds, and returns size to ++ * allocate to the child. ++ * ++ * If the clamp is horizontal, all values are widths, otherwise they are ++ * heights. ++ */ ++static gint ++get_child_size (GtkHdyClamp *self, ++ gint for_size, ++ gint *child_minimum, ++ gint *child_maximum, ++ gint *lower_threshold, ++ gint *upper_threshold) ++{ ++ GtkBin *bin = GTK_BIN (self); ++ GtkWidget *child; ++ gint min = 0, max = 0, lower = 0, upper = 0; ++ gdouble amplitude, progress; ++ ++ child = gtk_bin_get_child (bin); ++ if (child == NULL) ++ return 0; ++ ++ if (gtk_widget_get_visible (child)) { ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) ++ gtk_widget_get_preferred_width (child, &min, NULL); ++ else ++ gtk_widget_get_preferred_height (child, &min, NULL); ++ } ++ ++ lower = MAX (MIN (self->tightening_threshold, self->maximum_size), min); ++ max = MAX (lower, self->maximum_size); ++ amplitude = max - lower; ++ upper = GTK_HDY_EASE_OUT_TAN_CUBIC * amplitude + lower; ++ ++ if (child_minimum) ++ *child_minimum = min; ++ if (child_maximum) ++ *child_maximum = max; ++ if (lower_threshold) ++ *lower_threshold = lower; ++ if (upper_threshold) ++ *upper_threshold = upper; ++ ++ if (for_size < 0) ++ return 0; ++ ++ if (for_size <= lower) ++ return for_size; ++ ++ if (for_size >= upper) ++ return max; ++ ++ progress = (double) (for_size - lower) / (double) (upper - lower); ++ ++ return gtk_hdy_ease_out_cubic (progress) * amplitude + lower; ++} ++ ++/* This private method is prefixed by the call name because it will be a virtual ++ * method in GTK 4. ++ */ ++static void ++gtk_hdy_clamp_measure (GtkWidget *widget, ++ GtkOrientation orientation, ++ int for_size, ++ int *minimum, ++ int *natural, ++ int *minimum_baseline, ++ int *natural_baseline) ++{ ++ GtkHdyClamp *self = GTK_HDY_CLAMP (widget); ++ GtkBin *bin = GTK_BIN (widget); ++ GtkWidget *child; ++ gint child_size; ++ ++ if (minimum) ++ *minimum = 0; ++ if (natural) ++ *natural = 0; ++ if (minimum_baseline) ++ *minimum_baseline = -1; ++ if (natural_baseline) ++ *natural_baseline = -1; ++ ++ child = gtk_bin_get_child (bin); ++ if (!(child && gtk_widget_get_visible (child))) ++ return; ++ ++ if (orientation == GTK_ORIENTATION_HORIZONTAL) { ++ if (self->orientation == orientation) { ++ gtk_widget_get_preferred_width (child, minimum, natural); ++ ++ return; ++ } ++ ++ child_size = get_child_size (GTK_HDY_CLAMP (widget), for_size, NULL, NULL, NULL, NULL); ++ ++ gtk_widget_get_preferred_width_for_height (child, ++ child_size, ++ minimum, ++ natural); ++ } else { ++ if (self->orientation == orientation) { ++ gtk_widget_get_preferred_height (child, minimum, natural); ++ ++ return; ++ } ++ ++ child_size = get_child_size (GTK_HDY_CLAMP (widget), for_size, NULL, NULL, NULL, NULL); ++ ++ gtk_widget_get_preferred_height_and_baseline_for_width (child, ++ child_size, ++ minimum, ++ natural, ++ minimum_baseline, ++ natural_baseline); ++ } ++} ++ ++static GtkSizeRequestMode ++gtk_hdy_clamp_get_request_mode (GtkWidget *widget) ++{ ++ GtkHdyClamp *self = GTK_HDY_CLAMP (widget); ++ ++ return self->orientation == GTK_ORIENTATION_HORIZONTAL ? ++ GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH : ++ GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT; ++} ++ ++static void ++gtk_hdy_clamp_get_preferred_width_for_height (GtkWidget *widget, ++ gint height, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_clamp_measure (widget, GTK_ORIENTATION_HORIZONTAL, height, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_clamp_get_preferred_width (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_clamp_measure (widget, GTK_ORIENTATION_HORIZONTAL, -1, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_clamp_get_preferred_height_and_baseline_for_width (GtkWidget *widget, ++ gint width, ++ gint *minimum, ++ gint *natural, ++ gint *minimum_baseline, ++ gint *natural_baseline) ++{ ++ gtk_hdy_clamp_measure (widget, GTK_ORIENTATION_VERTICAL, width, ++ minimum, natural, minimum_baseline, natural_baseline); ++} ++ ++static void ++gtk_hdy_clamp_get_preferred_height_for_width (GtkWidget *widget, ++ gint width, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_clamp_measure (widget, GTK_ORIENTATION_VERTICAL, width, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_clamp_get_preferred_height (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_clamp_measure (widget, GTK_ORIENTATION_VERTICAL, -1, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_clamp_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation) ++{ ++ GtkHdyClamp *self = GTK_HDY_CLAMP (widget); ++ GtkBin *bin = GTK_BIN (widget); ++ GtkAllocation child_allocation; ++ gint baseline; ++ GtkWidget *child; ++ GtkStyleContext *context = gtk_widget_get_style_context (widget); ++ gint child_maximum = 0, lower_threshold = 0; ++ gint child_clamped_size; ++ ++ gtk_widget_set_allocation (widget, allocation); ++ ++ child = gtk_bin_get_child (bin); ++ if (!(child && gtk_widget_get_visible (child))) { ++ gtk_style_context_remove_class (context, "small"); ++ gtk_style_context_remove_class (context, "medium"); ++ gtk_style_context_remove_class (context, "large"); ++ ++ return; ++ } ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) { ++ child_allocation.width = get_child_size (self, allocation->width, NULL, &child_maximum, &lower_threshold, NULL); ++ child_allocation.height = allocation->height; ++ ++ child_clamped_size = child_allocation.width; ++ } ++ else { ++ child_allocation.width = allocation->width; ++ child_allocation.height = get_child_size (self, allocation->height, NULL, &child_maximum, &lower_threshold, NULL); ++ ++ child_clamped_size = child_allocation.height; ++ } ++ ++ if (child_clamped_size >= child_maximum) { ++ gtk_style_context_remove_class (context, "small"); ++ gtk_style_context_remove_class (context, "medium"); ++ gtk_style_context_add_class (context, "large"); ++ } else if (child_clamped_size <= lower_threshold) { ++ gtk_style_context_add_class (context, "small"); ++ gtk_style_context_remove_class (context, "medium"); ++ gtk_style_context_remove_class (context, "large"); ++ } else { ++ gtk_style_context_remove_class (context, "small"); ++ gtk_style_context_add_class (context, "medium"); ++ gtk_style_context_remove_class (context, "large"); ++ } ++ ++ if (!gtk_widget_get_has_window (widget)) { ++ /* This always center the child on the side of the orientation. */ ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) { ++ child_allocation.x = allocation->x + (allocation->width - child_allocation.width) / 2; ++ child_allocation.y = allocation->y; ++ } else { ++ child_allocation.x = allocation->x; ++ child_allocation.y = allocation->y + (allocation->height - child_allocation.height) / 2; ++ } ++ } ++ else { ++ child_allocation.x = 0; ++ child_allocation.y = 0; ++ } ++ ++ baseline = gtk_widget_get_allocated_baseline (widget); ++ gtk_widget_size_allocate_with_baseline (child, &child_allocation, baseline); ++} ++ ++static void ++gtk_hdy_clamp_class_init (GtkHdyClampClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); ++ ++ object_class->get_property = gtk_hdy_clamp_get_property; ++ object_class->set_property = gtk_hdy_clamp_set_property; ++ ++ widget_class->get_request_mode = gtk_hdy_clamp_get_request_mode; ++ widget_class->get_preferred_width = gtk_hdy_clamp_get_preferred_width; ++ widget_class->get_preferred_width_for_height = gtk_hdy_clamp_get_preferred_width_for_height; ++ widget_class->get_preferred_height = gtk_hdy_clamp_get_preferred_height; ++ widget_class->get_preferred_height_for_width = gtk_hdy_clamp_get_preferred_height_for_width; ++ widget_class->get_preferred_height_and_baseline_for_width = gtk_hdy_clamp_get_preferred_height_and_baseline_for_width; ++ widget_class->size_allocate = gtk_hdy_clamp_size_allocate; ++ ++ gtk_container_class_handle_border_width (container_class); ++ ++ g_object_class_override_property (object_class, ++ PROP_ORIENTATION, ++ "orientation"); ++ ++ /** ++ * GtkHdyClamp:maximum-size: ++ * ++ * The maximum size to allocate to the child. It is the width if the clamp is ++ * horizontal, or the height if it is vertical. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_MAXIMUM_SIZE] = ++ g_param_spec_int ("maximum-size", ++ _("Maximum size"), ++ _("The maximum size allocated to the child"), ++ 0, G_MAXINT, 600, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyClamp:tightening-threshold: ++ * ++ * The size starting from which the clamp will tighten its grip on the child, ++ * slowly allocating less and less of the available size up to the maximum ++ * allocated size. Below that threshold and below the maximum width, the child ++ * will be allocated all the available size. ++ * ++ * If the threshold is greater than the maximum size to allocate to the child, ++ * the child will be allocated all the width up to the maximum. ++ * If the threshold is lower than the minimum size to allocate to the child, ++ * that size will be used as the tightening threshold. ++ * ++ * Effectively, tightening the grip on the child before it reaches its maximum ++ * size makes transitions to and from the maximum size smoother when resizing. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_TIGHTENING_THRESHOLD] = ++ g_param_spec_int ("tightening-threshold", ++ _("Tightening threshold"), ++ _("The size from which the clamp will tighten its grip on the child"), ++ 0, G_MAXINT, 400, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ gtk_widget_class_set_css_name (widget_class, "clamp"); ++} ++ ++static void ++gtk_hdy_clamp_init (GtkHdyClamp *self) ++{ ++ self->maximum_size = 600; ++ self->tightening_threshold = 400; ++} ++ ++/** ++ * gtk_hdy_clamp_new: ++ * ++ * Creates a new #GtkHdyClamp. ++ * ++ * Returns: a new #GtkHdyClamp ++ * ++ * Since: 1.0 ++ */ ++GtkWidget * ++gtk_hdy_clamp_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_CLAMP, NULL); ++} ++ ++/** ++ * gtk_hdy_clamp_get_maximum_size: ++ * @self: a #GtkHdyClamp ++ * ++ * Gets the maximum size to allocate to the contained child. It is the width if ++ * @self is horizontal, or the height if it is vertical. ++ * ++ * Returns: the maximum width to allocate to the contained child. ++ * ++ * Since: 1.0 ++ */ ++gint ++gtk_hdy_clamp_get_maximum_size (GtkHdyClamp *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_CLAMP (self), 0); ++ ++ return self->maximum_size; ++} ++ ++/** ++ * gtk_hdy_clamp_set_maximum_size: ++ * @self: a #GtkHdyClamp ++ * @maximum_size: the maximum size ++ * ++ * Sets the maximum size to allocate to the contained child. It is the width if ++ * @self is horizontal, or the height if it is vertical. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_clamp_set_maximum_size (GtkHdyClamp *self, ++ gint maximum_size) ++{ ++ g_return_if_fail (GTK_IS_HDY_CLAMP (self)); ++ ++ if (self->maximum_size == maximum_size) ++ return; ++ ++ self->maximum_size = maximum_size; ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MAXIMUM_SIZE]); ++} ++ ++/** ++ * gtk_hdy_clamp_get_tightening_threshold: ++ * @self: a #GtkHdyClamp ++ * ++ * Gets the size starting from which the clamp will tighten its grip on the ++ * child. ++ * ++ * Returns: the size starting from which the clamp will tighten its grip on the ++ * child. ++ * ++ * Since: 1.0 ++ */ ++gint ++gtk_hdy_clamp_get_tightening_threshold (GtkHdyClamp *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_CLAMP (self), 0); ++ ++ return self->tightening_threshold; ++} ++ ++/** ++ * gtk_hdy_clamp_set_tightening_threshold: ++ * @self: a #GtkHdyClamp ++ * @tightening_threshold: the tightening threshold ++ * ++ * Sets the size starting from which the clamp will tighten its grip on the ++ * child. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_clamp_set_tightening_threshold (GtkHdyClamp *self, ++ gint tightening_threshold) ++{ ++ g_return_if_fail (GTK_IS_HDY_CLAMP (self)); ++ ++ if (self->tightening_threshold == tightening_threshold) ++ return; ++ ++ self->tightening_threshold = tightening_threshold; ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TIGHTENING_THRESHOLD]); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index ae63ff0..c66ad0c 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -384,6 +384,7 @@ gtk_sources = files( + 'gtkwin32theme.c', + 'gdkpixbufutils.c', + 'hdy-animation.c', ++ 'hdy-clamp.c', + 'hdy-css.c', + 'hdy-navigation-direction.c', + 'hdy-shadow-helper.c', +@@ -403,6 +404,7 @@ gtk_private_type_headers = files( + 'gtktexthandleprivate.h', + 'hdy-animation-private.h', + 'hdy-cairo-private.h', ++ 'hdy-clamp-private.h', + 'hdy-css-private.h', + 'hdy-navigation-direction-private.h', + 'hdy-shadow-helper-private.h', diff --git a/gtk3-mobile/Add-GtkHdyFlap.patch b/gtk3-mobile/Add-GtkHdyFlap.patch new file mode 100644 index 0000000..cb2da39 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyFlap.patch @@ -0,0 +1,2813 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 16 Dec 2020 19:56:17 +0500 +Subject: Add GtkHdyFlap + +This is imported from HdyFlap from libhandy 1.0.3. +--- + gtk/gtkprivate.h | 1 + + gtk/hdy-flap-private.h | 92 ++ + gtk/hdy-flap.c | 2663 ++++++++++++++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + 4 files changed, 2758 insertions(+) + create mode 100644 gtk/hdy-flap-private.h + create mode 100644 gtk/hdy-flap.c + +diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h +index 8c6eded..aca24fd 100644 +--- a/gtk/gtkprivate.h ++++ b/gtk/gtkprivate.h +@@ -30,6 +30,7 @@ + + #include "gtkcsstypesprivate.h" + #include "gtktexthandleprivate.h" ++#include "hdy-flap-private.h" + #include "hdy-navigation-direction-private.h" + #include "hdy-squeezer-private.h" + #include "hdy-view-switcher-private.h" +diff --git a/gtk/hdy-flap-private.h b/gtk/hdy-flap-private.h +new file mode 100644 +index 0000000..d0ac61f +--- /dev/null ++++ b/gtk/hdy-flap-private.h +@@ -0,0 +1,92 @@ ++/* ++ * Copyright (C) 2020 Felix Häcker <haeckerfelix@gnome.org> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkcontainer.h" ++#include "gtkenums.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_FLAP (gtk_hdy_flap_get_type ()) ++ ++G_DECLARE_FINAL_TYPE (GtkHdyFlap, gtk_hdy_flap, GTK, HDY_FLAP, GtkContainer) ++ ++typedef enum { ++ GTK_HDY_FLAP_FOLD_POLICY_NEVER, ++ GTK_HDY_FLAP_FOLD_POLICY_ALWAYS, ++ GTK_HDY_FLAP_FOLD_POLICY_AUTO, ++} GtkHdyFlapFoldPolicy; ++ ++typedef enum { ++ GTK_HDY_FLAP_TRANSITION_TYPE_OVER, ++ GTK_HDY_FLAP_TRANSITION_TYPE_UNDER, ++ GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE, ++} GtkHdyFlapTransitionType; ++ ++GtkWidget *gtk_hdy_flap_new (void); ++ ++GtkWidget *gtk_hdy_flap_get_content (GtkHdyFlap *self); ++void gtk_hdy_flap_set_content (GtkHdyFlap *self, ++ GtkWidget *content); ++ ++GtkWidget *gtk_hdy_flap_get_flap (GtkHdyFlap *self); ++void gtk_hdy_flap_set_flap (GtkHdyFlap *self, ++ GtkWidget *flap); ++ ++GtkWidget *gtk_hdy_flap_get_separator (GtkHdyFlap *self); ++void gtk_hdy_flap_set_separator (GtkHdyFlap *self, ++ GtkWidget *separator); ++ ++GtkPackType gtk_hdy_flap_get_flap_position (GtkHdyFlap *self); ++void gtk_hdy_flap_set_flap_position (GtkHdyFlap *self, ++ GtkPackType position); ++ ++gboolean gtk_hdy_flap_get_reveal_flap (GtkHdyFlap *self); ++void gtk_hdy_flap_set_reveal_flap (GtkHdyFlap *self, ++ gboolean reveal_flap); ++ ++guint gtk_hdy_flap_get_reveal_duration (GtkHdyFlap *self); ++void gtk_hdy_flap_set_reveal_duration (GtkHdyFlap *self, ++ guint duration); ++ ++gdouble gtk_hdy_flap_get_reveal_progress (GtkHdyFlap *self); ++ ++GtkHdyFlapFoldPolicy gtk_hdy_flap_get_fold_policy (GtkHdyFlap *self); ++void gtk_hdy_flap_set_fold_policy (GtkHdyFlap *self, ++ GtkHdyFlapFoldPolicy policy); ++ ++guint gtk_hdy_flap_get_fold_duration (GtkHdyFlap *self); ++void gtk_hdy_flap_set_fold_duration (GtkHdyFlap *self, ++ guint duration); ++ ++gboolean gtk_hdy_flap_get_folded (GtkHdyFlap *self); ++ ++gboolean gtk_hdy_flap_get_locked (GtkHdyFlap *self); ++void gtk_hdy_flap_set_locked (GtkHdyFlap *self, ++ gboolean locked); ++ ++GtkHdyFlapTransitionType gtk_hdy_flap_get_transition_type (GtkHdyFlap *self); ++void gtk_hdy_flap_set_transition_type (GtkHdyFlap *self, ++ GtkHdyFlapTransitionType transition_type); ++ ++gboolean gtk_hdy_flap_get_modal (GtkHdyFlap *self); ++void gtk_hdy_flap_set_modal (GtkHdyFlap *self, ++ gboolean modal); ++ ++gboolean gtk_hdy_flap_get_swipe_to_open (GtkHdyFlap *self); ++void gtk_hdy_flap_set_swipe_to_open (GtkHdyFlap *self, ++ gboolean swipe_to_open); ++ ++gboolean gtk_hdy_flap_get_swipe_to_close (GtkHdyFlap *self); ++void gtk_hdy_flap_set_swipe_to_close (GtkHdyFlap *self, ++ gboolean swipe_to_close); ++ ++G_END_DECLS +diff --git a/gtk/hdy-flap.c b/gtk/hdy-flap.c +new file mode 100644 +index 0000000..8735ad9 +--- /dev/null ++++ b/gtk/hdy-flap.c +@@ -0,0 +1,2663 @@ ++/* ++ * Copyright (C) 2020 Felix Häcker <haeckerfelix@gnome.org> ++ * Copyright (C) 2020 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "hdy-flap-private.h" ++ ++#include <math.h> ++ ++#include "gtkbuildable.h" ++#include "gtkgesturemultipress.h" ++#include "gtkeventcontrollerkey.h" ++#include "gtkorientable.h" ++#include "gtkstylecontext.h" ++#include "gtksizerequest.h" ++#include "gtkprivatetypebuiltins.h" ++#include "gtktypebuiltins.h" ++#include "hdy-animation-private.h" ++#include "hdy-shadow-helper-private.h" ++#include "hdy-swipeable-private.h" ++#include "hdy-swipe-tracker-private.h" ++ ++/** ++ * SECTION:hdy-flap ++ * @short_description: An adaptive container acting like a box or an overlay. ++ * @Title: GtkHdyFlap ++ * ++ * The #GtkHdyFlap widget can display its children like a #GtkBox does or like a ++ * #GtkOverlay does, according to the #GtkHdyFlap:fold-policy value. ++ * ++ * #GtkHdyFlap has at most three children: #GtkHdyFlap:content, #GtkHdyFlap:flap and ++ * #GtkHdyFlap:separator. Content is the primary child, flap is displayed next to ++ * it when unfolded, or overlays it when folded. Flap can be shown or hidden by ++ * changing the #GtkHdyFlap:reveal-flap value, as well as via swipe gestures if ++ * #GtkHdyFlap:swipe-to-open and/or #GtkHdyFlap:swipe-to-close are set to %TRUE. ++ * ++ * Optionally, a separator can be provided, which would be displayed between ++ * the content and the flap when there's no shadow to separate them, depending ++ * on the transition type. ++ * ++ * #GtkHdyFlap:flap is transparent by default; add the .background style class to ++ * it if this is unwanted. ++ * ++ * If #GtkHdyFlap:modal is set to %TRUE, content becomes completely inaccessible ++ * when the flap is revealed when folded. ++ * ++ * The position of the flap and separator children relative to the content is ++ * determined by orientation, as well as #GtkHdyFlap:flap-position value. ++ * ++ * Folding the flap will automatically hide the flap widget, and unfolding it ++ * will automatically reveal it. If this behavior is not desired, the ++ * #GtkHdyFlap:locked property can be used to override it. ++ * ++ * Common use cases include sidebars, header bars that need to be able to ++ * overlap the window content (for example, in fullscreen mode) and bottom ++ * sheets. ++ * ++ * # GtkHdyFlap as GtkBuildable ++ * ++ * The #GtkHdyFlap implementation of the #GtkBuildable interface supports setting ++ * the flap child by specifying “flap” as the “type” attribute of a ++ * &lt;child&gt; element, and separator by specifying “separator”. Specifying ++ * “content” child type or omitting it results in setting the content child. ++ * ++ * # CSS nodes ++ * ++ * #GtkHdyFlap has a single CSS node with name flap. The node will get the style ++ * classes .folded when it is folded, and .unfolded when it's not. ++ * ++ * Since: 1.1 ++ */ ++ ++/** ++ * GtkHdyFlapFoldPolicy: ++ * @GTK_HDY_FLAP_FOLD_POLICY_NEVER: Disable folding, the flap cannot reach narrow ++ * sizes. ++ * @GTK_HDY_FLAP_FOLD_POLICY_ALWAYS: Keep the flap always folded. ++ * @GTK_HDY_FLAP_FOLD_POLICY_AUTO: Fold and unfold the flap based on available ++ * space. ++ * ++ * These enumeration values describe the possible folding behavior in a #GtkHdyFlap ++ * widget. ++ * ++ * Since: 1.1 ++ */ ++ ++/** ++ * GtkHdyFlapTransitionType: ++ * @GTK_HDY_FLAP_TRANSITION_TYPE_OVER: The flap slides over the content, which is ++ * dimmed. When folded, only the flap can be swiped. ++ * @GTK_HDY_FLAP_TRANSITION_TYPE_UNDER: The content slides over the flap. Only the ++ * content can be swiped. ++ * @GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE: The flap slides offscreen when hidden, ++ * neither the flap nor content overlap each other. Both widgets can be ++ * swiped. ++ * ++ * These enumeration values describe the possible transitions between children ++ * in a #GtkHdyFlap widget, as well as which areas can be swiped via ++ * #GtkHdyFlap:swipe-to-open and #GtkHdyFlap:swipe-to-close. ++ * ++ * New values may be added to this enum over time. ++ * ++ * Since: 1.1 ++ */ ++ ++typedef struct { ++ GtkWidget *widget; ++ GdkWindow *window; ++ GtkAllocation allocation; ++} ChildInfo; ++ ++struct _GtkHdyFlap ++{ ++ GtkContainer parent_instance; ++ ++ ChildInfo content; ++ ChildInfo flap; ++ ChildInfo separator; ++ ++ GtkHdyFlapFoldPolicy fold_policy; ++ GtkHdyFlapTransitionType transition_type; ++ GtkPackType flap_position; ++ gboolean reveal_flap; ++ gboolean locked; ++ gboolean folded; ++ ++ guint fold_duration; ++ gdouble fold_progress; ++ GtkHdyAnimation *fold_animation; ++ ++ guint reveal_duration; ++ gdouble reveal_progress; ++ GtkHdyAnimation *reveal_animation; ++ ++ gboolean schedule_fold; ++ ++ GtkOrientation orientation; ++ ++ GtkHdyShadowHelper *shadow_helper; ++ ++ gboolean swipe_to_open; ++ gboolean swipe_to_close; ++ GtkHdySwipeTracker *tracker; ++ gboolean swipe_active; ++ ++ gboolean modal; ++ GtkGesture *click_gesture; ++ GtkEventController *key_controller; ++}; ++ ++static void gtk_hdy_flap_buildable_init (GtkBuildableIface *iface); ++static void gtk_hdy_flap_swipeable_init (GtkHdySwipeableInterface *iface); ++ ++G_DEFINE_TYPE_WITH_CODE (GtkHdyFlap, gtk_hdy_flap, GTK_TYPE_CONTAINER, ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL) ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, gtk_hdy_flap_buildable_init) ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_HDY_SWIPEABLE, gtk_hdy_flap_swipeable_init)) ++ ++enum { ++ PROP_0, ++ PROP_CONTENT, ++ PROP_FLAP, ++ PROP_SEPARATOR, ++ PROP_FLAP_POSITION, ++ PROP_REVEAL_FLAP, ++ PROP_REVEAL_DURATION, ++ PROP_REVEAL_PROGRESS, ++ PROP_FOLD_POLICY, ++ PROP_FOLD_DURATION, ++ PROP_FOLDED, ++ PROP_LOCKED, ++ PROP_TRANSITION_TYPE, ++ PROP_MODAL, ++ PROP_SWIPE_TO_OPEN, ++ PROP_SWIPE_TO_CLOSE, ++ ++ /* Overridden properties */ ++ PROP_ORIENTATION, ++ ++ LAST_PROP = PROP_ORIENTATION, ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++static void ++update_swipe_tracker (GtkHdyFlap *self) ++{ ++ gboolean reverse = self->flap_position == GTK_PACK_START; ++ ++ if (!self->tracker) ++ return; ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL && ++ gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL) ++ reverse = !reverse; ++ ++ gtk_hdy_swipe_tracker_set_enabled (self->tracker, self->flap.widget && ++ (self->swipe_to_open || self->swipe_to_close)); ++ gtk_hdy_swipe_tracker_set_reversed (self->tracker, reverse); ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (self->tracker), ++ self->orientation); ++} ++ ++static void ++set_orientation (GtkHdyFlap *self, ++ GtkOrientation orientation) ++{ ++ if (self->orientation == orientation) ++ return; ++ ++ self->orientation = orientation; ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ update_swipe_tracker (self); ++ ++ g_object_notify (G_OBJECT (self), "orientation"); ++} ++ ++static void ++update_child_visibility (GtkHdyFlap *self) ++{ ++ gboolean visible = self->reveal_progress > 0; ++ ++ if (self->flap.widget) ++ gtk_widget_set_child_visible (self->flap.widget, visible); ++ ++ if (self->separator.widget) ++ gtk_widget_set_child_visible (self->separator.widget, visible); ++ ++ if (!gtk_widget_get_realized (GTK_WIDGET (self))) ++ return; ++ ++ if (self->flap.widget) { ++ if (visible) ++ gdk_window_show (self->flap.window); ++ else ++ gdk_window_hide (self->flap.window); ++ } ++ ++ if (self->separator.widget) { ++ if (visible) ++ gdk_window_show (self->separator.window); ++ else ++ gdk_window_hide (self->separator.window); ++ } ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++static void ++set_reveal_progress (GtkHdyFlap *self, ++ gdouble progress) ++{ ++ self->reveal_progress = progress; ++ ++ update_child_visibility (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_PROGRESS]); ++} ++ ++static void ++fold_animation_value_cb (gdouble value, ++ GtkHdyFlap *self) ++{ ++ self->fold_progress = value; ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++static void ++fold_animation_done_cb (GtkHdyFlap *self) ++{ ++ g_clear_pointer (&self->fold_animation, gtk_hdy_animation_unref); ++} ++ ++static void ++animate_fold (GtkHdyFlap *self) ++{ ++ if (self->fold_animation) ++ gtk_hdy_animation_stop (self->fold_animation); ++ ++ self->fold_animation = ++ gtk_hdy_animation_new (GTK_WIDGET (self), ++ self->fold_progress, ++ self->folded ? 1 : 0, ++ /* When the flap is completely hidden, we can skip animation */ ++ (self->reveal_progress > 0) ? self->fold_duration : 0, ++ gtk_hdy_ease_out_cubic, ++ (GtkHdyAnimationValueCallback) fold_animation_value_cb, ++ (GtkHdyAnimationDoneCallback) fold_animation_done_cb, ++ self); ++ ++ gtk_hdy_animation_start (self->fold_animation); ++} ++ ++static void ++reveal_animation_value_cb (gdouble value, ++ GtkHdyFlap *self) ++{ ++ set_reveal_progress (self, value); ++} ++ ++static void ++reveal_animation_done_cb (GtkHdyFlap *self) ++{ ++ g_clear_pointer (&self->reveal_animation, gtk_hdy_animation_unref); ++ ++ if (self->reveal_progress <= 0 || ++ self->transition_type == GTK_HDY_FLAP_TRANSITION_TYPE_UNDER) ++ gtk_hdy_shadow_helper_clear_cache (self->shadow_helper); ++ ++ if (self->schedule_fold) { ++ self->schedule_fold = FALSE; ++ ++ animate_fold (self); ++ } ++ ++ gtk_widget_queue_allocate (GTK_WIDGET (self)); ++} ++ ++static void ++animate_reveal (GtkHdyFlap *self, ++ gdouble to, ++ gint64 duration) ++{ ++ if (self->reveal_animation) ++ gtk_hdy_animation_stop (self->reveal_animation); ++ ++ self->reveal_animation = ++ gtk_hdy_animation_new (GTK_WIDGET (self), ++ self->reveal_progress, ++ to, ++ duration, ++ gtk_hdy_ease_out_cubic, ++ (GtkHdyAnimationValueCallback) reveal_animation_value_cb, ++ (GtkHdyAnimationDoneCallback) reveal_animation_done_cb, ++ self); ++ ++ gtk_hdy_animation_start (self->reveal_animation); ++} ++ ++static void ++set_reveal_flap (GtkHdyFlap *self, ++ gboolean reveal_flap, ++ guint64 duration, ++ gboolean emit_child_switched) ++{ ++ reveal_flap = !!reveal_flap; ++ ++ if (self->reveal_flap == reveal_flap) ++ return; ++ ++ self->reveal_flap = reveal_flap; ++ ++ if (!self->swipe_active) { ++ animate_reveal (self, reveal_flap ? 1 : 0, duration); ++ ++ if (emit_child_switched) ++ gtk_hdy_swipeable_emit_child_switched (GTK_HDY_SWIPEABLE (self), reveal_flap ? 1 : 0, duration); ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_FLAP]); ++} ++ ++static void ++set_folded (GtkHdyFlap *self, ++ gboolean folded) ++{ ++ GtkStyleContext *context; ++ ++ folded = !!folded; ++ ++ if (self->folded == folded) ++ return; ++ ++ self->folded = folded; ++ ++ gtk_widget_queue_allocate (GTK_WIDGET (self)); ++ ++ /* When unlocked, folding should also hide flap. We don't want two concurrent ++ * animations in this case, instead only animate reveal and schedule a fold ++ * after it finishes, which will be skipped because the flap is fuly hidden. ++ * Meanwhile if it's unfolding, animate folding immediately. */ ++ if (!self->locked && folded) ++ self->schedule_fold = TRUE; ++ else ++ animate_fold (self); ++ ++ if (!self->locked) ++ set_reveal_flap (self, !self->folded, self->fold_duration, TRUE); ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (self)); ++ if (folded) { ++ gtk_style_context_add_class (context, "folded"); ++ gtk_style_context_remove_class (context, "unfolded"); ++ } else { ++ gtk_style_context_remove_class (context, "folded"); ++ gtk_style_context_add_class (context, "unfolded"); ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLDED]); ++} ++ ++static inline GtkPackType ++get_start_or_end (GtkHdyFlap *self) ++{ ++ GtkTextDirection direction = gtk_widget_get_direction (GTK_WIDGET (self)); ++ gboolean is_rtl = direction == GTK_TEXT_DIR_RTL; ++ gboolean is_horiz = self->orientation == GTK_ORIENTATION_HORIZONTAL; ++ ++ return (is_rtl && is_horiz) ? GTK_PACK_END : GTK_PACK_START; ++} ++ ++static void ++begin_swipe_cb (GtkHdySwipeTracker *tracker, ++ GtkHdyNavigationDirection direction, ++ gboolean direct, ++ GtkHdyFlap *self) ++{ ++ if (self->reveal_progress <= 0 && !self->swipe_to_open) ++ return; ++ ++ if (self->reveal_progress >= 1 && !self->swipe_to_close) ++ return; ++ ++ if (self->reveal_animation) ++ gtk_hdy_animation_stop (self->reveal_animation); ++ ++ self->swipe_active = TRUE; ++} ++ ++static void ++update_swipe_cb (GtkHdySwipeTracker *tracker, ++ gdouble progress, ++ GtkHdyFlap *self) ++{ ++ if (!self->swipe_active) ++ return; ++ ++ set_reveal_progress (self, progress); ++} ++ ++static void ++end_swipe_cb (GtkHdySwipeTracker *tracker, ++ gint64 duration, ++ gdouble to, ++ GtkHdyFlap *self) ++{ ++ if (!self->swipe_active) ++ return; ++ ++ self->swipe_active = FALSE; ++ ++ if ((to > 0) == self->reveal_flap) ++ animate_reveal (self, to, duration); ++ else ++ set_reveal_flap (self, to > 0, duration, FALSE); ++} ++ ++static void ++released_cb (GtkGestureMultiPress *gesture, ++ gint n_press, ++ gdouble x, ++ gdouble y, ++ GtkHdyFlap *self) ++{ ++ if (self->reveal_progress <= 0 || self->fold_progress <= 0) { ++ gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); ++ ++ return; ++ } ++ ++ if (x >= self->flap.allocation.x && ++ x <= self->flap.allocation.x + self->flap.allocation.width && ++ y >= self->flap.allocation.y && ++ y <= self->flap.allocation.y + self->flap.allocation.height) { ++ gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); ++ ++ return; ++ } ++ ++ gtk_hdy_flap_set_reveal_flap (self, FALSE); ++} ++ ++static gboolean ++key_pressed_cb (GtkEventControllerKey *controller, ++ guint keyval, ++ guint keycode, ++ GdkModifierType modifiers, ++ GtkHdyFlap *self) ++{ ++ if (keyval == GDK_KEY_Escape && ++ self->reveal_progress > 0 && ++ self->fold_progress > 0) { ++ gtk_hdy_flap_set_reveal_flap (self, FALSE); ++ ++ return GDK_EVENT_STOP; ++ } ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static void ++register_window (GtkHdyFlap *self, ++ ChildInfo *info) ++{ ++ GdkWindowAttr attributes = { 0 }; ++ GdkWindowAttributesType attributes_mask; ++ ++ if (!info->widget) ++ return; ++ ++ attributes.x = info->allocation.x; ++ attributes.y = info->allocation.y; ++ attributes.width = info->allocation.width; ++ attributes.height = info->allocation.height; ++ attributes.window_type = GDK_WINDOW_CHILD; ++ attributes.wclass = GDK_INPUT_OUTPUT; ++ attributes.visual = gtk_widget_get_visual (info->widget); ++ attributes.event_mask = gtk_widget_get_events (info->widget); ++ attributes_mask = (GDK_WA_X | GDK_WA_Y) | GDK_WA_VISUAL; ++ ++ attributes.event_mask = gtk_widget_get_events (GTK_WIDGET (self)) | ++ gtk_widget_get_events (info->widget); ++ ++ info->window = gdk_window_new (gtk_widget_get_window (GTK_WIDGET (self)), ++ &attributes, attributes_mask); ++ gtk_widget_register_window (GTK_WIDGET (self), info->window); ++ ++ gtk_widget_set_parent_window (info->widget, info->window); ++ ++ gdk_window_show (info->window); ++} ++ ++static void ++unregister_window (GtkHdyFlap *self, ++ ChildInfo *info) ++{ ++ if (!info->window) ++ return; ++ ++ gtk_widget_unregister_window (GTK_WIDGET (self), info->window); ++ gdk_window_destroy (info->window); ++ info->window = NULL; ++} ++ ++static gboolean ++transition_is_content_above_flap (GtkHdyFlap *self) ++{ ++ switch (self->transition_type) { ++ case GTK_HDY_FLAP_TRANSITION_TYPE_OVER: ++ return FALSE; ++ ++ case GTK_HDY_FLAP_TRANSITION_TYPE_UNDER: ++ case GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE: ++ return TRUE; ++ ++ default: ++ g_assert_not_reached (); ++ } ++} ++ ++static gboolean ++transition_should_clip (GtkHdyFlap *self) ++{ ++ switch (self->transition_type) { ++ case GTK_HDY_FLAP_TRANSITION_TYPE_OVER: ++ case GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE: ++ return FALSE; ++ ++ case GTK_HDY_FLAP_TRANSITION_TYPE_UNDER: ++ return TRUE; ++ ++ default: ++ g_assert_not_reached (); ++ } ++} ++ ++static gdouble ++transition_get_content_motion_factor (GtkHdyFlap *self) ++{ ++ switch (self->transition_type) { ++ case GTK_HDY_FLAP_TRANSITION_TYPE_OVER: ++ return 0; ++ ++ case GTK_HDY_FLAP_TRANSITION_TYPE_UNDER: ++ case GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE: ++ return 1; ++ ++ default: ++ g_assert_not_reached (); ++ } ++} ++ ++static gdouble ++transition_get_flap_motion_factor (GtkHdyFlap *self) ++{ ++ switch (self->transition_type) { ++ case GTK_HDY_FLAP_TRANSITION_TYPE_OVER: ++ case GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE: ++ return 1; ++ ++ case GTK_HDY_FLAP_TRANSITION_TYPE_UNDER: ++ return 0; ++ ++ default: ++ g_assert_not_reached (); ++ } ++} ++ ++static void ++restack_windows (GtkHdyFlap *self) ++{ ++ gboolean content_above_flap = transition_is_content_above_flap (self); ++ ++ if (!content_above_flap) { ++ if (self->content.window) ++ gdk_window_raise (self->content.window); ++ ++ if (self->separator.window) ++ gdk_window_raise (self->separator.window); ++ } ++ ++ if (self->flap.window) ++ gdk_window_raise (self->flap.window); ++ ++ if (content_above_flap) { ++ if (self->separator.window) ++ gdk_window_raise (self->separator.window); ++ ++ if (self->content.window) ++ gdk_window_raise (self->content.window); ++ } ++} ++ ++static void ++add_child (GtkHdyFlap *self, ++ ChildInfo *info) ++{ ++ if (gtk_widget_get_realized (GTK_WIDGET (self))) { ++ register_window (self, info); ++ restack_windows (self); ++ } ++ ++ gtk_widget_set_parent (info->widget, GTK_WIDGET (self)); ++} ++ ++static void ++remove_child (GtkHdyFlap *self, ++ ChildInfo *info) ++{ ++ if (gtk_widget_get_realized (GTK_WIDGET (self))) ++ unregister_window (self, info); ++ ++ gtk_widget_unparent (info->widget); ++} ++ ++static inline void ++get_preferred_size (GtkWidget *widget, ++ GtkOrientation orientation, ++ gint *min, ++ gint *nat) ++{ ++ if (orientation == GTK_ORIENTATION_HORIZONTAL) ++ gtk_widget_get_preferred_width (widget, min, nat); ++ else ++ gtk_widget_get_preferred_height (widget, min, nat); ++} ++ ++static void ++compute_sizes (GtkHdyFlap *self, ++ GtkAllocation *alloc, ++ gboolean folded, ++ gboolean revealed, ++ gint *flap_size, ++ gint *content_size, ++ gint *separator_size) ++{ ++ gboolean flap_expand, content_expand; ++ gint total, extra; ++ gint flap_nat, content_nat; ++ ++ if (!self->flap.widget && !self->content.widget) ++ return; ++ ++ if (self->separator.widget) ++ get_preferred_size (self->separator.widget, self->orientation, separator_size, NULL); ++ else ++ *separator_size = 0; ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) ++ total = alloc->width; ++ else ++ total = alloc->height; ++ ++ if (!self->flap.widget) { ++ *content_size = total; ++ *flap_size = 0; ++ ++ return; ++ } ++ ++ if (!self->content.widget) { ++ *content_size = 0; ++ *flap_size = total; ++ ++ return; ++ } ++ ++ get_preferred_size (self->flap.widget, self->orientation, flap_size, &flap_nat); ++ get_preferred_size (self->content.widget, self->orientation, content_size, &content_nat); ++ ++ flap_expand = gtk_widget_compute_expand (self->flap.widget, self->orientation); ++ content_expand = gtk_widget_compute_expand (self->content.widget, self->orientation); ++ ++ if (folded) { ++ *content_size = total; ++ ++ if (flap_expand) { ++ *flap_size = total; ++ } else { ++ get_preferred_size (self->flap.widget, self->orientation, NULL, flap_size); ++ *flap_size = MIN (*flap_size, total); ++ } ++ ++ return; ++ } ++ ++ if (revealed) ++ total -= *separator_size; ++ ++ if (flap_expand && content_expand) { ++ *flap_size = MAX (total / 2, *flap_size); ++ ++ if (!revealed) ++ *content_size = total; ++ else ++ *content_size = total - *flap_size; ++ ++ return; ++ } ++ ++ extra = total - *content_size - *flap_size; ++ ++ if (flap_expand) { ++ *flap_size += extra; ++ extra = 0; ++ ++ if (!revealed) ++ *content_size = total; ++ ++ return; ++ } ++ ++ if (content_expand) { ++ *content_size += extra; ++ extra = 0; ++ } ++ ++ if (extra > 0) { ++ GtkRequestedSize sizes[2]; ++ ++ sizes[0].data = self->flap.widget; ++ sizes[0].minimum_size = *flap_size; ++ sizes[0].natural_size = flap_nat; ++ ++ sizes[1].data = self->content.widget; ++ sizes[1].minimum_size = *content_size; ++ sizes[1].natural_size = content_nat; ++ ++ extra = gtk_distribute_natural_allocation (extra, 2, sizes); ++ ++ *flap_size = sizes[0].minimum_size; ++ *content_size = sizes[1].minimum_size + extra; ++ } ++ ++ if (!revealed) ++ *content_size = total; ++} ++ ++static inline void ++interpolate_reveal (GtkHdyFlap *self, ++ GtkAllocation *alloc, ++ gboolean folded, ++ gint *flap_size, ++ gint *content_size, ++ gint *separator_size) ++{ ++ if (self->reveal_progress <= 0) { ++ compute_sizes (self, alloc, folded, FALSE, flap_size, content_size, separator_size); ++ } else if (self->reveal_progress >= 1) { ++ compute_sizes (self, alloc, folded, TRUE, flap_size, content_size, separator_size); ++ } else { ++ gint flap_revealed, content_revealed, separator_revealed; ++ gint flap_hidden, content_hidden, separator_hidden; ++ ++ compute_sizes (self, alloc, folded, TRUE, &flap_revealed, &content_revealed, &separator_revealed); ++ compute_sizes (self, alloc, folded, FALSE, &flap_hidden, &content_hidden, &separator_hidden); ++ ++ *flap_size = ++ (gint) round (gtk_hdy_lerp (flap_hidden, flap_revealed, ++ self->reveal_progress)); ++ *content_size = ++ (gint) round (gtk_hdy_lerp (content_hidden, content_revealed, ++ self->reveal_progress)); ++ *separator_size = ++ (gint) round (gtk_hdy_lerp (separator_hidden, separator_revealed, ++ self->reveal_progress)); ++ } ++} ++ ++static inline void ++interpolate_fold (GtkHdyFlap *self, ++ GtkAllocation *alloc, ++ gint *flap_size, ++ gint *content_size, ++ gint *separator_size) ++{ ++ if (self->fold_progress <= 0) { ++ interpolate_reveal (self, alloc, FALSE, flap_size, content_size, separator_size); ++ } else if (self->fold_progress >= 1) { ++ interpolate_reveal (self, alloc, TRUE, flap_size, content_size, separator_size); ++ } else { ++ gint flap_folded, content_folded, separator_folded; ++ gint flap_unfolded, content_unfolded, separator_unfolded; ++ ++ interpolate_reveal (self, alloc, TRUE, &flap_folded, &content_folded, &separator_folded); ++ interpolate_reveal (self, alloc, FALSE, &flap_unfolded, &content_unfolded, &separator_unfolded); ++ ++ *flap_size = ++ (gint) round (gtk_hdy_lerp (flap_unfolded, flap_folded, ++ self->fold_progress)); ++ *content_size = ++ (gint) round (gtk_hdy_lerp (content_unfolded, content_folded, ++ self->fold_progress)); ++ *separator_size = ++ (gint) round (gtk_hdy_lerp (separator_unfolded, separator_folded, ++ self->fold_progress)); ++ } ++} ++ ++static void ++compute_allocation (GtkHdyFlap *self, ++ GtkAllocation *alloc, ++ GtkAllocation *flap_alloc, ++ GtkAllocation *content_alloc, ++ GtkAllocation *separator_alloc) ++{ ++ gdouble distance; ++ gint content_size, flap_size, separator_size; ++ gint total, content_pos, flap_pos, separator_pos; ++ gboolean content_above_flap = transition_is_content_above_flap (self); ++ ++ if (!self->flap.widget && !self->content.widget && !self->separator.widget) ++ return; ++ ++ content_alloc->x = 0; ++ content_alloc->y = 0; ++ flap_alloc->x = 0; ++ flap_alloc->y = 0; ++ separator_alloc->x = 0; ++ separator_alloc->y = 0; ++ ++ interpolate_fold (self, alloc, &flap_size, &content_size, &separator_size); ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) { ++ flap_alloc->width = flap_size; ++ content_alloc->width = content_size; ++ separator_alloc->width = separator_size; ++ flap_alloc->height = content_alloc->height = separator_alloc->height = alloc->height; ++ total = alloc->width; ++ } else { ++ flap_alloc->height = flap_size; ++ content_alloc->height = content_size; ++ separator_alloc->height = separator_size; ++ flap_alloc->width = content_alloc->width = separator_alloc->width = alloc->width; ++ total = alloc->height; ++ } ++ ++ if (!self->flap.widget) ++ return; ++ ++ if (content_above_flap) ++ distance = flap_size + separator_size; ++ else ++ distance = flap_size + separator_size * (1 - self->fold_progress); ++ ++ flap_pos = -(gint) round ((1 - self->reveal_progress) * transition_get_flap_motion_factor (self) * distance); ++ ++ if (content_above_flap) { ++ content_pos = (gint) round (self->reveal_progress * transition_get_content_motion_factor (self) * distance); ++ separator_pos = flap_pos + flap_size; ++ } else { ++ content_pos = total - content_size + (gint) round (self->reveal_progress * self->fold_progress * transition_get_content_motion_factor (self) * distance); ++ separator_pos = content_pos - separator_size; ++ } ++ ++ if (self->flap_position != get_start_or_end (self)) { ++ flap_pos = total - flap_pos - flap_size; ++ separator_pos = total - separator_pos - separator_size; ++ content_pos = total - content_pos - content_size; ++ } ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) { ++ content_alloc->x = content_pos; ++ flap_alloc->x = flap_pos; ++ separator_alloc->x = separator_pos; ++ } else { ++ content_alloc->y = content_pos; ++ flap_alloc->y = flap_pos; ++ separator_alloc->y = separator_pos; ++ } ++} ++ ++static inline void ++allocate_child (GtkHdyFlap *self, ++ ChildInfo *info, ++ gboolean expand_window) ++{ ++ GtkAllocation child_alloc; ++ ++ if (!info->widget) ++ return; ++ ++ if (gtk_widget_get_realized (GTK_WIDGET (self))) { ++ if (expand_window) ++ gdk_window_move_resize (info->window, ++ 0, 0, ++ gtk_widget_get_allocated_width (GTK_WIDGET (self)), ++ gtk_widget_get_allocated_height (GTK_WIDGET (self))); ++ else ++ gdk_window_move_resize (info->window, ++ info->allocation.x, ++ info->allocation.y, ++ info->allocation.width, ++ info->allocation.height); ++ } ++ ++ child_alloc.x = expand_window ? info->allocation.x : 0; ++ child_alloc.y = expand_window ? info->allocation.y : 0; ++ child_alloc.width = info->allocation.width; ++ child_alloc.height = info->allocation.height; ++ ++ gtk_widget_size_allocate (info->widget, &child_alloc); ++} ++ ++static void ++gtk_hdy_flap_size_allocate (GtkWidget *widget, ++ GtkAllocation *alloc) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (widget); ++ ++ gtk_widget_set_allocation (widget, alloc); ++ ++ if (gtk_widget_get_realized (widget)) ++ gdk_window_move_resize (gtk_widget_get_window (widget), ++ alloc->x, alloc->y, alloc->width, alloc->height); ++ ++ if (self->fold_policy == GTK_HDY_FLAP_FOLD_POLICY_AUTO) { ++ GtkRequisition flap_min = { 0, 0 }; ++ GtkRequisition content_min = { 0, 0 }; ++ GtkRequisition separator_min = { 0, 0 }; ++ ++ if (self->flap.widget) ++ gtk_widget_get_preferred_size (self->flap.widget, &flap_min, NULL); ++ if (self->content.widget) ++ gtk_widget_get_preferred_size (self->content.widget, &content_min, NULL); ++ if (self->separator.widget) ++ gtk_widget_get_preferred_size (self->separator.widget, &separator_min, NULL); ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) ++ set_folded (self, alloc->width < content_min.width + flap_min.width + separator_min.width); ++ else ++ set_folded (self, alloc->height < content_min.height + flap_min.height + separator_min.height); ++ } ++ ++ compute_allocation (self, ++ alloc, ++ &self->flap.allocation, ++ &self->content.allocation, ++ &self->separator.allocation); ++ ++ allocate_child (self, &self->content, FALSE); ++ allocate_child (self, &self->separator, FALSE); ++ allocate_child (self, &self->flap, ++ self->modal && ++ self->reveal_progress > 0 && ++ self->fold_progress > 0); ++ ++ gtk_widget_set_clip (widget, alloc); ++} ++ ++/* This private method is prefixed by the call name because it will be a virtual ++ * method in GTK 4. ++ */ ++static void ++gtk_hdy_flap_measure (GtkWidget *widget, ++ GtkOrientation orientation, ++ gint for_size, ++ gint *minimum, ++ gint *natural, ++ gint *minimum_baseline, ++ gint *natural_baseline) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (widget); ++ ++ gint content_min = 0, content_nat = 0; ++ gint flap_min = 0, flap_nat = 0; ++ gint separator_min = 0, separator_nat = 0; ++ gint min, nat; ++ ++ if (self->content.widget) ++ get_preferred_size (self->content.widget, orientation, &content_min, &content_nat); ++ ++ if (self->flap.widget) ++ get_preferred_size (self->flap.widget, orientation, &flap_min, &flap_nat); ++ ++ if (self->separator.widget) ++ get_preferred_size (self->separator.widget, orientation, &separator_min, &separator_nat); ++ ++ if (self->orientation == orientation) { ++ gdouble min_progress, nat_progress; ++ ++ switch (self->fold_policy) { ++ case GTK_HDY_FLAP_FOLD_POLICY_NEVER: ++ min_progress = (1 - self->fold_progress) * self->reveal_progress; ++ nat_progress = 1; ++ break; ++ ++ case GTK_HDY_FLAP_FOLD_POLICY_ALWAYS: ++ min_progress = 0; ++ nat_progress = 0; ++ break; ++ ++ case GTK_HDY_FLAP_FOLD_POLICY_AUTO: ++ min_progress = 0; ++ nat_progress = self->locked ? self->reveal_progress : 1; ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ } ++ ++ min = MAX (content_min + (gint) round ((flap_min + separator_min) * min_progress), flap_min); ++ nat = MAX (content_nat + (gint) round ((flap_nat + separator_min) * nat_progress), flap_nat); ++ } else { ++ min = MAX (MAX (content_min, flap_min), separator_min); ++ nat = MAX (MAX (content_nat, flap_nat), separator_nat); ++ } ++ ++ if (minimum) ++ *minimum = min; ++ if (natural) ++ *natural = nat; ++ if (minimum_baseline) ++ *minimum_baseline = -1; ++ if (natural_baseline) ++ *natural_baseline = -1; ++} ++ ++static void ++gtk_hdy_flap_get_preferred_width_for_height (GtkWidget *widget, ++ gint height, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_flap_measure (widget, GTK_ORIENTATION_HORIZONTAL, height, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_flap_get_preferred_width (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_flap_measure (widget, GTK_ORIENTATION_HORIZONTAL, -1, ++ minimum, natural, NULL, NULL); ++} ++ ++ ++static void ++gtk_hdy_flap_get_preferred_height_for_width (GtkWidget *widget, ++ gint width, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_flap_measure (widget, GTK_ORIENTATION_VERTICAL, width, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_flap_get_preferred_height (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_flap_measure (widget, GTK_ORIENTATION_VERTICAL, -1, ++ minimum, natural, NULL, NULL); ++} ++ ++static gboolean ++gtk_hdy_flap_draw (GtkWidget *widget, ++ cairo_t *cr) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (widget); ++ gint width, height; ++ gint shadow_x = 0, shadow_y = 0; ++ gdouble shadow_progress; ++ GtkPanDirection shadow_direction; ++ gboolean content_above_flap = transition_is_content_above_flap (self); ++ GtkAllocation *shadow_alloc; ++ gboolean should_clip; ++ ++ shadow_alloc = content_above_flap ? &self->content.allocation : &self->flap.allocation; ++ ++ width = gtk_widget_get_allocated_width (widget); ++ height = gtk_widget_get_allocated_height (widget); ++ ++ if (self->orientation == GTK_ORIENTATION_VERTICAL) { ++ if ((self->flap_position == GTK_PACK_START) != content_above_flap) { ++ shadow_direction = GTK_PAN_DIRECTION_UP; ++ shadow_y = shadow_alloc->y + shadow_alloc->height; ++ } else { ++ shadow_direction = GTK_PAN_DIRECTION_DOWN; ++ shadow_y = shadow_alloc->y - height; ++ } ++ } else { ++ if ((self->flap_position == get_start_or_end (self)) != content_above_flap) { ++ shadow_direction = GTK_PAN_DIRECTION_LEFT; ++ shadow_x = shadow_alloc->x + shadow_alloc->width; ++ } else { ++ shadow_direction = GTK_PAN_DIRECTION_RIGHT; ++ shadow_x = shadow_alloc->x - width; ++ } ++ } ++ ++ switch (self->transition_type) { ++ case GTK_HDY_FLAP_TRANSITION_TYPE_OVER: ++ shadow_progress = 1 - MIN (self->reveal_progress, self->fold_progress); ++ break; ++ ++ case GTK_HDY_FLAP_TRANSITION_TYPE_UNDER: ++ shadow_progress = self->reveal_progress; ++ break; ++ ++ case GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE: ++ shadow_progress = 1; ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ } ++ ++ should_clip = transition_should_clip (self) && ++ shadow_progress < 1 && ++ self->reveal_progress > 0; ++ ++ if (should_clip) { ++ cairo_save (cr); ++ cairo_rectangle (cr, shadow_x, shadow_y, width, height); ++ cairo_clip (cr); ++ } ++ ++ if (!content_above_flap) { ++ if (self->content.widget) ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->content.widget, ++ cr); ++ ++ if (self->separator.widget) ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->separator.widget, ++ cr); ++ ++ if (should_clip) ++ cairo_restore (cr); ++ } ++ ++ if (self->flap.widget) ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->flap.widget, ++ cr); ++ ++ if (content_above_flap) { ++ if (self->separator.widget) ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->separator.widget, ++ cr); ++ ++ if (should_clip) ++ cairo_restore (cr); ++ ++ if (self->content.widget) ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->content.widget, ++ cr); ++ } ++ ++ if (!self->flap.widget) ++ return GDK_EVENT_PROPAGATE; ++ ++ if (shadow_progress < 1 && gtk_widget_get_mapped (self->flap.widget)) { ++ cairo_save (cr); ++ cairo_translate (cr, shadow_x, shadow_y); ++ gtk_hdy_shadow_helper_draw_shadow (self->shadow_helper, cr, width, height, ++ shadow_progress, shadow_direction); ++ cairo_restore (cr); ++ } ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static void ++gtk_hdy_flap_realize (GtkWidget *widget) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (widget); ++ GtkAllocation allocation; ++ GdkWindowAttr attributes; ++ gint attributes_mask; ++ GdkWindow *window; ++ ++ gtk_widget_get_allocation (widget, &allocation); ++ gtk_widget_set_realized (widget, TRUE); ++ ++ attributes.x = allocation.x; ++ attributes.y = allocation.y; ++ attributes.width = allocation.width; ++ attributes.height = allocation.height; ++ attributes.window_type = GDK_WINDOW_CHILD; ++ attributes.event_mask = gtk_widget_get_events (widget); ++ attributes.visual = gtk_widget_get_visual (widget); ++ attributes.wclass = GDK_INPUT_OUTPUT; ++ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; ++ ++ window = gdk_window_new (gtk_widget_get_parent_window (widget), ++ &attributes, ++ attributes_mask); ++ gtk_widget_set_window (widget, window); ++ gtk_widget_register_window (widget, window); ++ ++ register_window (self, &self->content); ++ register_window (self, &self->separator); ++ register_window (self, &self->flap); ++ ++ restack_windows (self); ++} ++ ++static void ++gtk_hdy_flap_unrealize (GtkWidget *widget) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (widget); ++ ++ unregister_window (self, &self->content); ++ unregister_window (self, &self->separator); ++ unregister_window (self, &self->flap); ++ ++ GTK_WIDGET_CLASS (gtk_hdy_flap_parent_class)->unrealize (widget); ++} ++ ++static void ++gtk_hdy_flap_direction_changed (GtkWidget *widget, ++ GtkTextDirection previous_direction) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (widget); ++ ++ update_swipe_tracker (self); ++ ++ GTK_WIDGET_CLASS (gtk_hdy_flap_parent_class)->direction_changed (widget, ++ previous_direction); ++} ++ ++static void ++gtk_hdy_flap_forall (GtkContainer *container, ++ gboolean include_internals, ++ GtkCallback callback, ++ gpointer callback_data) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (container); ++ ++ if (self->content.widget) ++ callback (self->content.widget, callback_data); ++ ++ if (self->separator.widget) ++ callback (self->separator.widget, callback_data); ++ ++ if (self->flap.widget) ++ callback (self->flap.widget, callback_data); ++} ++ ++static void ++gtk_hdy_flap_add (GtkContainer *container, ++ GtkWidget *widget) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (container); ++ ++ if (self->content.widget) { ++ g_warning ("Attempting to add a widget with type %s to a %s, " ++ "but %s can only contain one widget at a time; " ++ "it already contains a widget of type %s", ++ g_type_name (G_OBJECT_TYPE (widget)), ++ g_type_name (G_OBJECT_TYPE (self)), ++ g_type_name (G_OBJECT_TYPE (self)), ++ g_type_name (G_OBJECT_TYPE (self->content.widget))); ++ ++ return; ++ } ++ ++ gtk_hdy_flap_set_content (self, widget); ++} ++ ++static void ++gtk_hdy_flap_remove (GtkContainer *container, ++ GtkWidget *widget) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (container); ++ ++ if (widget == self->flap.widget) ++ gtk_hdy_flap_set_flap (self, NULL); ++ else if (widget == self->separator.widget) ++ gtk_hdy_flap_set_separator (self, NULL); ++ else if (widget == self->content.widget) ++ gtk_hdy_flap_set_content (self, NULL); ++ else ++ g_return_if_reached (); ++} ++ ++static void ++gtk_hdy_flap_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (object); ++ ++ switch (prop_id) { ++ case PROP_CONTENT: ++ g_value_set_object (value, gtk_hdy_flap_get_content (self)); ++ break; ++ case PROP_FLAP: ++ g_value_set_object (value, gtk_hdy_flap_get_flap (self)); ++ break; ++ case PROP_SEPARATOR: ++ g_value_set_object (value, gtk_hdy_flap_get_separator (self)); ++ break; ++ case PROP_FLAP_POSITION: ++ g_value_set_enum (value, gtk_hdy_flap_get_flap_position (self)); ++ break; ++ case PROP_REVEAL_FLAP: ++ g_value_set_boolean (value, gtk_hdy_flap_get_reveal_flap (self)); ++ break; ++ case PROP_REVEAL_DURATION: ++ g_value_set_uint (value, gtk_hdy_flap_get_reveal_duration (self)); ++ break; ++ case PROP_REVEAL_PROGRESS: ++ g_value_set_double (value, gtk_hdy_flap_get_reveal_progress (self)); ++ break; ++ case PROP_FOLD_POLICY: ++ g_value_set_enum (value, gtk_hdy_flap_get_fold_policy (self)); ++ break; ++ case PROP_FOLD_DURATION: ++ g_value_set_uint (value, gtk_hdy_flap_get_fold_duration (self)); ++ break; ++ case PROP_FOLDED: ++ g_value_set_boolean (value, gtk_hdy_flap_get_folded (self)); ++ break; ++ case PROP_LOCKED: ++ g_value_set_boolean (value, gtk_hdy_flap_get_locked (self)); ++ break; ++ case PROP_TRANSITION_TYPE: ++ g_value_set_enum (value, gtk_hdy_flap_get_transition_type (self)); ++ break; ++ case PROP_MODAL: ++ g_value_set_boolean (value, gtk_hdy_flap_get_modal (self)); ++ break; ++ case PROP_SWIPE_TO_OPEN: ++ g_value_set_boolean (value, gtk_hdy_flap_get_swipe_to_open (self)); ++ break; ++ case PROP_SWIPE_TO_CLOSE: ++ g_value_set_boolean (value, gtk_hdy_flap_get_swipe_to_close (self)); ++ break; ++ case PROP_ORIENTATION: ++ g_value_set_enum (value, self->orientation); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_flap_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (object); ++ ++ switch (prop_id) { ++ case PROP_CONTENT: ++ gtk_hdy_flap_set_content (self, g_value_get_object (value)); ++ break; ++ case PROP_FLAP: ++ gtk_hdy_flap_set_flap (self, g_value_get_object (value)); ++ break; ++ case PROP_SEPARATOR: ++ gtk_hdy_flap_set_separator (self, g_value_get_object (value)); ++ break; ++ case PROP_FLAP_POSITION: ++ gtk_hdy_flap_set_flap_position (self, g_value_get_enum (value)); ++ break; ++ case PROP_REVEAL_FLAP: ++ gtk_hdy_flap_set_reveal_flap (self, g_value_get_boolean (value)); ++ break; ++ case PROP_REVEAL_DURATION: ++ gtk_hdy_flap_set_reveal_duration (self, g_value_get_uint (value)); ++ break; ++ case PROP_FOLD_POLICY: ++ gtk_hdy_flap_set_fold_policy (self, g_value_get_enum (value)); ++ break; ++ case PROP_FOLD_DURATION: ++ gtk_hdy_flap_set_fold_duration (self, g_value_get_uint (value)); ++ break; ++ case PROP_LOCKED: ++ gtk_hdy_flap_set_locked (self, g_value_get_boolean (value)); ++ break; ++ case PROP_TRANSITION_TYPE: ++ gtk_hdy_flap_set_transition_type (self, g_value_get_enum (value)); ++ break; ++ case PROP_MODAL: ++ gtk_hdy_flap_set_modal (self, g_value_get_boolean (value)); ++ break; ++ case PROP_SWIPE_TO_OPEN: ++ gtk_hdy_flap_set_swipe_to_open (self, g_value_get_boolean (value)); ++ break; ++ case PROP_SWIPE_TO_CLOSE: ++ gtk_hdy_flap_set_swipe_to_close (self, g_value_get_boolean (value)); ++ break; ++ case PROP_ORIENTATION: ++ set_orientation (self, g_value_get_enum (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_flap_dispose (GObject *object) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (object); ++ ++ g_clear_object (&self->shadow_helper); ++ g_clear_object (&self->tracker); ++ g_clear_object (&self->click_gesture); ++ g_clear_object (&self->key_controller); ++ ++ G_OBJECT_CLASS (gtk_hdy_flap_parent_class)->dispose (object); ++} ++ ++static void ++gtk_hdy_flap_class_init (GtkHdyFlapClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); ++ ++ object_class->get_property = gtk_hdy_flap_get_property; ++ object_class->set_property = gtk_hdy_flap_set_property; ++ object_class->dispose = gtk_hdy_flap_dispose; ++ ++ widget_class->get_preferred_width = gtk_hdy_flap_get_preferred_width; ++ widget_class->get_preferred_width_for_height = gtk_hdy_flap_get_preferred_width_for_height; ++ widget_class->get_preferred_height = gtk_hdy_flap_get_preferred_height; ++ widget_class->get_preferred_height_for_width = gtk_hdy_flap_get_preferred_height_for_width; ++ widget_class->size_allocate = gtk_hdy_flap_size_allocate; ++ widget_class->draw = gtk_hdy_flap_draw; ++ widget_class->realize = gtk_hdy_flap_realize; ++ widget_class->unrealize = gtk_hdy_flap_unrealize; ++ widget_class->direction_changed = gtk_hdy_flap_direction_changed; ++ ++ container_class->remove = gtk_hdy_flap_remove; ++ container_class->add = gtk_hdy_flap_add; ++ container_class->forall = gtk_hdy_flap_forall; ++ ++ /** ++ * GtkHdyFlap:content: ++ * ++ * The content widget, always displayed when unfolded, and partially visible ++ * when folded. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_CONTENT] = ++ g_param_spec_object ("content", ++ _("Content"), ++ _("The content Widget"), ++ GTK_TYPE_WIDGET, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:flap: ++ * ++ * The flap widget, only visible when #GtkHdyFlap:reveal-progress is greater than ++ * 0. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_FLAP] = ++ g_param_spec_object ("flap", ++ _("Flap"), ++ _("The flap widget"), ++ GTK_TYPE_WIDGET, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:separator: ++ * ++ * The separator widget, displayed between content and flap when there's no ++ * shadow to display. When exactly it's visible depends on the ++ * #GtkHdyFlap:transition-type value. If %NULL, no separator will be used. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_SEPARATOR] = ++ g_param_spec_object ("separator", ++ _("Separator"), ++ _("The separator widget"), ++ GTK_TYPE_WIDGET, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:flap-position: ++ * ++ * The flap position for @self. If @GTK_PACK_START, the flap is displayed ++ * before the content, if @GTK_PACK_END, it's displayed after the content. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_FLAP_POSITION] = ++ g_param_spec_enum ("flap-position", ++ _("Flap Position"), ++ _("The flap position"), ++ GTK_TYPE_PACK_TYPE, ++ GTK_PACK_START, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:reveal-flap: ++ * ++ * Whether the flap widget is revealed. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_REVEAL_FLAP] = ++ g_param_spec_boolean ("reveal-flap", ++ _("Reveal Flap"), ++ _("Whether the flap is revealed"), ++ TRUE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:reveal-duration: ++ * ++ * The reveal transition animation duration, in milliseconds. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_REVEAL_DURATION] = ++ g_param_spec_uint ("reveal-duration", ++ _("Reveal Duration"), ++ _("The reveal transition animation duration, in milliseconds"), ++ 0, G_MAXINT, ++ 250, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:reveal-progress: ++ * ++ * The current reveal transition progress. 0 means fully hidden, 1 means fully ++ * revealed See #GtkHdyFlap:reveal-flap. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_REVEAL_PROGRESS] = ++ g_param_spec_double ("reveal-progress", ++ _("Reveal Progress"), ++ _("The current reveal transition progress"), ++ 0.0, 1.0, 1.0, ++ G_PARAM_READABLE); ++ ++ /** ++ * GtkHdyFlap:fold-policy: ++ * ++ * The current fold policy. See #GtkHdyFlapFoldPolicy for available ++ * policies. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_FOLD_POLICY] = ++ g_param_spec_enum ("fold-policy", ++ _("Fold Policy"), ++ _("The current fold policy"), ++ GTK_TYPE_HDY_FLAP_FOLD_POLICY, ++ GTK_HDY_FLAP_FOLD_POLICY_AUTO, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:fold-duration: ++ * ++ * The fold transition animation duration, in milliseconds. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_FOLD_DURATION] = ++ g_param_spec_uint ("fold-duration", ++ _("Fold Duration"), ++ _("The fold transition animation duration, in milliseconds"), ++ 0, G_MAXINT, ++ 250, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:folded: ++ * ++ * Whether the flap is currently folded. ++ * ++ * See #GtkHdyFlap:fold-policy. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_FOLDED] = ++ g_param_spec_boolean ("folded", ++ _("Folded"), ++ _("Whether the flap is currently folded"), ++ FALSE, ++ G_PARAM_READABLE); ++ ++ /** ++ * GtkHdyFlap:locked: ++ * ++ * Whether the flap is locked. ++ * ++ * If %FALSE, folding when the flap is revealed automatically closes it, and ++ * unfolding it when the flap is not revealed opens it. If %TRUE, ++ * #GtkHdyFlap:reveal-flap value never changes on its own. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_LOCKED] = ++ g_param_spec_boolean ("locked", ++ _("Locked"), ++ _("Whether the flap is locked"), ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:transition-type: ++ * ++ * The type of animation that will be used for reveal and fold transitions ++ * in @self. ++ * ++ * #GtkHdyFlap:flap is transparent by default, which means the content will be ++ * seen through it with %HDY_FLAP_TRANSITION_TYPE_OVER transitions; add the ++ * .background style class to it if this is unwanted. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_TRANSITION_TYPE] = ++ g_param_spec_enum ("transition-type", ++ _("Transition Type"), ++ _("The type of animation used for reveal and fold transitions"), ++ GTK_TYPE_HDY_FLAP_TRANSITION_TYPE, ++ GTK_HDY_FLAP_TRANSITION_TYPE_OVER, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:modal: ++ * ++ * Whether the flap is modal. ++ * ++ * If %TRUE, clicking the content widget while flap is revealed, as well as ++ * pressing Escape key, will close the flap. If %FALSE, clicks are passed ++ * through to the content widget. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_MODAL] = ++ g_param_spec_boolean ("modal", ++ _("Modal"), ++ _("Whether the flap is modal"), ++ TRUE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:swipe-to-open: ++ * ++ * Whether the flap can be opened with a swipe gesture. ++ * ++ * The area that can be swiped depends on the #GtkHdyFlap:transition-type value. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_SWIPE_TO_OPEN] = ++ g_param_spec_boolean ("swipe-to-open", ++ _("Swipe to Open"), ++ _("Whether the flap can be opened with a swipe gesture"), ++ TRUE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyFlap:swipe-to-close: ++ * ++ * Whether the flap can be closed with a swipe gesture. ++ * ++ * The area that can be swiped depends on the #GtkHdyFlap:transition-type value. ++ * ++ * Since: 1.1 ++ */ ++ props[PROP_SWIPE_TO_CLOSE] = ++ g_param_spec_boolean ("swipe-to-close", ++ _("Swipe to Close"), ++ _("Whether the flap can be closed with a swipe gesture"), ++ TRUE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ g_object_class_override_property (object_class, ++ PROP_ORIENTATION, ++ "orientation"); ++ ++ gtk_widget_class_set_css_name (widget_class, "flap"); ++} ++ ++static void ++gtk_hdy_flap_init (GtkHdyFlap *self) ++{ ++ GtkStyleContext *context = gtk_widget_get_style_context (GTK_WIDGET (self)); ++ ++ gtk_widget_add_events (GTK_WIDGET (self), GDK_KEY_PRESS_MASK); ++ ++ self->orientation = GTK_ORIENTATION_HORIZONTAL; ++ self->flap_position = GTK_PACK_START; ++ self->fold_policy = GTK_HDY_FLAP_FOLD_POLICY_AUTO; ++ self->transition_type = GTK_HDY_FLAP_TRANSITION_TYPE_OVER; ++ self->reveal_flap = TRUE; ++ self->locked = FALSE; ++ self->reveal_progress = 1; ++ self->folded = FALSE; ++ self->fold_progress = 0; ++ self->fold_duration = 250; ++ self->reveal_duration = 250; ++ self->modal = TRUE; ++ self->swipe_to_open = TRUE; ++ self->swipe_to_close = TRUE; ++ ++ self->shadow_helper = gtk_hdy_shadow_helper_new (GTK_WIDGET (self)); ++ self->tracker = gtk_hdy_swipe_tracker_new (GTK_HDY_SWIPEABLE (self)); ++ gtk_hdy_swipe_tracker_set_enabled (self->tracker, FALSE); ++ ++ g_signal_connect_object (self->tracker, "begin-swipe", G_CALLBACK (begin_swipe_cb), self, 0); ++ g_signal_connect_object (self->tracker, "update-swipe", G_CALLBACK (update_swipe_cb), self, 0); ++ g_signal_connect_object (self->tracker, "end-swipe", G_CALLBACK (end_swipe_cb), self, 0); ++ ++ update_swipe_tracker (self); ++ ++ self->click_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (self)); ++ gtk_gesture_single_set_exclusive (GTK_GESTURE_SINGLE (self->click_gesture), TRUE); ++ gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (self->click_gesture), GDK_BUTTON_PRIMARY); ++ gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->click_gesture), ++ GTK_PHASE_CAPTURE); ++ g_signal_connect_object (self->click_gesture, "released", G_CALLBACK (released_cb), self, 0); ++ ++ self->key_controller = gtk_event_controller_key_new (GTK_WIDGET (self)); ++ gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->key_controller), ++ GTK_PHASE_BUBBLE); ++ g_signal_connect_object (self->key_controller, "key-pressed", G_CALLBACK (key_pressed_cb), self, 0); ++ ++ gtk_style_context_add_class (context, "unfolded"); ++} ++ ++static void ++gtk_hdy_flap_add_child (GtkBuildable *buildable, ++ GtkBuilder *builder, ++ GObject *child, ++ const gchar *type) ++{ ++ if (!type || !g_strcmp0 (type, "content")) ++ gtk_hdy_flap_set_content (GTK_HDY_FLAP (buildable), GTK_WIDGET (child)); ++ else if (!g_strcmp0 (type, "flap")) ++ gtk_hdy_flap_set_flap (GTK_HDY_FLAP (buildable), GTK_WIDGET (child)); ++ else if (!g_strcmp0 (type, "separator")) ++ gtk_hdy_flap_set_separator (GTK_HDY_FLAP (buildable), GTK_WIDGET (child)); ++ else ++ GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type); ++} ++ ++static void ++gtk_hdy_flap_buildable_init (GtkBuildableIface *iface) ++{ ++ iface->add_child = gtk_hdy_flap_add_child; ++} ++ ++static void ++gtk_hdy_flap_switch_child (GtkHdySwipeable *swipeable, ++ guint index, ++ gint64 duration) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ ++ set_reveal_flap (self, index > 0, duration, FALSE); ++} ++ ++static GtkHdySwipeTracker * ++gtk_hdy_flap_get_swipe_tracker (GtkHdySwipeable *swipeable) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ ++ return self->tracker; ++} ++ ++static gdouble ++gtk_hdy_flap_get_distance (GtkHdySwipeable *swipeable) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ gint flap, separator; ++ ++ if (!self->flap.widget) ++ return 0; ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) { ++ flap = self->flap.allocation.width; ++ separator = self->separator.allocation.width; ++ } else { ++ flap = self->flap.allocation.height; ++ separator = self->separator.allocation.height; ++ } ++ ++ if (transition_is_content_above_flap (self)) ++ return flap + separator; ++ ++ return flap + separator * (1 - self->fold_progress); ++} ++ ++static gdouble * ++gtk_hdy_flap_get_snap_points (GtkHdySwipeable *swipeable, ++ gint *n_snap_points) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ gboolean can_open = self->reveal_progress > 0 || self->swipe_to_open || self->swipe_active; ++ gboolean can_close = self->reveal_progress < 1 || self->swipe_to_close || self->swipe_active; ++ gdouble *points; ++ ++ if (!can_open && !can_close) ++ return NULL; ++ ++ if (can_open && can_close) { ++ points = g_new0 (gdouble, 2); ++ ++ if (n_snap_points) ++ *n_snap_points = 2; ++ ++ points[0] = 0; ++ points[1] = 1; ++ ++ return points; ++ } ++ ++ points = g_new0 (gdouble, 1); ++ ++ if (n_snap_points) ++ *n_snap_points = 1; ++ ++ points[0] = can_open ? 1 : 0; ++ ++ return points; ++} ++ ++static gdouble ++gtk_hdy_flap_get_progress (GtkHdySwipeable *swipeable) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ ++ return self->reveal_progress; ++} ++ ++static gdouble ++gtk_hdy_flap_get_cancel_progress (GtkHdySwipeable *swipeable) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ ++ return round (self->reveal_progress); ++} ++ ++static void ++gtk_hdy_flap_get_swipe_area (GtkHdySwipeable *swipeable, ++ GtkHdyNavigationDirection navigation_direction, ++ gboolean is_drag, ++ GdkRectangle *rect) ++{ ++ GtkHdyFlap *self = GTK_HDY_FLAP (swipeable); ++ GtkAllocation *alloc; ++ gint width, height; ++ gdouble flap_factor, content_factor; ++ gboolean content_above_flap; ++ ++ if (!self->flap.widget) { ++ rect->x = 0; ++ rect->y = 0; ++ rect->width = 0; ++ rect->height = 0; ++ ++ return; ++ } ++ ++ width = gtk_widget_get_allocated_width (GTK_WIDGET (self)); ++ height = gtk_widget_get_allocated_height (GTK_WIDGET (self)); ++ ++ content_above_flap = transition_is_content_above_flap (self); ++ flap_factor = transition_get_flap_motion_factor (self); ++ content_factor = transition_get_content_motion_factor (self); ++ ++ if (!is_drag || ++ (flap_factor >= 1 && content_factor >= 1) || ++ (self->fold_progress < 1 && flap_factor > 0)) { ++ rect->x = 0; ++ rect->y = 0; ++ rect->width = width; ++ rect->height = height; ++ ++ return; ++ } ++ ++ alloc = content_above_flap ++ ? &self->content.allocation ++ : &self->flap.allocation; ++ ++ if (self->orientation == GTK_ORIENTATION_HORIZONTAL) { ++ if (alloc->x <= 0) { ++ rect->x = 0; ++ rect->width = MAX (alloc->width + alloc->x, GTK_HDY_SWIPE_BORDER); ++ } else if (alloc->x + alloc->width >= width) { ++ rect->width = MAX (width - alloc->x, GTK_HDY_SWIPE_BORDER); ++ rect->x = width - rect->width; ++ } else { ++ g_assert_not_reached (); ++ } ++ ++ rect->y = alloc->y; ++ rect->height = alloc->height; ++ } else { ++ if (alloc->y <= 0) { ++ rect->y = 0; ++ rect->height = MAX (alloc->height + alloc->y, GTK_HDY_SWIPE_BORDER); ++ } else if (alloc->y + alloc->height >= height) { ++ rect->height = MAX (height - alloc->y, GTK_HDY_SWIPE_BORDER); ++ rect->y = height - rect->height; ++ } else { ++ g_assert_not_reached (); ++ } ++ ++ rect->x = alloc->x; ++ rect->width = alloc->width; ++ } ++} ++ ++static void ++gtk_hdy_flap_swipeable_init (GtkHdySwipeableInterface *iface) ++{ ++ iface->switch_child = gtk_hdy_flap_switch_child; ++ iface->get_swipe_tracker = gtk_hdy_flap_get_swipe_tracker; ++ iface->get_distance = gtk_hdy_flap_get_distance; ++ iface->get_snap_points = gtk_hdy_flap_get_snap_points; ++ iface->get_progress = gtk_hdy_flap_get_progress; ++ iface->get_cancel_progress = gtk_hdy_flap_get_cancel_progress; ++ iface->get_swipe_area = gtk_hdy_flap_get_swipe_area; ++} ++ ++/** ++ * gtk_hdy_flap_new: ++ * ++ * Creates a new #GtkHdyFlap. ++ * ++ * Returns: a new #GtkHdyFlap ++ * ++ * Since: 1.1 ++ */ ++GtkWidget * ++gtk_hdy_flap_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_FLAP, NULL); ++} ++ ++/** ++ * gtk_hdy_flap_get_content: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the content widget for @self ++ * ++ * Returns: (transfer none) (nullable): the content widget for @self ++ * ++ * Since: 1.1 ++ */ ++GtkWidget * ++gtk_hdy_flap_get_content (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), NULL); ++ ++ return self->content.widget; ++} ++ ++/** ++ * gtk_hdy_flap_set_content: ++ * @self: a #GtkHdyFlap ++ * @content: (nullable): the content widget, or %NULL ++ * ++ * Sets the content widget for @self, always displayed when unfolded, and ++ * partially visible when folded. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_content (GtkHdyFlap *self, ++ GtkWidget *content) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ g_return_if_fail (GTK_IS_WIDGET (content) || content == NULL); ++ ++ if (self->content.widget == content) ++ return; ++ ++ if (self->content.widget) ++ remove_child (self, &self->content); ++ ++ self->content.widget = content; ++ ++ if (self->content.widget) ++ add_child (self, &self->content); ++ ++ update_child_visibility (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CONTENT]); ++} ++ ++/** ++ * gtk_hdy_flap_get_flap: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the flap widget for @self ++ * ++ * Returns: (transfer none) (nullable): the flap widget for @self ++ * ++ * Since: 1.1 ++ */ ++GtkWidget * ++gtk_hdy_flap_get_flap (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), NULL); ++ ++ return self->flap.widget; ++} ++ ++/** ++ * gtk_hdy_flap_set_flap: ++ * @self: a #GtkHdyFlap ++ * @flap: (nullable): the flap widget, or %NULL ++ * ++ * Sets the flap widget for @self, only visible when #GtkHdyFlap:reveal-progress is ++ * greater than 0. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_flap (GtkHdyFlap *self, ++ GtkWidget *flap) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ g_return_if_fail (GTK_IS_WIDGET (flap) || flap == NULL); ++ ++ if (self->flap.widget == flap) ++ return; ++ ++ if (self->flap.widget) ++ remove_child (self, &self->flap); ++ ++ self->flap.widget = flap; ++ ++ if (self->flap.widget) ++ add_child (self, &self->flap); ++ ++ update_swipe_tracker (self); ++ update_child_visibility (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FLAP]); ++} ++ ++/** ++ * gtk_hdy_flap_get_separator: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the separator widget for @self. ++ * ++ * Returns: (transfer none) (nullable): the separator widget for @self ++ * ++ * Since: 1.1 ++ */ ++GtkWidget * ++gtk_hdy_flap_get_separator (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), NULL); ++ ++ return self->separator.widget; ++} ++ ++/** ++ * gtk_hdy_flap_set_separator: ++ * @self: a #GtkHdyFlap ++ * @separator: (nullable): the separator widget, or %NULL ++ * ++ * Sets the separator widget for @self, displayed between content and flap when ++ * there's no shadow to display. When exactly it's visible depends on the ++ * #GtkHdyFlap:transition-type value. If %NULL, no separator will be used. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_separator (GtkHdyFlap *self, ++ GtkWidget *separator) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ g_return_if_fail (GTK_IS_WIDGET (separator) || separator == NULL); ++ ++ if (self->separator.widget == separator) ++ return; ++ ++ if (self->separator.widget) ++ remove_child (self, &self->separator); ++ ++ self->separator.widget = separator; ++ ++ if (self->separator.widget) ++ add_child (self, &self->separator); ++ ++ update_child_visibility (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SEPARATOR]); ++} ++ ++/** ++ * gtk_hdy_flap_get_flap_position: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the flap position for @self. ++ * ++ * Returns: the flap position for @self ++ * ++ * Since: 1.1 ++ */ ++GtkPackType ++gtk_hdy_flap_get_flap_position (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), GTK_PACK_START); ++ ++ return self->flap_position; ++} ++ ++/** ++ * gtk_hdy_flap_set_flap_position: ++ * @self: a #GtkHdyFlap ++ * @position: the new value ++ * ++ * Sets the flap position for @self. If @GTK_PACK_START, the flap is displayed ++ * before the content, if @GTK_PACK_END, it's displayed after the content. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_flap_position (GtkHdyFlap *self, ++ GtkPackType position) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ g_return_if_fail (position <= GTK_PACK_END); ++ ++ if (self->flap_position == position) ++ return; ++ ++ self->flap_position = position; ++ ++ gtk_widget_queue_allocate (GTK_WIDGET (self)); ++ gtk_hdy_shadow_helper_clear_cache (self->shadow_helper); ++ update_swipe_tracker (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FLAP_POSITION]); ++} ++ ++/** ++ * gtk_hdy_flap_get_reveal_flap: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets whether the flap widget is revealed for @self. ++ * ++ * Returns: %TRUE if the flap widget is revealed, %FALSE otherwise. ++ * ++ * Since: 1.1 ++ */ ++gboolean ++gtk_hdy_flap_get_reveal_flap (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), FALSE); ++ ++ return self->reveal_flap; ++} ++ ++/** ++ * gtk_hdy_flap_set_reveal_flap: ++ * @self: a #GtkHdyFlap ++ * @reveal_flap: %TRUE to reveal the flap widget, %FALSE otherwise ++ * ++ * Sets whether the flap widget is revealed for @self. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_reveal_flap (GtkHdyFlap *self, ++ gboolean reveal_flap) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ set_reveal_flap (self, reveal_flap, self->reveal_duration, TRUE); ++} ++ ++/** ++ * gtk_hdy_flap_get_reveal_duration: ++ * @self: a #GtkHdyFlap ++ * ++ * Returns the amount of time (in milliseconds) that reveal transitions in @self ++ * will take. ++ * ++ * Returns: the reveal transition duration ++ * ++ * Since: 1.1 ++ */ ++guint ++gtk_hdy_flap_get_reveal_duration (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), 0); ++ ++ return self->reveal_duration; ++} ++ ++/** ++ * gtk_hdy_flap_set_reveal_duration: ++ * @self: a #GtkHdyFlap ++ * @duration: the new duration, in milliseconds ++ * ++ * Sets the duration that reveal transitions in @self will take. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_reveal_duration (GtkHdyFlap *self, ++ guint duration) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ if (self->reveal_duration == duration) ++ return; ++ ++ self->reveal_duration = duration; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL_DURATION]); ++} ++ ++/** ++ * gtk_hdy_flap_get_reveal_progress: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the current reveal transition progress for @self. 0 means fully hidden, ++ * 1 means fully revealed. See #GtkHdyFlap:reveal-flap. ++ * ++ * Returns: the current reveal progress for @self ++ * ++ * Since: 1.1 ++ */ ++gdouble ++gtk_hdy_flap_get_reveal_progress (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), 0.0); ++ ++ return self->reveal_progress; ++} ++ ++/** ++ * gtk_hdy_flap_get_fold_policy: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the current fold policy of @self. See gtk_hdy_flap_set_fold_policy(). ++ * ++ * Returns: the current fold policy of @self ++ * ++ * Since: 1.1 ++ */ ++GtkHdyFlapFoldPolicy ++gtk_hdy_flap_get_fold_policy (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), GTK_HDY_FLAP_FOLD_POLICY_NEVER); ++ ++ return self->fold_policy; ++} ++ ++/** ++ * gtk_hdy_flap_set_fold_policy: ++ * @self: a #GtkHdyFlap ++ * @policy: Fold policy ++ * ++ * Sets the current fold policy for @self. See #GtkHdyFlapFoldPolicy for available ++ * policies. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_fold_policy (GtkHdyFlap *self, ++ GtkHdyFlapFoldPolicy policy) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ g_return_if_fail (policy <= GTK_HDY_FLAP_FOLD_POLICY_AUTO); ++ ++ if (self->fold_policy == policy) ++ return; ++ ++ self->fold_policy = policy; ++ ++ switch (self->fold_policy) { ++ case GTK_HDY_FLAP_FOLD_POLICY_NEVER: ++ set_folded (self, FALSE); ++ break; ++ ++ case GTK_HDY_FLAP_FOLD_POLICY_ALWAYS: ++ set_folded (self, TRUE); ++ break; ++ ++ case GTK_HDY_FLAP_FOLD_POLICY_AUTO: ++ gtk_widget_queue_allocate (GTK_WIDGET (self)); ++ break; ++ ++ default: ++ g_assert_not_reached (); ++ } ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLD_POLICY]); ++} ++ ++/** ++ * gtk_hdy_flap_get_fold_duration: ++ * @self: a #GtkHdyFlap ++ * ++ * Returns the amount of time (in milliseconds) that fold transitions in @self ++ * will take. ++ * ++ * Returns: the fold transition duration ++ * ++ * Since: 1.1 ++ */ ++guint ++gtk_hdy_flap_get_fold_duration (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), 0); ++ ++ return self->fold_duration; ++} ++ ++/** ++ * gtk_hdy_flap_set_fold_duration: ++ * @self: a #GtkHdyFlap ++ * @duration: the new duration, in milliseconds ++ * ++ * Sets the duration that fold transitions in @self will take. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_fold_duration (GtkHdyFlap *self, ++ guint duration) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ if (self->fold_duration == duration) ++ return; ++ ++ self->fold_duration = duration; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_FOLD_DURATION]); ++} ++ ++/** ++ * gtk_hdy_flap_get_folded: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets whether @self is currently folded. ++ * ++ * See #GtkHdyFlap:fold-policy. ++ * ++ * Returns: %TRUE if @self is currently folded, %FALSE otherwise ++ * ++ * Since: 1.1 ++ */ ++gboolean ++gtk_hdy_flap_get_folded (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), FALSE); ++ ++ return self->folded; ++} ++ ++/** ++ * gtk_hdy_flap_get_locked: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets whether @self is locked. ++ * ++ * Returns: %TRUE if @self is locked, %FALSE otherwise ++ * ++ * Since: 1.1 ++ */ ++gboolean ++gtk_hdy_flap_get_locked (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), FALSE); ++ ++ return self->locked; ++} ++ ++/** ++ * gtk_hdy_flap_set_locked: ++ * @self: a #GtkHdyFlap ++ * @locked: the new value ++ * ++ * Sets whether @self is locked. ++ * ++ * If %FALSE, folding @self when the flap is revealed automatically closes it, ++ * and unfolding it when the flap is not revealed opens it. If %TRUE, ++ * #GtkHdyFlap:reveal-flap value never changes on its own. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_locked (GtkHdyFlap *self, ++ gboolean locked) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ locked = !!locked; ++ ++ if (self->locked == locked) ++ return; ++ ++ self->locked = locked; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_LOCKED]); ++} ++ ++/** ++ * gtk_hdy_flap_get_transition_type: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets the type of animation that will be used for reveal and fold transitions ++ * in @self. ++ * ++ * Returns: the current transition type of @self ++ * ++ * Since: 1.1 ++ */ ++GtkHdyFlapTransitionType ++gtk_hdy_flap_get_transition_type (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), GTK_HDY_FLAP_TRANSITION_TYPE_OVER); ++ ++ return self->transition_type; ++} ++ ++/** ++ * gtk_hdy_flap_set_transition_type: ++ * @self: a #GtkHdyFlap ++ * @transition_type: the new transition type ++ * ++ * Sets the type of animation that will be used for reveal and fold transitions ++ * in @self. ++ * ++ * #GtkHdyFlap:flap is transparent by default, which means the content will be seen ++ * through it with %HDY_FLAP_TRANSITION_TYPE_OVER transitions; add the ++ * .background style class to it if this is unwanted. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_transition_type (GtkHdyFlap *self, ++ GtkHdyFlapTransitionType transition_type) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ g_return_if_fail (transition_type <= GTK_HDY_FLAP_TRANSITION_TYPE_SLIDE); ++ ++ if (self->transition_type == transition_type) ++ return; ++ ++ self->transition_type = transition_type; ++ ++ restack_windows (self); ++ ++ if (self->reveal_progress > 0 || (self->fold_progress > 0 && self->fold_progress < 1)) ++ gtk_widget_queue_allocate (GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_TYPE]); ++} ++ ++/** ++ * gtk_hdy_flap_get_modal: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets whether the @self is modal. See gtk_hdy_flap_set_modal(). ++ * ++ * Returns: %TRUE if @self is modal ++ * ++ * Since: 1.1 ++ */ ++gboolean ++gtk_hdy_flap_get_modal (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), FALSE); ++ ++ return self->modal; ++} ++ ++/** ++ * gtk_hdy_flap_set_modal: ++ * @self: a #GtkHdyFlap ++ * @modal: Whether @self can be closed with a click ++ * ++ * Sets whether the @self can be closed with a click. ++ * ++ * If @modal is %TRUE, clicking the content widget while flap is revealed, or ++ * pressing Escape key, will close the flap. If %FALSE, clicks are passed ++ * through to the content widget. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_modal (GtkHdyFlap *self, ++ gboolean modal) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ modal = !!modal; ++ ++ if (self->modal == modal) ++ return; ++ ++ self->modal = modal; ++ ++ gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->click_gesture), ++ modal ? GTK_PHASE_CAPTURE : GTK_PHASE_NONE); ++ gtk_event_controller_set_propagation_phase (self->key_controller, ++ modal ? GTK_PHASE_BUBBLE : GTK_PHASE_NONE); ++ ++ gtk_widget_queue_allocate (GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_MODAL]); ++} ++ ++/** ++ * gtk_hdy_flap_get_swipe_to_open: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets whether @self can be opened with a swipe gesture. ++ * ++ * Returns: %TRUE if @self can be opened with a swipe gesture ++ * ++ * Since: 1.1 ++ */ ++gboolean ++gtk_hdy_flap_get_swipe_to_open (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), FALSE); ++ ++ return self->swipe_to_open; ++} ++ ++/** ++ * gtk_hdy_flap_set_swipe_to_open: ++ * @self: a #GtkHdyFlap ++ * @swipe_to_open: Whether @self can be opened with a swipe gesture ++ * ++ * Sets whether @self can be opened with a swipe gesture. ++ * ++ * The area that can be swiped depends on the #GtkHdyFlap:transition-type value. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_swipe_to_open (GtkHdyFlap *self, ++ gboolean swipe_to_open) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ swipe_to_open = !!swipe_to_open; ++ ++ if (self->swipe_to_open == swipe_to_open) ++ return; ++ ++ self->swipe_to_open = swipe_to_open; ++ ++ update_swipe_tracker (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SWIPE_TO_OPEN]); ++} ++ ++/** ++ * gtk_hdy_flap_get_swipe_to_close: ++ * @self: a #GtkHdyFlap ++ * ++ * Gets whether @self can be closed with a swipe gesture. ++ * ++ * Returns: %TRUE if @self can be closed with a swipe gesture ++ * ++ * Since: 1.1 ++ */ ++gboolean ++gtk_hdy_flap_get_swipe_to_close (GtkHdyFlap *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_FLAP (self), FALSE); ++ ++ return self->swipe_to_close; ++} ++ ++/** ++ * gtk_hdy_flap_set_swipe_to_close: ++ * @self: a #GtkHdyFlap ++ * @swipe_to_close: Whether @self can be closed with a swipe gesture ++ * ++ * Sets whether @self can be closed with a swipe gesture. ++ * ++ * The area that can be swiped depends on the #GtkHdyFlap:transition-type value. ++ * ++ * Since: 1.1 ++ */ ++void ++gtk_hdy_flap_set_swipe_to_close (GtkHdyFlap *self, ++ gboolean swipe_to_close) ++{ ++ g_return_if_fail (GTK_IS_HDY_FLAP (self)); ++ ++ swipe_to_close = !!swipe_to_close; ++ ++ if (self->swipe_to_close == swipe_to_close) ++ return; ++ ++ self->swipe_to_close = swipe_to_close; ++ ++ update_swipe_tracker (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SWIPE_TO_CLOSE]); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index c66ad0c..40feabc 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -386,6 +386,7 @@ gtk_sources = files( + 'hdy-animation.c', + 'hdy-clamp.c', + 'hdy-css.c', ++ 'hdy-flap.c', + 'hdy-navigation-direction.c', + 'hdy-shadow-helper.c', + 'hdy-squeezer.c', +@@ -406,6 +407,7 @@ gtk_private_type_headers = files( + 'hdy-cairo-private.h', + 'hdy-clamp-private.h', + 'hdy-css-private.h', ++ 'hdy-flap-private.h', + 'hdy-navigation-direction-private.h', + 'hdy-shadow-helper-private.h', + 'hdy-squeezer-private.h', diff --git a/gtk3-mobile/Add-GtkHdyNavigationDirection.patch b/gtk3-mobile/Add-GtkHdyNavigationDirection.patch new file mode 100644 index 0000000..40204cf --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyNavigationDirection.patch @@ -0,0 +1,106 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 14 Oct 2020 16:29:45 +0500 +Subject: Add GtkHdyNavigationDirection + +This is imported from HdyNavigationDirection from libhandy 1.0.0. +--- + gtk/gtkprivate.h | 1 + + gtk/hdy-navigation-direction-private.h | 22 ++++++++++++++++++++++ + gtk/hdy-navigation-direction.c | 26 ++++++++++++++++++++++++++ + gtk/meson.build | 2 ++ + 4 files changed, 51 insertions(+) + create mode 100644 gtk/hdy-navigation-direction-private.h + create mode 100644 gtk/hdy-navigation-direction.c + +diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h +index 68f0f8d..8c6eded 100644 +--- a/gtk/gtkprivate.h ++++ b/gtk/gtkprivate.h +@@ -30,6 +30,7 @@ + + #include "gtkcsstypesprivate.h" + #include "gtktexthandleprivate.h" ++#include "hdy-navigation-direction-private.h" + #include "hdy-squeezer-private.h" + #include "hdy-view-switcher-private.h" + +diff --git a/gtk/hdy-navigation-direction-private.h b/gtk/hdy-navigation-direction-private.h +new file mode 100644 +index 0000000..2f2f184 +--- /dev/null ++++ b/gtk/hdy-navigation-direction-private.h +@@ -0,0 +1,22 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include <glib.h> ++ ++G_BEGIN_DECLS ++ ++typedef enum { ++ GTK_HDY_NAVIGATION_DIRECTION_BACK, ++ GTK_HDY_NAVIGATION_DIRECTION_FORWARD, ++} GtkHdyNavigationDirection; ++ ++G_END_DECLS +diff --git a/gtk/hdy-navigation-direction.c b/gtk/hdy-navigation-direction.c +new file mode 100644 +index 0000000..35b9ab4 +--- /dev/null ++++ b/gtk/hdy-navigation-direction.c +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include "hdy-navigation-direction-private.h" ++ ++/** ++ * SECTION:gtk-hdy-navigation-direction ++ * @short_description: Swipe navigation directions. ++ * @title: GtkHdyNavigationDirection ++ * @See_also: #GtkHdyDeck, #GtkHdyLeaflet ++ */ ++ ++/** ++ * GtkHdyNavigationDirection: ++ * @GTK_HDY_NAVIGATION_DIRECTION_BACK: Corresponds to start or top, depending on orientation and text direction ++ * @GTK_HDY_NAVIGATION_DIRECTION_FORWARD: Corresponds to end or bottom, depending on orientation and text direction ++ * ++ * Represents direction of a swipe navigation gesture in #GtkHdyDeck and ++ * #GtkHdyLeaflet. ++ * ++ * Since: 1.0 ++ */ +diff --git a/gtk/meson.build b/gtk/meson.build +index ae3dc94..7407f5b 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -385,6 +385,7 @@ gtk_sources = files( + 'gdkpixbufutils.c', + 'hdy-animation.c', + 'hdy-css.c', ++ 'hdy-navigation-direction.c', + 'hdy-shadow-helper.c', + 'hdy-squeezer.c', + 'hdy-view-switcher-bar.c', +@@ -401,6 +402,7 @@ gtk_private_type_headers = files( + 'hdy-animation-private.h', + 'hdy-cairo-private.h', + 'hdy-css-private.h', ++ 'hdy-navigation-direction-private.h', + 'hdy-shadow-helper-private.h', + 'hdy-squeezer-private.h', + 'hdy-view-switcher-bar-private.h', diff --git a/gtk3-mobile/Add-GtkHdyShadowHelper.patch b/gtk3-mobile/Add-GtkHdyShadowHelper.patch new file mode 100644 index 0000000..611cb21 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyShadowHelper.patch @@ -0,0 +1,535 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 14 Oct 2020 16:05:39 +0500 +Subject: Add GtkHdyShadowHelper + +This is imported from HdyShadowHelper from libhandy 1.0.2. +--- + gtk/hdy-shadow-helper-private.h | 37 ++++ + gtk/hdy-shadow-helper.c | 453 ++++++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + 3 files changed, 492 insertions(+) + create mode 100644 gtk/hdy-shadow-helper-private.h + create mode 100644 gtk/hdy-shadow-helper.c + +diff --git a/gtk/hdy-shadow-helper-private.h b/gtk/hdy-shadow-helper-private.h +new file mode 100644 +index 0000000..1b34ddb +--- /dev/null ++++ b/gtk/hdy-shadow-helper-private.h +@@ -0,0 +1,37 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkenums.h" ++#include "gtkwidget.h" ++#include "gtkwidgetpath.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_HDY_TYPE_SHADOW_HELPER (gtk_hdy_shadow_helper_get_type()) ++ ++G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkStyleContext, g_object_unref) ++G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkWidgetPath, gtk_widget_path_unref) ++ ++G_DECLARE_FINAL_TYPE (GtkHdyShadowHelper, gtk_hdy_shadow_helper, GTK, HDY_SHADOW_HELPER, GObject) ++ ++GtkHdyShadowHelper * gtk_hdy_shadow_helper_new (GtkWidget *widget); ++ ++void gtk_hdy_shadow_helper_clear_cache (GtkHdyShadowHelper *self); ++ ++void gtk_hdy_shadow_helper_draw_shadow (GtkHdyShadowHelper *self, ++ cairo_t *cr, ++ gint width, ++ gint height, ++ gdouble progress, ++ GtkPanDirection direction); ++ ++G_END_DECLS +diff --git a/gtk/hdy-shadow-helper.c b/gtk/hdy-shadow-helper.c +new file mode 100644 +index 0000000..69583c4 +--- /dev/null ++++ b/gtk/hdy-shadow-helper.c +@@ -0,0 +1,453 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "hdy-shadow-helper-private.h" ++ ++#include "gtkrender.h" ++#include "gtkstylecontext.h" ++#include "gtktypebuiltins.h" ++#include "gtkwidgetpath.h" ++#include "hdy-cairo-private.h" ++ ++#include <math.h> ++ ++/** ++ * PRIVATE:gtk-hdy-shadow-helper ++ * @short_description: Shadow helper used in #GtkHdyLeaflet ++ * @title: GtkHdyShadowHelper ++ * @See_also: #GtkHdyLeaflet ++ * @stability: Private ++ * ++ * A helper class for drawing #GtkHdyLeaflet transition shadow. ++ * ++ * Since: 0.0.12 ++ */ ++ ++struct _GtkHdyShadowHelper ++{ ++ GObject parent_instance; ++ ++ GtkWidget *widget; ++ ++ gboolean is_cache_valid; ++ ++ cairo_pattern_t *dimming_pattern; ++ cairo_pattern_t *shadow_pattern; ++ cairo_pattern_t *border_pattern; ++ cairo_pattern_t *outline_pattern; ++ gint shadow_size; ++ gint border_size; ++ gint outline_size; ++ ++ GtkPanDirection last_direction; ++ gint last_width; ++ gint last_height; ++ gint last_scale; ++}; ++ ++G_DEFINE_TYPE (GtkHdyShadowHelper, gtk_hdy_shadow_helper, G_TYPE_OBJECT); ++ ++enum { ++ PROP_0, ++ PROP_WIDGET, ++ LAST_PROP, ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++ ++static GtkStyleContext * ++create_context (GtkHdyShadowHelper *self, ++ const gchar *name, ++ GtkPanDirection direction) ++{ ++ g_autoptr(GtkWidgetPath) path = NULL; ++ GtkStyleContext *context; ++ gint pos; ++ const gchar *direction_name; ++ GEnumClass *enum_class; ++ ++ enum_class = g_type_class_ref (GTK_TYPE_PAN_DIRECTION); ++ direction_name = g_enum_get_value (enum_class, direction)->value_nick; ++ ++ path = gtk_widget_path_copy (gtk_widget_get_path (self->widget)); ++ ++ pos = gtk_widget_path_append_type (path, GTK_TYPE_WIDGET); ++ gtk_widget_path_iter_set_object_name (path, pos, name); ++ ++ gtk_widget_path_iter_add_class (path, pos, direction_name); ++ ++ context = gtk_style_context_new (); ++ gtk_style_context_set_path (context, path); ++ ++ g_type_class_unref (enum_class); ++ ++ return context; ++} ++ ++static gint ++get_element_size (GtkStyleContext *context, ++ GtkPanDirection direction) ++{ ++ gint width, height; ++ ++ gtk_style_context_get (context, ++ gtk_style_context_get_state (context), ++ "min-width", &width, ++ "min-height", &height, ++ NULL); ++ ++ switch (direction) { ++ case GTK_PAN_DIRECTION_LEFT: ++ case GTK_PAN_DIRECTION_RIGHT: ++ return width; ++ case GTK_PAN_DIRECTION_UP: ++ case GTK_PAN_DIRECTION_DOWN: ++ return height; ++ default: ++ g_assert_not_reached (); ++ } ++ ++ return 0; ++} ++ ++static cairo_pattern_t * ++create_element_pattern (GtkStyleContext *context, ++ gint width, ++ gint height, ++ gint scale) ++{ ++ g_autoptr (cairo_surface_t) surface = ++ cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width * scale, height * scale); ++ g_autoptr (cairo_t) cr = cairo_create (surface); ++ cairo_pattern_t *pattern; ++ ++ cairo_surface_set_device_scale (surface, scale, scale); ++ ++ gtk_render_background (context, cr, 0, 0, width, height); ++ gtk_render_frame (context, cr, 0, 0, width, height); ++ ++ pattern = cairo_pattern_create_for_surface (surface); ++ ++ return pattern; ++} ++ ++static void ++cache_shadow (GtkHdyShadowHelper *self, ++ gint width, ++ gint height, ++ GtkPanDirection direction) ++{ ++ g_autoptr(GtkStyleContext) dim_context = NULL; ++ g_autoptr(GtkStyleContext) shadow_context = NULL; ++ g_autoptr(GtkStyleContext) border_context = NULL; ++ g_autoptr(GtkStyleContext) outline_context = NULL; ++ gint shadow_size, border_size, outline_size, scale; ++ ++ scale = gtk_widget_get_scale_factor (self->widget); ++ ++ if (self->last_direction == direction && ++ self->last_width == width && ++ self->last_height == height && ++ self->last_scale == scale && ++ self->is_cache_valid) ++ return; ++ ++ gtk_hdy_shadow_helper_clear_cache (self); ++ ++ dim_context = create_context (self, "dimming", direction); ++ shadow_context = create_context (self, "shadow", direction); ++ border_context = create_context (self, "border", direction); ++ outline_context = create_context (self, "outline", direction); ++ ++ shadow_size = get_element_size (shadow_context, direction); ++ border_size = get_element_size (border_context, direction); ++ outline_size = get_element_size (outline_context, direction); ++ ++ self->dimming_pattern = create_element_pattern (dim_context, width, height, scale); ++ if (direction == GTK_PAN_DIRECTION_LEFT || direction == GTK_PAN_DIRECTION_RIGHT) { ++ self->shadow_pattern = create_element_pattern (shadow_context, shadow_size, height, scale); ++ self->border_pattern = create_element_pattern (border_context, border_size, height, scale); ++ self->outline_pattern = create_element_pattern (outline_context, outline_size, height, scale); ++ } else { ++ self->shadow_pattern = create_element_pattern (shadow_context, width, shadow_size, scale); ++ self->border_pattern = create_element_pattern (border_context, width, border_size, scale); ++ self->outline_pattern = create_element_pattern (outline_context, width, outline_size, scale); ++ } ++ ++ self->border_size = border_size; ++ self->shadow_size = shadow_size; ++ self->outline_size = outline_size; ++ ++ self->is_cache_valid = TRUE; ++ self->last_direction = direction; ++ self->last_width = width; ++ self->last_height = height; ++ self->last_scale = scale; ++} ++ ++static void ++gtk_hdy_shadow_helper_dispose (GObject *object) ++{ ++ GtkHdyShadowHelper *self = GTK_HDY_SHADOW_HELPER (object); ++ ++ gtk_hdy_shadow_helper_clear_cache (self); ++ ++ if (self->widget) ++ g_clear_object (&self->widget); ++ ++ G_OBJECT_CLASS (gtk_hdy_shadow_helper_parent_class)->dispose (object); ++} ++ ++static void ++gtk_hdy_shadow_helper_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyShadowHelper *self = GTK_HDY_SHADOW_HELPER (object); ++ ++ switch (prop_id) { ++ case PROP_WIDGET: ++ g_value_set_object (value, self->widget); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_shadow_helper_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyShadowHelper *self = GTK_HDY_SHADOW_HELPER (object); ++ ++ switch (prop_id) { ++ case PROP_WIDGET: ++ self->widget = GTK_WIDGET (g_object_ref (g_value_get_object (value))); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_shadow_helper_class_init (GtkHdyShadowHelperClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->dispose = gtk_hdy_shadow_helper_dispose; ++ object_class->get_property = gtk_hdy_shadow_helper_get_property; ++ object_class->set_property = gtk_hdy_shadow_helper_set_property; ++ ++ /** ++ * GtkHdyShadowHelper:widget: ++ * ++ * The widget the shadow will be drawn for. Must not be %NULL ++ * ++ * Since: 0.0.11 ++ */ ++ props[PROP_WIDGET] = ++ g_param_spec_object ("widget", ++ _("Widget"), ++ _("The widget the shadow will be drawn for"), ++ GTK_TYPE_WIDGET, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++} ++ ++static void ++gtk_hdy_shadow_helper_init (GtkHdyShadowHelper *self) ++{ ++} ++ ++/** ++ * gtk_hdy_shadow_helper_new: ++ * ++ * Creates a new #GtkHdyShadowHelper object. ++ * ++ * Returns: The newly created #GtkHdyShadowHelper object ++ * ++ * Since: 0.0.12 ++ */ ++GtkHdyShadowHelper * ++gtk_hdy_shadow_helper_new (GtkWidget *widget) ++{ ++ return g_object_new (GTK_HDY_TYPE_SHADOW_HELPER, ++ "widget", widget, ++ NULL); ++} ++ ++/** ++ * gtk_hdy_shadow_helper_clear_cache: ++ * @self: a #GtkHdyShadowHelper ++ * ++ * Clears shadow cache. This should be used after a transition is done. ++ * ++ * Since: 0.0.12 ++ */ ++void ++gtk_hdy_shadow_helper_clear_cache (GtkHdyShadowHelper *self) ++{ ++ if (!self->is_cache_valid) ++ return; ++ ++ cairo_pattern_destroy (self->dimming_pattern); ++ cairo_pattern_destroy (self->shadow_pattern); ++ cairo_pattern_destroy (self->border_pattern); ++ cairo_pattern_destroy (self->outline_pattern); ++ self->border_size = 0; ++ self->shadow_size = 0; ++ self->outline_size = 0; ++ ++ self->last_direction = 0; ++ self->last_width = 0; ++ self->last_height = 0; ++ self->last_scale = 0; ++ ++ self->is_cache_valid = FALSE; ++} ++ ++/** ++ * gtk_hdy_shadow_helper_draw_shadow: ++ * @self: a #GtkHdyShadowHelper ++ * @cr: a Cairo context to draw to ++ * @width: the width of the shadow rectangle ++ * @height: the height of the shadow rectangle ++ * @progress: transition progress, changes from 0 to 1 ++ * @direction: shadow direction ++ * ++ * Draws a transition shadow. For caching to work, @width, @height and ++ * @direction shouldn't change between calls. ++ * ++ * Since: 0.0.12 ++ */ ++void ++gtk_hdy_shadow_helper_draw_shadow (GtkHdyShadowHelper *self, ++ cairo_t *cr, ++ gint width, ++ gint height, ++ gdouble progress, ++ GtkPanDirection direction) ++{ ++ gdouble remaining_distance, shadow_opacity; ++ gint shadow_size, border_size, outline_size, distance; ++ ++ if (progress >= 1) ++ return; ++ ++ cache_shadow (self, width, height, direction); ++ ++ shadow_size = self->shadow_size; ++ border_size = self->border_size; ++ outline_size = self->outline_size; ++ ++ switch (direction) { ++ case GTK_PAN_DIRECTION_LEFT: ++ case GTK_PAN_DIRECTION_RIGHT: ++ distance = width; ++ break; ++ case GTK_PAN_DIRECTION_UP: ++ case GTK_PAN_DIRECTION_DOWN: ++ distance = height; ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ ++ remaining_distance = (1 - progress) * (gdouble) distance; ++ shadow_opacity = 1; ++ if (remaining_distance < shadow_size) ++ shadow_opacity = (remaining_distance / shadow_size); ++ ++ cairo_save (cr); ++ ++ switch (direction) { ++ case GTK_PAN_DIRECTION_LEFT: ++ cairo_rectangle (cr, -outline_size, 0, width + outline_size, height); ++ break; ++ case GTK_PAN_DIRECTION_RIGHT: ++ cairo_rectangle (cr, 0, 0, width + outline_size, height); ++ break; ++ case GTK_PAN_DIRECTION_UP: ++ cairo_rectangle (cr, 0, -outline_size, width, height + outline_size); ++ break; ++ case GTK_PAN_DIRECTION_DOWN: ++ cairo_rectangle (cr, 0, 0, width, height + outline_size); ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ cairo_clip (cr); ++ gdk_window_mark_paint_from_clip (gtk_widget_get_window (self->widget), cr); ++ ++ cairo_set_source (cr, self->dimming_pattern); ++ cairo_paint_with_alpha (cr, 1 - progress); ++ ++ switch (direction) { ++ case GTK_PAN_DIRECTION_RIGHT: ++ cairo_translate (cr, width - shadow_size, 0); ++ break; ++ case GTK_PAN_DIRECTION_DOWN: ++ cairo_translate (cr, 0, height - shadow_size); ++ break; ++ case GTK_PAN_DIRECTION_LEFT: ++ case GTK_PAN_DIRECTION_UP: ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ ++ cairo_set_source (cr, self->shadow_pattern); ++ cairo_paint_with_alpha (cr, shadow_opacity); ++ ++ switch (direction) { ++ case GTK_PAN_DIRECTION_RIGHT: ++ cairo_translate (cr, shadow_size - border_size, 0); ++ break; ++ case GTK_PAN_DIRECTION_DOWN: ++ cairo_translate (cr, 0, shadow_size - border_size); ++ break; ++ case GTK_PAN_DIRECTION_LEFT: ++ case GTK_PAN_DIRECTION_UP: ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ ++ cairo_set_source (cr, self->border_pattern); ++ cairo_paint (cr); ++ ++ switch (direction) { ++ case GTK_PAN_DIRECTION_RIGHT: ++ cairo_translate (cr, border_size, 0); ++ break; ++ case GTK_PAN_DIRECTION_DOWN: ++ cairo_translate (cr, 0, border_size); ++ break; ++ case GTK_PAN_DIRECTION_LEFT: ++ cairo_translate (cr, -outline_size, 0); ++ break; ++ case GTK_PAN_DIRECTION_UP: ++ cairo_translate (cr, 0, -outline_size); ++ break; ++ default: ++ g_assert_not_reached (); ++ } ++ ++ cairo_set_source (cr, self->outline_pattern); ++ cairo_paint (cr); ++ ++ cairo_restore (cr); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 4b3e871..ae3dc94 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -385,6 +385,7 @@ gtk_sources = files( + 'gdkpixbufutils.c', + 'hdy-animation.c', + 'hdy-css.c', ++ 'hdy-shadow-helper.c', + 'hdy-squeezer.c', + 'hdy-view-switcher-bar.c', + 'hdy-view-switcher-button.c', +@@ -400,6 +401,7 @@ gtk_private_type_headers = files( + 'hdy-animation-private.h', + 'hdy-cairo-private.h', + 'hdy-css-private.h', ++ 'hdy-shadow-helper-private.h', + 'hdy-squeezer-private.h', + 'hdy-view-switcher-bar-private.h', + 'hdy-view-switcher-button-private.h', diff --git a/gtk3-mobile/Add-GtkHdySqueezer.patch b/gtk3-mobile/Add-GtkHdySqueezer.patch new file mode 100644 index 0000000..c7ed826 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdySqueezer.patch @@ -0,0 +1,1725 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Thu, 10 Sep 2020 10:46:42 +0200 +Subject: Add GtkHdySqueezer + +This is imported from HdySqueezer from libhandy 1.0.2. +--- + gtk/gtkprivate.h | 1 + + gtk/hdy-cairo-private.h | 21 + + gtk/hdy-squeezer-private.h | 63 ++ + gtk/hdy-squeezer.c | 1573 ++++++++++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 3 + + 5 files changed, 1661 insertions(+) + create mode 100644 gtk/hdy-cairo-private.h + create mode 100644 gtk/hdy-squeezer-private.h + create mode 100644 gtk/hdy-squeezer.c + +diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h +index 473bb99..68f0f8d 100644 +--- a/gtk/gtkprivate.h ++++ b/gtk/gtkprivate.h +@@ -30,6 +30,7 @@ + + #include "gtkcsstypesprivate.h" + #include "gtktexthandleprivate.h" ++#include "hdy-squeezer-private.h" + #include "hdy-view-switcher-private.h" + + G_BEGIN_DECLS +diff --git a/gtk/hdy-cairo-private.h b/gtk/hdy-cairo-private.h +new file mode 100644 +index 0000000..4226ec8 +--- /dev/null ++++ b/gtk/hdy-cairo-private.h +@@ -0,0 +1,21 @@ ++/* ++ * Copyright (C) 2020 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include <glib.h> ++#include <cairo/cairo.h> ++ ++G_BEGIN_DECLS ++ ++G_DEFINE_AUTOPTR_CLEANUP_FUNC (cairo_t, cairo_destroy) ++G_DEFINE_AUTOPTR_CLEANUP_FUNC (cairo_surface_t, cairo_surface_destroy) ++ ++G_END_DECLS +diff --git a/gtk/hdy-squeezer-private.h b/gtk/hdy-squeezer-private.h +new file mode 100644 +index 0000000..9224230 +--- /dev/null ++++ b/gtk/hdy-squeezer-private.h +@@ -0,0 +1,63 @@ ++/* ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkcontainer.h" ++#include "gtkenums.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_SQUEEZER (gtk_hdy_squeezer_get_type ()) ++ ++G_DECLARE_FINAL_TYPE (GtkHdySqueezer, gtk_hdy_squeezer, GTK, HDY_SQUEEZER, GtkContainer) ++ ++typedef enum { ++ GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE, ++ GTK_HDY_SQUEEZER_TRANSITION_TYPE_CROSSFADE, ++} GtkHdySqueezerTransitionType; ++ ++GtkWidget *gtk_hdy_squeezer_new (void); ++ ++gboolean gtk_hdy_squeezer_get_homogeneous (GtkHdySqueezer *self); ++void gtk_hdy_squeezer_set_homogeneous (GtkHdySqueezer *self, ++ gboolean homogeneous); ++ ++guint gtk_hdy_squeezer_get_transition_duration (GtkHdySqueezer *self); ++void gtk_hdy_squeezer_set_transition_duration (GtkHdySqueezer *self, ++ guint duration); ++ ++GtkHdySqueezerTransitionType gtk_hdy_squeezer_get_transition_type (GtkHdySqueezer *self); ++void gtk_hdy_squeezer_set_transition_type (GtkHdySqueezer *self, ++ GtkHdySqueezerTransitionType transition); ++ ++gboolean gtk_hdy_squeezer_get_transition_running (GtkHdySqueezer *self); ++ ++gboolean gtk_hdy_squeezer_get_interpolate_size (GtkHdySqueezer *self); ++void gtk_hdy_squeezer_set_interpolate_size (GtkHdySqueezer *self, ++ gboolean interpolate_size); ++ ++GtkWidget *gtk_hdy_squeezer_get_visible_child (GtkHdySqueezer *self); ++ ++gboolean gtk_hdy_squeezer_get_child_enabled (GtkHdySqueezer *self, ++ GtkWidget *child); ++void gtk_hdy_squeezer_set_child_enabled (GtkHdySqueezer *self, ++ GtkWidget *child, ++ gboolean enabled); ++ ++gfloat gtk_hdy_squeezer_get_xalign (GtkHdySqueezer *self); ++void gtk_hdy_squeezer_set_xalign (GtkHdySqueezer *self, ++ gfloat xalign); ++ ++gfloat gtk_hdy_squeezer_get_yalign (GtkHdySqueezer *self); ++void gtk_hdy_squeezer_set_yalign (GtkHdySqueezer *self, ++ gfloat yalign); ++ ++G_END_DECLS +diff --git a/gtk/hdy-squeezer.c b/gtk/hdy-squeezer.c +new file mode 100644 +index 0000000..b36db93 +--- /dev/null ++++ b/gtk/hdy-squeezer.c +@@ -0,0 +1,1573 @@ ++/* ++ * Copyright (C) 2013 Red Hat, Inc. ++ * Copyright (C) 2019 Purism SPC ++ * ++ * Author: Alexander Larsson <alexl@redhat.com> ++ * Author: Adrien Plazas <adrien.plazas@puri.sm> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++/* ++ * Forked from the GTK+ 3.24.2 GtkStack widget initially written by Alexander ++ * Larsson, and heavily modified for libhandy by Adrien Plazas on behalf of ++ * Purism SPC 2019. ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "hdy-squeezer-private.h" ++ ++#include "gtkorientable.h" ++#include "gtkprivatetypebuiltins.h" ++#include "gtkprogresstrackerprivate.h" ++#include "gtkrender.h" ++#include "gtkstylecontext.h" ++#include "gtktypebuiltins.h" ++#include "gtkwindow.h" ++#include "hdy-animation-private.h" ++#include "hdy-cairo-private.h" ++#include "hdy-css-private.h" ++ ++/** ++ * SECTION:hdy-squeezer ++ * @short_description: A best fit container. ++ * @Title: GtkHdySqueezer ++ * ++ * The GtkHdySqueezer widget is a container which only shows the first of its ++ * children that fits in the available size. It is convenient to offer different ++ * widgets to represent the same data with different levels of detail, making ++ * the widget seem to squeeze itself to fit in the available space. ++ * ++ * Transitions between children can be animated as fades. This can be controlled ++ * with gtk_hdy_squeezer_set_transition_type(). ++ * ++ * # CSS nodes ++ * ++ * #GtkHdySqueezer has a single CSS node with name squeezer. ++ */ ++ ++enum { ++ PROP_0, ++ PROP_HOMOGENEOUS, ++ PROP_VISIBLE_CHILD, ++ PROP_TRANSITION_DURATION, ++ PROP_TRANSITION_TYPE, ++ PROP_TRANSITION_RUNNING, ++ PROP_INTERPOLATE_SIZE, ++ PROP_XALIGN, ++ PROP_YALIGN, ++ ++ /* Overridden properties */ ++ PROP_ORIENTATION, ++ ++ LAST_PROP = PROP_YALIGN + 1, ++}; ++ ++enum { ++ CHILD_PROP_0, ++ CHILD_PROP_ENABLED, ++ ++ LAST_CHILD_PROP, ++}; ++ ++typedef struct { ++ GtkWidget *widget; ++ gboolean enabled; ++ GtkWidget *last_focus; ++} GtkHdySqueezerChildInfo; ++ ++struct _GtkHdySqueezer ++{ ++ GtkContainer parent_instance; ++ ++ GList *children; ++ ++ GdkWindow* bin_window; ++ GdkWindow* view_window; ++ ++ GtkHdySqueezerChildInfo *visible_child; ++ ++ gboolean homogeneous; ++ ++ GtkHdySqueezerTransitionType transition_type; ++ guint transition_duration; ++ ++ GtkHdySqueezerChildInfo *last_visible_child; ++ cairo_surface_t *last_visible_surface; ++ GtkAllocation last_visible_surface_allocation; ++ guint tick_id; ++ GtkProgressTracker tracker; ++ gboolean first_frame_skipped; ++ ++ gint last_visible_widget_width; ++ gint last_visible_widget_height; ++ ++ GtkHdySqueezerTransitionType active_transition_type; ++ ++ gboolean interpolate_size; ++ ++ gfloat xalign; ++ gfloat yalign; ++ ++ GtkOrientation orientation; ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++static GParamSpec *child_props[LAST_CHILD_PROP]; ++ ++G_DEFINE_TYPE_WITH_CODE (GtkHdySqueezer, gtk_hdy_squeezer, GTK_TYPE_CONTAINER, ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)) ++ ++static GtkOrientation ++get_orientation (GtkHdySqueezer *self) ++{ ++ return self->orientation; ++} ++ ++static void ++set_orientation (GtkHdySqueezer *self, ++ GtkOrientation orientation) ++{ ++ if (self->orientation == orientation) ++ return; ++ ++ self->orientation = orientation; ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ g_object_notify (G_OBJECT (self), "orientation"); ++} ++ ++static GtkHdySqueezerChildInfo * ++find_child_info_for_widget (GtkHdySqueezer *self, ++ GtkWidget *child) ++{ ++ GtkHdySqueezerChildInfo *info; ++ GList *l; ++ ++ for (l = self->children; l != NULL; l = l->next) { ++ info = l->data; ++ if (info->widget == child) ++ return info; ++ } ++ ++ return NULL; ++} ++ ++static void ++gtk_hdy_squeezer_progress_updated (GtkHdySqueezer *self) ++{ ++ gtk_widget_queue_draw (GTK_WIDGET (self)); ++ ++ if (!self->homogeneous) ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ ++ if (gtk_progress_tracker_get_state (&self->tracker) == GTK_PROGRESS_STATE_AFTER) { ++ if (self->last_visible_surface != NULL) { ++ cairo_surface_destroy (self->last_visible_surface); ++ self->last_visible_surface = NULL; ++ } ++ ++ if (self->last_visible_child != NULL) { ++ gtk_widget_set_child_visible (self->last_visible_child->widget, FALSE); ++ self->last_visible_child = NULL; ++ } ++ } ++} ++ ++static gboolean ++gtk_hdy_squeezer_transition_cb (GtkWidget *widget, ++ GdkFrameClock *frame_clock, ++ gpointer user_data) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ ++ if (self->first_frame_skipped) { ++ gtk_progress_tracker_advance_frame (&self->tracker, ++ gdk_frame_clock_get_frame_time (frame_clock)); ++ } else { ++ self->first_frame_skipped = TRUE; ++ } ++ ++ /* Finish the animation early if the widget isn't mapped anymore. */ ++ if (!gtk_widget_get_mapped (widget)) ++ gtk_progress_tracker_finish (&self->tracker); ++ ++ gtk_hdy_squeezer_progress_updated (GTK_HDY_SQUEEZER (widget)); ++ ++ if (gtk_progress_tracker_get_state (&self->tracker) == GTK_PROGRESS_STATE_AFTER) { ++ self->tick_id = 0; ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_RUNNING]); ++ ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static void ++gtk_hdy_squeezer_schedule_ticks (GtkHdySqueezer *self) ++{ ++ if (self->tick_id == 0) { ++ self->tick_id = ++ gtk_widget_add_tick_callback (GTK_WIDGET (self), gtk_hdy_squeezer_transition_cb, self, NULL); ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_RUNNING]); ++ } ++} ++ ++static void ++gtk_hdy_squeezer_unschedule_ticks (GtkHdySqueezer *self) ++{ ++ if (self->tick_id != 0) { ++ gtk_widget_remove_tick_callback (GTK_WIDGET (self), self->tick_id); ++ self->tick_id = 0; ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_RUNNING]); ++ } ++} ++ ++static void ++gtk_hdy_squeezer_start_transition (GtkHdySqueezer *self, ++ GtkHdySqueezerTransitionType transition_type, ++ guint transition_duration) ++{ ++ GtkWidget *widget = GTK_WIDGET (self); ++ ++ if (gtk_widget_get_mapped (widget) && ++ gtk_hdy_get_enable_animations (widget) && ++ transition_type != GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE && ++ transition_duration != 0 && ++ self->last_visible_child != NULL) { ++ self->active_transition_type = transition_type; ++ self->first_frame_skipped = FALSE; ++ gtk_hdy_squeezer_schedule_ticks (self); ++ gtk_progress_tracker_start (&self->tracker, ++ self->transition_duration * 1000, ++ 0, ++ 1.0); ++ } else { ++ gtk_hdy_squeezer_unschedule_ticks (self); ++ self->active_transition_type = GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE; ++ gtk_progress_tracker_finish (&self->tracker); ++ } ++ ++ gtk_hdy_squeezer_progress_updated (GTK_HDY_SQUEEZER (widget)); ++} ++ ++static void ++set_visible_child (GtkHdySqueezer *self, ++ GtkHdySqueezerChildInfo *child_info, ++ GtkHdySqueezerTransitionType transition_type, ++ guint transition_duration) ++{ ++ GtkHdySqueezerChildInfo *info; ++ GtkWidget *widget = GTK_WIDGET (self); ++ GList *l; ++ GtkWidget *toplevel; ++ GtkWidget *focus; ++ gboolean contains_focus = FALSE; ++ ++ /* If we are being destroyed, do not bother with transitions and ++ * notifications. ++ */ ++ if (gtk_widget_in_destruction (widget)) ++ return; ++ ++ /* If none, pick the first visible. */ ++ if (child_info == NULL) { ++ for (l = self->children; l != NULL; l = l->next) { ++ info = l->data; ++ if (gtk_widget_get_visible (info->widget)) { ++ child_info = info; ++ break; ++ } ++ } ++ } ++ ++ if (child_info == self->visible_child) ++ return; ++ ++ toplevel = gtk_widget_get_toplevel (widget); ++ if (GTK_IS_WINDOW (toplevel)) { ++ focus = gtk_window_get_focus (GTK_WINDOW (toplevel)); ++ if (focus && ++ self->visible_child && ++ self->visible_child->widget && ++ gtk_widget_is_ancestor (focus, self->visible_child->widget)) { ++ contains_focus = TRUE; ++ ++ if (self->visible_child->last_focus) ++ g_object_remove_weak_pointer (G_OBJECT (self->visible_child->last_focus), ++ (gpointer *)&self->visible_child->last_focus); ++ self->visible_child->last_focus = focus; ++ g_object_add_weak_pointer (G_OBJECT (self->visible_child->last_focus), ++ (gpointer *)&self->visible_child->last_focus); ++ } ++ } ++ ++ if (self->last_visible_child != NULL) ++ gtk_widget_set_child_visible (self->last_visible_child->widget, FALSE); ++ self->last_visible_child = NULL; ++ ++ if (self->last_visible_surface != NULL) ++ cairo_surface_destroy (self->last_visible_surface); ++ self->last_visible_surface = NULL; ++ ++ if (self->visible_child && self->visible_child->widget) { ++ if (gtk_widget_is_visible (widget)) { ++ GtkAllocation allocation; ++ ++ self->last_visible_child = self->visible_child; ++ gtk_widget_get_allocated_size (self->last_visible_child->widget, &allocation, NULL); ++ self->last_visible_widget_width = allocation.width; ++ self->last_visible_widget_height = allocation.height; ++ } else { ++ gtk_widget_set_child_visible (self->visible_child->widget, FALSE); ++ } ++ } ++ ++ self->visible_child = child_info; ++ ++ if (child_info) { ++ gtk_widget_set_child_visible (child_info->widget, TRUE); ++ ++ if (contains_focus) { ++ if (child_info->last_focus) ++ gtk_widget_grab_focus (child_info->last_focus); ++ else ++ gtk_widget_child_focus (child_info->widget, GTK_DIR_TAB_FORWARD); ++ } ++ } ++ ++ if (self->homogeneous) ++ gtk_widget_queue_allocate (widget); ++ else ++ gtk_widget_queue_resize (widget); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VISIBLE_CHILD]); ++ ++ gtk_hdy_squeezer_start_transition (self, transition_type, transition_duration); ++} ++ ++static void ++stack_child_visibility_notify_cb (GObject *obj, ++ GParamSpec *pspec, ++ gpointer user_data) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (user_data); ++ GtkWidget *child = GTK_WIDGET (obj); ++ GtkHdySqueezerChildInfo *child_info; ++ ++ child_info = find_child_info_for_widget (self, child); ++ ++ if (self->visible_child == NULL && ++ gtk_widget_get_visible (child)) ++ set_visible_child (self, child_info, self->transition_type, self->transition_duration); ++ else if (self->visible_child == child_info && ++ !gtk_widget_get_visible (child)) ++ set_visible_child (self, NULL, self->transition_type, self->transition_duration); ++ ++ if (child_info == self->last_visible_child) { ++ gtk_widget_set_child_visible (self->last_visible_child->widget, FALSE); ++ self->last_visible_child = NULL; ++ } ++} ++ ++static void ++gtk_hdy_squeezer_add (GtkContainer *container, ++ GtkWidget *child) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (container); ++ GtkHdySqueezerChildInfo *child_info; ++ ++ g_return_if_fail (child != NULL); ++ ++ child_info = g_slice_new (GtkHdySqueezerChildInfo); ++ child_info->widget = child; ++ child_info->enabled = TRUE; ++ child_info->last_focus = NULL; ++ ++ self->children = g_list_append (self->children, child_info); ++ ++ gtk_widget_set_child_visible (child, FALSE); ++ gtk_widget_set_parent_window (child, self->bin_window); ++ gtk_widget_set_parent (child, GTK_WIDGET (self)); ++ ++ if (self->bin_window != NULL) { ++ gdk_window_set_events (self->bin_window, ++ gdk_window_get_events (self->bin_window) | ++ gtk_widget_get_events (child)); ++ } ++ ++ g_signal_connect (child, "notify::visible", ++ G_CALLBACK (stack_child_visibility_notify_cb), self); ++ ++ if (self->visible_child == NULL && ++ gtk_widget_get_visible (child)) ++ set_visible_child (self, child_info, self->transition_type, self->transition_duration); ++ ++ if (self->visible_child == child_info) ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++static void ++gtk_hdy_squeezer_remove (GtkContainer *container, ++ GtkWidget *child) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (container); ++ GtkHdySqueezerChildInfo *child_info; ++ gboolean was_visible; ++ ++ child_info = find_child_info_for_widget (self, child); ++ if (child_info == NULL) ++ return; ++ ++ self->children = g_list_remove (self->children, child_info); ++ ++ g_signal_handlers_disconnect_by_func (child, ++ stack_child_visibility_notify_cb, ++ self); ++ ++ was_visible = gtk_widget_get_visible (child); ++ ++ child_info->widget = NULL; ++ ++ if (self->visible_child == child_info) ++ set_visible_child (self, NULL, self->transition_type, self->transition_duration); ++ ++ if (self->last_visible_child == child_info) ++ self->last_visible_child = NULL; ++ ++ gtk_widget_unparent (child); ++ ++ if (child_info->last_focus) ++ g_object_remove_weak_pointer (G_OBJECT (child_info->last_focus), ++ (gpointer *)&child_info->last_focus); ++ ++ g_slice_free (GtkHdySqueezerChildInfo, child_info); ++ ++ if (self->homogeneous && was_visible) ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++static void ++gtk_hdy_squeezer_get_property (GObject *object, ++ guint property_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (object); ++ ++ switch (property_id) { ++ case PROP_HOMOGENEOUS: ++ g_value_set_boolean (value, gtk_hdy_squeezer_get_homogeneous (self)); ++ break; ++ case PROP_VISIBLE_CHILD: ++ g_value_set_object (value, gtk_hdy_squeezer_get_visible_child (self)); ++ break; ++ case PROP_TRANSITION_DURATION: ++ g_value_set_uint (value, gtk_hdy_squeezer_get_transition_duration (self)); ++ break; ++ case PROP_TRANSITION_TYPE: ++ g_value_set_enum (value, gtk_hdy_squeezer_get_transition_type (self)); ++ break; ++ case PROP_TRANSITION_RUNNING: ++ g_value_set_boolean (value, gtk_hdy_squeezer_get_transition_running (self)); ++ break; ++ case PROP_INTERPOLATE_SIZE: ++ g_value_set_boolean (value, gtk_hdy_squeezer_get_interpolate_size (self)); ++ break; ++ case PROP_XALIGN: ++ g_value_set_float (value, gtk_hdy_squeezer_get_xalign (self)); ++ break; ++ case PROP_YALIGN: ++ g_value_set_float (value, gtk_hdy_squeezer_get_yalign (self)); ++ break; ++ case PROP_ORIENTATION: ++ g_value_set_enum (value, get_orientation (self)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_squeezer_set_property (GObject *object, ++ guint property_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (object); ++ ++ switch (property_id) { ++ case PROP_HOMOGENEOUS: ++ gtk_hdy_squeezer_set_homogeneous (self, g_value_get_boolean (value)); ++ break; ++ case PROP_TRANSITION_DURATION: ++ gtk_hdy_squeezer_set_transition_duration (self, g_value_get_uint (value)); ++ break; ++ case PROP_TRANSITION_TYPE: ++ gtk_hdy_squeezer_set_transition_type (self, g_value_get_enum (value)); ++ break; ++ case PROP_INTERPOLATE_SIZE: ++ gtk_hdy_squeezer_set_interpolate_size (self, g_value_get_boolean (value)); ++ break; ++ case PROP_XALIGN: ++ gtk_hdy_squeezer_set_xalign (self, g_value_get_float (value)); ++ break; ++ case PROP_YALIGN: ++ gtk_hdy_squeezer_set_yalign (self, g_value_get_float (value)); ++ break; ++ case PROP_ORIENTATION: ++ set_orientation (self, g_value_get_enum (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_squeezer_realize (GtkWidget *widget) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ GtkAllocation allocation; ++ GdkWindowAttr attributes = { 0 }; ++ GdkWindowAttributesType attributes_mask; ++ GtkHdySqueezerChildInfo *info; ++ GList *l; ++ ++ gtk_widget_set_realized (widget, TRUE); ++ gtk_widget_set_window (widget, g_object_ref (gtk_widget_get_parent_window (widget))); ++ ++ gtk_widget_get_allocation (widget, &allocation); ++ ++ attributes.x = allocation.x; ++ attributes.y = allocation.y; ++ attributes.width = allocation.width; ++ attributes.height = allocation.height; ++ attributes.window_type = GDK_WINDOW_CHILD; ++ attributes.wclass = GDK_INPUT_OUTPUT; ++ attributes.visual = gtk_widget_get_visual (widget); ++ attributes.event_mask = ++ gtk_widget_get_events (widget); ++ attributes_mask = (GDK_WA_X | GDK_WA_Y) | GDK_WA_VISUAL; ++ ++ self->view_window = ++ gdk_window_new (gtk_widget_get_window (GTK_WIDGET (self)), ++ &attributes, attributes_mask); ++ gtk_widget_register_window (widget, self->view_window); ++ ++ attributes.x = 0; ++ attributes.y = 0; ++ attributes.width = allocation.width; ++ attributes.height = allocation.height; ++ ++ for (l = self->children; l != NULL; l = l->next) { ++ info = l->data; ++ attributes.event_mask |= gtk_widget_get_events (info->widget); ++ } ++ ++ self->bin_window = ++ gdk_window_new (self->view_window, &attributes, attributes_mask); ++ gtk_widget_register_window (widget, self->bin_window); ++ ++ for (l = self->children; l != NULL; l = l->next) { ++ info = l->data; ++ ++ gtk_widget_set_parent_window (info->widget, self->bin_window); ++ } ++ ++ gdk_window_show (self->bin_window); ++} ++ ++static void ++gtk_hdy_squeezer_unrealize (GtkWidget *widget) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ ++ gtk_widget_unregister_window (widget, self->bin_window); ++ gdk_window_destroy (self->bin_window); ++ self->bin_window = NULL; ++ gtk_widget_unregister_window (widget, self->view_window); ++ gdk_window_destroy (self->view_window); ++ self->view_window = NULL; ++ ++ GTK_WIDGET_CLASS (gtk_hdy_squeezer_parent_class)->unrealize (widget); ++} ++ ++static void ++gtk_hdy_squeezer_map (GtkWidget *widget) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ ++ GTK_WIDGET_CLASS (gtk_hdy_squeezer_parent_class)->map (widget); ++ ++ gdk_window_show (self->view_window); ++} ++ ++static void ++gtk_hdy_squeezer_unmap (GtkWidget *widget) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ ++ gdk_window_hide (self->view_window); ++ ++ GTK_WIDGET_CLASS (gtk_hdy_squeezer_parent_class)->unmap (widget); ++} ++ ++static void ++gtk_hdy_squeezer_forall (GtkContainer *container, ++ gboolean include_internals, ++ GtkCallback callback, ++ gpointer callback_data) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (container); ++ GtkHdySqueezerChildInfo *child_info; ++ GList *l; ++ ++ l = self->children; ++ while (l) { ++ child_info = l->data; ++ l = l->next; ++ ++ (* callback) (child_info->widget, callback_data); ++ } ++} ++ ++static void ++gtk_hdy_squeezer_compute_expand (GtkWidget *widget, ++ gboolean *hexpand_p, ++ gboolean *vexpand_p) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ gboolean hexpand, vexpand; ++ GtkHdySqueezerChildInfo *child_info; ++ GtkWidget *child; ++ GList *l; ++ ++ hexpand = FALSE; ++ vexpand = FALSE; ++ for (l = self->children; l != NULL; l = l->next) { ++ child_info = l->data; ++ child = child_info->widget; ++ ++ if (!hexpand && ++ gtk_widget_compute_expand (child, GTK_ORIENTATION_HORIZONTAL)) ++ hexpand = TRUE; ++ ++ if (!vexpand && ++ gtk_widget_compute_expand (child, GTK_ORIENTATION_VERTICAL)) ++ vexpand = TRUE; ++ ++ if (hexpand && vexpand) ++ break; ++ } ++ ++ *hexpand_p = hexpand; ++ *vexpand_p = vexpand; ++} ++ ++static void ++gtk_hdy_squeezer_draw_crossfade (GtkWidget *widget, ++ cairo_t *cr) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ gdouble progress = gtk_progress_tracker_get_progress (&self->tracker, FALSE); ++ ++ cairo_push_group (cr); ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->visible_child->widget, ++ cr); ++ cairo_save (cr); ++ ++ /* Multiply alpha by progress. */ ++ cairo_set_source_rgba (cr, 1, 1, 1, progress); ++ cairo_set_operator (cr, CAIRO_OPERATOR_DEST_IN); ++ cairo_paint (cr); ++ ++ if (self->last_visible_surface != NULL) { ++ gint width_diff = gtk_widget_get_allocated_width (widget) - self->last_visible_surface_allocation.width; ++ gint height_diff = gtk_widget_get_allocated_height (widget) - self->last_visible_surface_allocation.height; ++ ++ cairo_set_source_surface (cr, self->last_visible_surface, ++ width_diff * self->xalign, ++ height_diff * self->yalign); ++ cairo_set_operator (cr, CAIRO_OPERATOR_ADD); ++ cairo_paint_with_alpha (cr, MAX (1.0 - progress, 0)); ++ } ++ ++ cairo_restore (cr); ++ ++ cairo_pop_group_to_source (cr); ++ cairo_set_operator (cr, CAIRO_OPERATOR_OVER); ++ cairo_paint (cr); ++} ++ ++static gboolean ++gtk_hdy_squeezer_draw (GtkWidget *widget, ++ cairo_t *cr) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ ++ if (gtk_cairo_should_draw_window (cr, self->view_window)) { ++ GtkStyleContext *context; ++ ++ context = gtk_widget_get_style_context (widget); ++ gtk_render_background (context, ++ cr, ++ 0, 0, ++ gtk_widget_get_allocated_width (widget), ++ gtk_widget_get_allocated_height (widget)); ++ } ++ ++ if (self->visible_child) { ++ if (gtk_progress_tracker_get_state (&self->tracker) != GTK_PROGRESS_STATE_AFTER) { ++ if (self->last_visible_surface == NULL && ++ self->last_visible_child != NULL) { ++ g_autoptr (cairo_t) pattern_cr = NULL; ++ ++ gtk_widget_get_allocation (self->last_visible_child->widget, ++ &self->last_visible_surface_allocation); ++ self->last_visible_surface = ++ gdk_window_create_similar_surface (gtk_widget_get_window (widget), ++ CAIRO_CONTENT_COLOR_ALPHA, ++ self->last_visible_surface_allocation.width, ++ self->last_visible_surface_allocation.height); ++ pattern_cr = cairo_create (self->last_visible_surface); ++ /* We don't use propagate_draw here, because we don't want to apply the ++ * bin_window offset. ++ */ ++ gtk_widget_draw (self->last_visible_child->widget, pattern_cr); ++ } ++ ++ cairo_rectangle (cr, ++ 0, 0, ++ gtk_widget_get_allocated_width (widget), ++ gtk_widget_get_allocated_height (widget)); ++ cairo_clip (cr); ++ ++ switch (self->active_transition_type) { ++ case GTK_HDY_SQUEEZER_TRANSITION_TYPE_CROSSFADE: ++ if (gtk_cairo_should_draw_window (cr, self->bin_window)) ++ gtk_hdy_squeezer_draw_crossfade (widget, cr); ++ break; ++ case GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE: ++ default: ++ g_assert_not_reached (); ++ } ++ ++ } else if (gtk_cairo_should_draw_window (cr, self->bin_window)) ++ gtk_container_propagate_draw (GTK_CONTAINER (self), ++ self->visible_child->widget, ++ cr); ++ } ++ ++ return FALSE; ++} ++ ++static void ++gtk_hdy_squeezer_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ GtkHdySqueezerChildInfo *child_info = NULL; ++ GtkWidget *child = NULL; ++ gint child_min; ++ GList *l; ++ GtkAllocation child_allocation; ++ ++ gtk_hdy_css_size_allocate (widget, allocation); ++ ++ gtk_widget_set_allocation (widget, allocation); ++ ++ for (l = self->children; l != NULL; l = l->next) { ++ child_info = l->data; ++ child = child_info->widget; ++ ++ if (!gtk_widget_get_visible (child)) ++ continue; ++ ++ if (!child_info->enabled) ++ continue; ++ ++ if (self->orientation == GTK_ORIENTATION_VERTICAL) { ++ if (gtk_widget_get_request_mode (child) != GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH) ++ gtk_widget_get_preferred_height (child, &child_min, NULL); ++ else ++ gtk_widget_get_preferred_height_for_width (child, allocation->width, &child_min, NULL); ++ ++ if (child_min <= allocation->height) ++ break; ++ } else { ++ if (gtk_widget_get_request_mode (child) != GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT) ++ gtk_widget_get_preferred_width (child, &child_min, NULL); ++ else ++ gtk_widget_get_preferred_width_for_height (child, allocation->height, &child_min, NULL); ++ ++ if (child_min <= allocation->width) ++ break; ++ } ++ } ++ ++ set_visible_child (self, child_info, ++ self->transition_type, ++ self->transition_duration); ++ ++ child_allocation.x = 0; ++ child_allocation.y = 0; ++ ++ if (gtk_widget_get_realized (widget)) { ++ gdk_window_move_resize (self->view_window, ++ allocation->x, allocation->y, ++ allocation->width, allocation->height); ++ gdk_window_move_resize (self->bin_window, ++ 0, 0, ++ allocation->width, allocation->height); ++ } ++ ++ if (self->last_visible_child != NULL) { ++ int min, nat; ++ gtk_widget_get_preferred_width (self->last_visible_child->widget, &min, &nat); ++ child_allocation.width = MAX (min, allocation->width); ++ gtk_widget_get_preferred_height_for_width (self->last_visible_child->widget, ++ child_allocation.width, ++ &min, &nat); ++ child_allocation.height = MAX (min, allocation->height); ++ ++ gtk_widget_size_allocate (self->last_visible_child->widget, &child_allocation); ++ } ++ ++ child_allocation.width = allocation->width; ++ child_allocation.height = allocation->height; ++ ++ if (self->visible_child) { ++ int min, nat; ++ GtkAlign valign; ++ ++ gtk_widget_get_preferred_height_for_width (self->visible_child->widget, ++ allocation->width, ++ &min, &nat); ++ if (self->interpolate_size) { ++ valign = gtk_widget_get_valign (self->visible_child->widget); ++ child_allocation.height = MAX (nat, allocation->height); ++ if (valign == GTK_ALIGN_END && ++ child_allocation.height > allocation->height) ++ child_allocation.y -= nat - allocation->height; ++ else if (valign == GTK_ALIGN_CENTER && ++ child_allocation.height > allocation->height) ++ child_allocation.y -= (nat - allocation->height) / 2; ++ } ++ ++ gtk_widget_size_allocate (self->visible_child->widget, &child_allocation); ++ } ++} ++ ++/* This private method is prefixed by the class name because it will be a ++ * virtual method in GTK 4. ++ */ ++static void ++gtk_hdy_squeezer_measure (GtkWidget *widget, ++ GtkOrientation orientation, ++ int for_size, ++ int *minimum, ++ int *natural, ++ int *minimum_baseline, ++ int *natural_baseline) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (widget); ++ GtkHdySqueezerChildInfo *child_info; ++ GtkWidget *child; ++ gint child_min, child_nat; ++ GList *l; ++ ++ *minimum = 0; ++ *natural = 0; ++ ++ for (l = self->children; l != NULL; l = l->next) { ++ child_info = l->data; ++ child = child_info->widget; ++ ++ if (self->orientation != orientation && !self->homogeneous && ++ self->visible_child != child_info) ++ continue; ++ ++ if (!gtk_widget_get_visible (child)) ++ continue; ++ ++ /* Disabled children are taken into account when measuring the widget, to ++ * keep its size request and allocation consistent. This avoids the ++ * appearant size and position of a child to changes suddenly when a larger ++ * child gets enabled/disabled. ++ */ ++ ++ if (orientation == GTK_ORIENTATION_VERTICAL) { ++ if (for_size < 0) ++ gtk_widget_get_preferred_height (child, &child_min, &child_nat); ++ else ++ gtk_widget_get_preferred_height_for_width (child, for_size, &child_min, &child_nat); ++ } else { ++ if (for_size < 0) ++ gtk_widget_get_preferred_width (child, &child_min, &child_nat); ++ else ++ gtk_widget_get_preferred_width_for_height (child, for_size, &child_min, &child_nat); ++ } ++ ++ if (self->orientation == orientation) ++ *minimum = *minimum == 0 ? child_min : MIN (*minimum, child_min); ++ else ++ *minimum = MAX (*minimum, child_min); ++ *natural = MAX (*natural, child_nat); ++ } ++ ++ if (self->orientation != orientation && !self->homogeneous && ++ self->interpolate_size && ++ self->last_visible_child != NULL) { ++ gdouble t = gtk_progress_tracker_get_ease_out_cubic (&self->tracker, FALSE); ++ if (orientation == GTK_ORIENTATION_VERTICAL) { ++ *minimum = gtk_hdy_lerp (self->last_visible_widget_height, *minimum, t); ++ *natural = gtk_hdy_lerp (self->last_visible_widget_height, *natural, t); ++ } else { ++ *minimum = gtk_hdy_lerp (self->last_visible_widget_width, *minimum, t); ++ *natural = gtk_hdy_lerp (self->last_visible_widget_width, *natural, t); ++ } ++ } ++ ++ gtk_hdy_css_measure (widget, orientation, minimum, natural); ++} ++ ++static void ++gtk_hdy_squeezer_get_preferred_width (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_squeezer_measure (widget, GTK_ORIENTATION_HORIZONTAL, -1, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_squeezer_get_preferred_width_for_height (GtkWidget *widget, ++ gint height, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_squeezer_measure (widget, GTK_ORIENTATION_HORIZONTAL, height, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_squeezer_get_preferred_height (GtkWidget *widget, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_squeezer_measure (widget, GTK_ORIENTATION_VERTICAL, -1, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_squeezer_get_preferred_height_for_width (GtkWidget *widget, ++ gint width, ++ gint *minimum, ++ gint *natural) ++{ ++ gtk_hdy_squeezer_measure (widget, GTK_ORIENTATION_VERTICAL, width, ++ minimum, natural, NULL, NULL); ++} ++ ++static void ++gtk_hdy_squeezer_get_child_property (GtkContainer *container, ++ GtkWidget *widget, ++ guint property_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (container); ++ GtkHdySqueezerChildInfo *child_info; ++ ++ child_info = find_child_info_for_widget (self, widget); ++ if (child_info == NULL) { ++ g_param_value_set_default (pspec, value); ++ ++ return; ++ } ++ ++ switch (property_id) { ++ case CHILD_PROP_ENABLED: ++ g_value_set_boolean (value, gtk_hdy_squeezer_get_child_enabled (self, widget)); ++ break; ++ default: ++ GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_squeezer_set_child_property (GtkContainer *container, ++ GtkWidget *widget, ++ guint property_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (container); ++ GtkHdySqueezerChildInfo *child_info; ++ ++ child_info = find_child_info_for_widget (self, widget); ++ if (child_info == NULL) ++ return; ++ ++ switch (property_id) { ++ case CHILD_PROP_ENABLED: ++ gtk_hdy_squeezer_set_child_enabled (self, widget, g_value_get_boolean (value)); ++ break; ++ default: ++ GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_squeezer_dispose (GObject *object) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (object); ++ ++ self->visible_child = NULL; ++ ++ G_OBJECT_CLASS (gtk_hdy_squeezer_parent_class)->dispose (object); ++} ++ ++static void ++gtk_hdy_squeezer_finalize (GObject *object) ++{ ++ GtkHdySqueezer *self = GTK_HDY_SQUEEZER (object); ++ ++ gtk_hdy_squeezer_unschedule_ticks (self); ++ ++ if (self->last_visible_surface != NULL) ++ cairo_surface_destroy (self->last_visible_surface); ++ ++ G_OBJECT_CLASS (gtk_hdy_squeezer_parent_class)->finalize (object); ++} ++ ++static void ++gtk_hdy_squeezer_class_init (GtkHdySqueezerClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); ++ ++ object_class->get_property = gtk_hdy_squeezer_get_property; ++ object_class->set_property = gtk_hdy_squeezer_set_property; ++ object_class->dispose = gtk_hdy_squeezer_dispose; ++ object_class->finalize = gtk_hdy_squeezer_finalize; ++ ++ widget_class->size_allocate = gtk_hdy_squeezer_size_allocate; ++ widget_class->draw = gtk_hdy_squeezer_draw; ++ widget_class->realize = gtk_hdy_squeezer_realize; ++ widget_class->unrealize = gtk_hdy_squeezer_unrealize; ++ widget_class->map = gtk_hdy_squeezer_map; ++ widget_class->unmap = gtk_hdy_squeezer_unmap; ++ widget_class->get_preferred_height = gtk_hdy_squeezer_get_preferred_height; ++ widget_class->get_preferred_height_for_width = gtk_hdy_squeezer_get_preferred_height_for_width; ++ widget_class->get_preferred_width = gtk_hdy_squeezer_get_preferred_width; ++ widget_class->get_preferred_width_for_height = gtk_hdy_squeezer_get_preferred_width_for_height; ++ widget_class->compute_expand = gtk_hdy_squeezer_compute_expand; ++ ++ container_class->add = gtk_hdy_squeezer_add; ++ container_class->remove = gtk_hdy_squeezer_remove; ++ container_class->forall = gtk_hdy_squeezer_forall; ++ container_class->set_child_property = gtk_hdy_squeezer_set_child_property; ++ container_class->get_child_property = gtk_hdy_squeezer_get_child_property; ++ gtk_container_class_handle_border_width (container_class); ++ ++ g_object_class_override_property (object_class, ++ PROP_ORIENTATION, ++ "orientation"); ++ ++ props[PROP_HOMOGENEOUS] = ++ g_param_spec_boolean ("homogeneous", ++ _("Homogeneous"), ++ _("Homogeneous sizing"), ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_VISIBLE_CHILD] = ++ g_param_spec_object ("visible-child", ++ _("Visible child"), ++ _("The widget currently visible in the squeezer"), ++ GTK_TYPE_WIDGET, ++ G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_TRANSITION_DURATION] = ++ g_param_spec_uint ("transition-duration", ++ _("Transition duration"), ++ _("The animation duration, in milliseconds"), ++ 0, G_MAXUINT, 200, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_TRANSITION_TYPE] = ++ g_param_spec_enum ("transition-type", ++ _("Transition type"), ++ _("The type of animation used to transition"), ++ GTK_TYPE_HDY_SQUEEZER_TRANSITION_TYPE, ++ GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ props[PROP_TRANSITION_RUNNING] = ++ g_param_spec_boolean ("transition-running", ++ _("Transition running"), ++ _("Whether or not the transition is currently running"), ++ FALSE, ++ G_PARAM_READABLE); ++ ++ props[PROP_INTERPOLATE_SIZE] = ++ g_param_spec_boolean ("interpolate-size", ++ _("Interpolate size"), ++ _("Whether or not the size should smoothly change when changing between differently sized children"), ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdySqueezer:xalign: ++ * ++ * The xalign property determines the horizontal alignment of the children ++ * inside the squeezer's size allocation. ++ * Compare this to #GtkWidget:halign, which determines how the squeezer's size ++ * allocation is positioned in the space available for the squeezer. ++ * The range goes from 0 (start) to 1 (end). ++ * ++ * This will affect the position of children too wide to fit in the squeezer ++ * as they are fading out. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_XALIGN] = ++ g_param_spec_float ("xalign", ++ _("X align"), ++ _("The horizontal alignment, from 0 (start) to 1 (end)"), ++ 0.0, 1.0, ++ 0.5, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdySqueezer:yalign: ++ * ++ * The yalign property determines the vertical alignment of the children inside ++ * the squeezer's size allocation. ++ * Compare this to #GtkWidget:valign, which determines how the squeezer's size ++ * allocation is positioned in the space available for the squeezer. ++ * The range goes from 0 (top) to 1 (bottom). ++ * ++ * This will affect the position of children too tall to fit in the squeezer ++ * as they are fading out. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_YALIGN] = ++ g_param_spec_float ("yalign", ++ _("Y align"), ++ _("The vertical alignment, from 0 (top) to 1 (bottom)"), ++ 0.0, 1.0, ++ 0.5, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ child_props[CHILD_PROP_ENABLED] = ++ g_param_spec_boolean ("enabled", ++ _("Enabled"), ++ _("Whether the child can be picked or should be ignored when looking for the child fitting the available size best"), ++ TRUE, ++ G_PARAM_READWRITE); ++ ++ gtk_container_class_install_child_properties (container_class, LAST_CHILD_PROP, child_props); ++ ++ gtk_widget_class_set_css_name (widget_class, "squeezer"); ++} ++ ++static void ++gtk_hdy_squeezer_init (GtkHdySqueezer *self) ++{ ++ ++ gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); ++ ++ self->homogeneous = TRUE; ++ self->transition_duration = 200; ++ self->transition_type = GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE; ++ self->xalign = 0.5; ++ self->yalign = 0.5; ++} ++ ++/** ++ * gtk_hdy_squeezer_new: ++ * ++ * Creates a new #GtkHdySqueezer container. ++ * ++ * Returns: a new #GtkHdySqueezer ++ */ ++GtkWidget * ++gtk_hdy_squeezer_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_SQUEEZER, NULL); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_homogeneous: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets whether @self is homogeneous. ++ * ++ * See gtk_hdy_squeezer_set_homogeneous(). ++ * ++ * Returns: %TRUE if @self is homogeneous, %FALSE is not ++ * ++ * Since: 0.0.10 ++ */ ++gboolean ++gtk_hdy_squeezer_get_homogeneous (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), FALSE); ++ ++ return self->homogeneous; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_homogeneous: ++ * @self: a #GtkHdySqueezer ++ * @homogeneous: %TRUE to make @self homogeneous ++ * ++ * Sets @self to be homogeneous or not. If it is homogeneous, @self will request ++ * the same size for all its children for its opposite orientation, e.g. if ++ * @self is oriented horizontally and is homogeneous, it will request the same ++ * height for all its children. If it isn't, @self may change size when a ++ * different child becomes visible. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_squeezer_set_homogeneous (GtkHdySqueezer *self, ++ gboolean homogeneous) ++{ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ ++ homogeneous = !!homogeneous; ++ ++ if (self->homogeneous == homogeneous) ++ return; ++ ++ self->homogeneous = homogeneous; ++ ++ if (gtk_widget_get_visible (GTK_WIDGET(self))) ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HOMOGENEOUS]); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_transition_duration: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets the amount of time (in milliseconds) that transitions between children ++ * in @self will take. ++ * ++ * Returns: the transition duration ++ */ ++guint ++gtk_hdy_squeezer_get_transition_duration (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), 0); ++ ++ return self->transition_duration; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_transition_duration: ++ * @self: a #GtkHdySqueezer ++ * @duration: the new duration, in milliseconds ++ * ++ * Sets the duration that transitions between children in @self will take. ++ */ ++void ++gtk_hdy_squeezer_set_transition_duration (GtkHdySqueezer *self, ++ guint duration) ++{ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ ++ if (self->transition_duration == duration) ++ return; ++ ++ self->transition_duration = duration; ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_DURATION]); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_transition_type: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets the type of animation that will be used for transitions between children ++ * in @self. ++ * ++ * Returns: the current transition type of @self ++ */ ++GtkHdySqueezerTransitionType ++gtk_hdy_squeezer_get_transition_type (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), GTK_HDY_SQUEEZER_TRANSITION_TYPE_NONE); ++ ++ return self->transition_type; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_transition_type: ++ * @self: a #GtkHdySqueezer ++ * @transition: the new transition type ++ * ++ * Sets the type of animation that will be used for transitions between children ++ * in @self. Available types include various kinds of fades and slides. ++ * ++ * The transition type can be changed without problems at runtime, so it is ++ * possible to change the animation based on the child that is about to become ++ * current. ++ */ ++void ++gtk_hdy_squeezer_set_transition_type (GtkHdySqueezer *self, ++ GtkHdySqueezerTransitionType transition) ++{ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ ++ if (self->transition_type == transition) ++ return; ++ ++ self->transition_type = transition; ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TRANSITION_TYPE]); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_transition_running: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets whether @self is currently in a transition from one child to another. ++ * ++ * Returns: %TRUE if the transition is currently running, %FALSE otherwise. ++ */ ++gboolean ++gtk_hdy_squeezer_get_transition_running (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), FALSE); ++ ++ return (self->tick_id != 0); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_interpolate_size: ++ * @self: A #GtkHdySqueezer ++ * ++ * Gets whether @self should interpolate its size on visible child change. ++ * ++ * See gtk_hdy_squeezer_set_interpolate_size(). ++ * ++ * Returns: %TRUE if @self interpolates its size on visible child change, %FALSE if not ++ * ++ * Since: 0.0.10 ++ */ ++gboolean ++gtk_hdy_squeezer_get_interpolate_size (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), FALSE); ++ ++ return self->interpolate_size; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_interpolate_size: ++ * @self: A #GtkHdySqueezer ++ * @interpolate_size: %TRUE to interpolate the size ++ * ++ * Sets whether or not @self will interpolate the size of its opposing ++ * orientation when changing the visible child. If %TRUE, @self will interpolate ++ * its size between the one of the previous visible child and the one of the new ++ * visible child, according to the set transition duration and the orientation, ++ * e.g. if @self is horizontal, it will interpolate the its height. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_squeezer_set_interpolate_size (GtkHdySqueezer *self, ++ gboolean interpolate_size) ++{ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ ++ interpolate_size = !!interpolate_size; ++ ++ if (self->interpolate_size == interpolate_size) ++ return; ++ ++ self->interpolate_size = interpolate_size; ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_INTERPOLATE_SIZE]); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_visible_child: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets the currently visible child of @self, or %NULL if there are no visible ++ * children. ++ * ++ * Returns: (transfer none) (nullable): the visible child of the #GtkHdySqueezer ++ */ ++GtkWidget * ++gtk_hdy_squeezer_get_visible_child (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), NULL); ++ ++ return self->visible_child ? self->visible_child->widget : NULL; ++} ++ ++/** ++ * gtk_hdy_squeezer_get_child_enabled: ++ * @self: a #GtkHdySqueezer ++ * @child: a child of @self ++ * ++ * Gets whether @child is enabled. ++ * ++ * See gtk_hdy_squeezer_set_child_enabled(). ++ * ++ * Returns: %TRUE if @child is enabled, %FALSE otherwise. ++ */ ++gboolean ++gtk_hdy_squeezer_get_child_enabled (GtkHdySqueezer *self, ++ GtkWidget *child) ++{ ++ GtkHdySqueezerChildInfo *child_info; ++ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), FALSE); ++ g_return_val_if_fail (GTK_IS_WIDGET (child), FALSE); ++ ++ child_info = find_child_info_for_widget (self, child); ++ ++ g_return_val_if_fail (child_info != NULL, FALSE); ++ ++ return child_info->enabled; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_child_enabled: ++ * @self: a #GtkHdySqueezer ++ * @child: a child of @self ++ * @enabled: %TRUE to enable the child, %FALSE to disable it ++ * ++ * Make @self enable or disable @child. If a child is disabled, it will be ++ * ignored when looking for the child fitting the available size best. This ++ * allows to programmatically and prematurely hide a child of @self even if it ++ * fits in the available space. ++ * ++ * This can be used e.g. to ensure a certain child is hidden below a certain ++ * window width, or any other constraint you find suitable. ++ */ ++void ++gtk_hdy_squeezer_set_child_enabled (GtkHdySqueezer *self, ++ GtkWidget *child, ++ gboolean enabled) ++{ ++ GtkHdySqueezerChildInfo *child_info; ++ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ g_return_if_fail (GTK_IS_WIDGET (child)); ++ ++ child_info = find_child_info_for_widget (self, child); ++ ++ g_return_if_fail (child_info != NULL); ++ ++ enabled = !!enabled; ++ ++ if (child_info->enabled == enabled) ++ return; ++ ++ child_info->enabled = enabled; ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_xalign: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets the #GtkHdySqueezer:xalign property for @self. ++ * ++ * Returns: the xalign property ++ * ++ * Since: 1.0 ++ */ ++gfloat ++gtk_hdy_squeezer_get_xalign (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), 0.5); ++ ++ return self->xalign; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_xalign: ++ * @self: a #GtkHdySqueezer ++ * @xalign: the new xalign value, between 0 and 1 ++ * ++ * Sets the #GtkHdySqueezer:xalign property for @self. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_squeezer_set_xalign (GtkHdySqueezer *self, ++ gfloat xalign) ++{ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ ++ xalign = CLAMP (xalign, 0.0, 1.0); ++ ++ if (self->xalign == xalign) ++ return; ++ ++ self->xalign = xalign; ++ gtk_widget_queue_draw (GTK_WIDGET (self)); ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_XALIGN]); ++} ++ ++/** ++ * gtk_hdy_squeezer_get_yalign: ++ * @self: a #GtkHdySqueezer ++ * ++ * Gets the #GtkHdySqueezer:yalign property for @self. ++ * ++ * Returns: the yalign property ++ * ++ * Since: 1.0 ++ */ ++gfloat ++gtk_hdy_squeezer_get_yalign (GtkHdySqueezer *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SQUEEZER (self), 0.5); ++ ++ return self->yalign; ++} ++ ++/** ++ * gtk_hdy_squeezer_set_yalign: ++ * @self: a #GtkHdySqueezer ++ * @yalign: the new yalign value, between 0 and 1 ++ * ++ * Sets the #GtkHdySqueezer:yalign property for @self. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_squeezer_set_yalign (GtkHdySqueezer *self, ++ gfloat yalign) ++{ ++ g_return_if_fail (GTK_IS_HDY_SQUEEZER (self)); ++ ++ yalign = CLAMP (yalign, 0.0, 1.0); ++ ++ if (self->yalign == yalign) ++ return; ++ ++ self->yalign = yalign; ++ gtk_widget_queue_draw (GTK_WIDGET (self)); ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_YALIGN]); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 9fe7c4d..80ae1bf 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -385,6 +385,7 @@ gtk_sources = files( + 'gdkpixbufutils.c', + 'hdy-animation.c', + 'hdy-css.c', ++ 'hdy-squeezer.c', + 'hdy-view-switcher-bar.c', + 'hdy-view-switcher-button.c', + 'hdy-view-switcher.c', +@@ -396,7 +397,9 @@ gtk_private_type_headers = files( + 'gtkcsstypesprivate.h', + 'gtktexthandleprivate.h', + 'hdy-animation-private.h', ++ 'hdy-cairo-private.h', + 'hdy-css-private.h', ++ 'hdy-squeezer-private.h', + 'hdy-view-switcher-bar-private.h', + 'hdy-view-switcher-button-private.h', + 'hdy-view-switcher-private.h', diff --git a/gtk3-mobile/Add-GtkHdySwipeable-and-GtkHdySwipeTracker.patch b/gtk3-mobile/Add-GtkHdySwipeable-and-GtkHdySwipeTracker.patch new file mode 100644 index 0000000..3d630ed --- /dev/null +++ b/gtk3-mobile/Add-GtkHdySwipeable-and-GtkHdySwipeTracker.patch @@ -0,0 +1,1717 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 14 Oct 2020 17:10:54 +0500 +Subject: Add GtkHdySwipeable and GtkHdySwipeTracker + +This is imported from HdySwipeable and HdySwipeTracker from libhandy 1.0.2. +--- + gtk/hdy-swipe-tracker-private.h | 52 ++ + gtk/hdy-swipe-tracker.c | 1246 +++++++++++++++++++++++++++++++++++++++ + gtk/hdy-swipeable-private.h | 82 +++ + gtk/hdy-swipeable.c | 274 +++++++++ + gtk/meson.build | 4 + + 5 files changed, 1658 insertions(+) + create mode 100644 gtk/hdy-swipe-tracker-private.h + create mode 100644 gtk/hdy-swipe-tracker.c + create mode 100644 gtk/hdy-swipeable-private.h + create mode 100644 gtk/hdy-swipeable.c + +diff --git a/gtk/hdy-swipe-tracker-private.h b/gtk/hdy-swipe-tracker-private.h +new file mode 100644 +index 0000000..c886734 +--- /dev/null ++++ b/gtk/hdy-swipe-tracker-private.h +@@ -0,0 +1,52 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "hdy-navigation-direction-private.h" ++#include "hdy-swipeable-private.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_HDY_SWIPE_BORDER 32 ++ ++#define GTK_TYPE_HDY_SWIPE_TRACKER (gtk_hdy_swipe_tracker_get_type()) ++ ++G_DECLARE_FINAL_TYPE (GtkHdySwipeTracker, gtk_hdy_swipe_tracker, GTK, HDY_SWIPE_TRACKER, GObject) ++ ++GtkHdySwipeTracker *gtk_hdy_swipe_tracker_new (GtkHdySwipeable *swipeable); ++ ++GtkHdySwipeable *gtk_hdy_swipe_tracker_get_swipeable (GtkHdySwipeTracker *self); ++ ++gboolean gtk_hdy_swipe_tracker_get_enabled (GtkHdySwipeTracker *self); ++void gtk_hdy_swipe_tracker_set_enabled (GtkHdySwipeTracker *self, ++ gboolean enabled); ++ ++gboolean gtk_hdy_swipe_tracker_get_reversed (GtkHdySwipeTracker *self); ++void gtk_hdy_swipe_tracker_set_reversed (GtkHdySwipeTracker *self, ++ gboolean reversed); ++ ++gboolean gtk_hdy_swipe_tracker_get_allow_mouse_drag (GtkHdySwipeTracker *self); ++void gtk_hdy_swipe_tracker_set_allow_mouse_drag (GtkHdySwipeTracker *self, ++ gboolean allow_mouse_drag); ++ ++void gtk_hdy_swipe_tracker_shift_position (GtkHdySwipeTracker *self, ++ gdouble delta); ++ ++void gtk_hdy_swipe_tracker_emit_begin_swipe (GtkHdySwipeTracker *self, ++ GtkHdyNavigationDirection direction, ++ gboolean direct); ++void gtk_hdy_swipe_tracker_emit_update_swipe (GtkHdySwipeTracker *self, ++ gdouble progress); ++void gtk_hdy_swipe_tracker_emit_end_swipe (GtkHdySwipeTracker *self, ++ gint64 duration, ++ gdouble to); ++ ++G_END_DECLS +diff --git a/gtk/hdy-swipe-tracker.c b/gtk/hdy-swipe-tracker.c +new file mode 100644 +index 0000000..9c8161b +--- /dev/null ++++ b/gtk/hdy-swipe-tracker.c +@@ -0,0 +1,1246 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "hdy-swipe-tracker-private.h" ++ ++#include <gdk/gdk.h> ++#include "gtkbutton.h" ++#include "gtkgesture.h" ++#include "gtkgesturedrag.h" ++#include "gtkmain.h" ++#include "gtkorientable.h" ++#include "gtktypebuiltins.h" ++#include "gtkprivatetypebuiltins.h" ++#include "gtkwidget.h" ++#include "gtkwindow.h" ++ ++#include <math.h> ++ ++#define TOUCHPAD_BASE_DISTANCE_H 400 ++#define TOUCHPAD_BASE_DISTANCE_V 300 ++#define SCROLL_MULTIPLIER 10 ++#define MIN_ANIMATION_DURATION 100 ++#define MAX_ANIMATION_DURATION 400 ++#define VELOCITY_THRESHOLD 0.4 ++#define DURATION_MULTIPLIER 3 ++#define ANIMATION_BASE_VELOCITY 0.002 ++#define DRAG_THRESHOLD_DISTANCE 16 ++ ++/** ++ * SECTION:hdy-swipe-tracker ++ * @short_description: Swipe tracker used in #GtkHdyCarousel and #GtkHdyLeaflet ++ * @title: GtkHdySwipeTracker ++ * @See_also: #GtkHdyCarousel, #GtkHdyDeck, #GtkHdyLeaflet, #GtkHdySwipeable ++ * ++ * The GtkHdySwipeTracker object can be used for implementing widgets with swipe ++ * gestures. It supports touch-based swipes, pointer dragging, and touchpad ++ * scrolling. ++ * ++ * The widgets will probably want to expose #GtkHdySwipeTracker:enabled property. ++ * If they expect to use horizontal orientation, #GtkHdySwipeTracker:reversed ++ * property can be used for supporting RTL text direction. ++ * ++ * Since: 1.0 ++ */ ++ ++typedef enum { ++ GTK_HDY_SWIPE_TRACKER_STATE_NONE, ++ GTK_HDY_SWIPE_TRACKER_STATE_PENDING, ++ GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING, ++ GTK_HDY_SWIPE_TRACKER_STATE_FINISHING, ++ GTK_HDY_SWIPE_TRACKER_STATE_REJECTED, ++} GtkHdySwipeTrackerState; ++ ++struct _GtkHdySwipeTracker ++{ ++ GObject parent_instance; ++ ++ GtkHdySwipeable *swipeable; ++ gboolean enabled; ++ gboolean reversed; ++ gboolean allow_mouse_drag; ++ GtkOrientation orientation; ++ ++ gint start_x; ++ gint start_y; ++ gboolean use_capture_phase; ++ ++ guint32 prev_time; ++ gdouble velocity; ++ ++ gdouble initial_progress; ++ gdouble progress; ++ gboolean cancelled; ++ ++ gdouble prev_offset; ++ ++ gboolean is_scrolling; ++ ++ GtkHdySwipeTrackerState state; ++ GtkGesture *touch_gesture; ++}; ++ ++G_DEFINE_TYPE_WITH_CODE (GtkHdySwipeTracker, gtk_hdy_swipe_tracker, G_TYPE_OBJECT, ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)); ++ ++enum { ++ PROP_0, ++ PROP_SWIPEABLE, ++ PROP_ENABLED, ++ PROP_REVERSED, ++ PROP_ALLOW_MOUSE_DRAG, ++ ++ /* GtkOrientable */ ++ PROP_ORIENTATION, ++ LAST_PROP = PROP_ALLOW_MOUSE_DRAG + 1, ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++enum { ++ SIGNAL_BEGIN_SWIPE, ++ SIGNAL_UPDATE_SWIPE, ++ SIGNAL_END_SWIPE, ++ SIGNAL_LAST_SIGNAL, ++}; ++ ++static guint signals[SIGNAL_LAST_SIGNAL]; ++ ++static gboolean ++get_widget_coordinates (GtkHdySwipeTracker *self, ++ GdkEvent *event, ++ gdouble *x, ++ gdouble *y) ++{ ++ GdkWindow *window = gdk_event_get_window (event); ++ gdouble tx, ty, out_x = -1, out_y = -1; ++ ++ if (!gdk_event_get_coords (event, &tx, &ty)) ++ goto out; ++ ++ while (window && window != gtk_widget_get_window (GTK_WIDGET (self->swipeable))) { ++ gint window_x, window_y; ++ ++ gdk_window_get_position (window, &window_x, &window_y); ++ ++ tx += window_x; ++ ty += window_y; ++ ++ window = gdk_window_get_parent (window); ++ } ++ ++ if (window) { ++ out_x = tx; ++ out_y = ty; ++ goto out; ++ } ++ ++out: ++ if (x) ++ *x = out_x; ++ ++ if (y) ++ *y = out_y; ++ ++ return out_x >= 0 && out_y >= 0; ++} ++ ++static void ++reset (GtkHdySwipeTracker *self) ++{ ++ self->state = GTK_HDY_SWIPE_TRACKER_STATE_NONE; ++ ++ self->prev_offset = 0; ++ ++ self->initial_progress = 0; ++ self->progress = 0; ++ ++ self->start_x = 0; ++ self->start_y = 0; ++ self->use_capture_phase = FALSE; ++ ++ self->prev_time = 0; ++ self->velocity = 0; ++ ++ self->cancelled = FALSE; ++ ++ if (self->swipeable) ++ gtk_grab_remove (GTK_WIDGET (self->swipeable)); ++} ++ ++static void ++get_range (GtkHdySwipeTracker *self, ++ gdouble *first, ++ gdouble *last) ++{ ++ g_autofree gdouble *points = NULL; ++ gint n; ++ ++ points = gtk_hdy_swipeable_get_snap_points (self->swipeable, &n); ++ ++ *first = points[0]; ++ *last = points[n - 1]; ++} ++ ++static void ++gesture_prepare (GtkHdySwipeTracker *self, ++ GtkHdyNavigationDirection direction, ++ gboolean is_drag) ++{ ++ GdkRectangle rect; ++ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_NONE) ++ return; ++ ++ gtk_hdy_swipeable_get_swipe_area (self->swipeable, direction, is_drag, &rect); ++ ++ if (self->start_x < rect.x || ++ self->start_x >= rect.x + rect.width || ++ self->start_y < rect.y || ++ self->start_y >= rect.y + rect.height) { ++ self->state = GTK_HDY_SWIPE_TRACKER_STATE_REJECTED; ++ ++ return; ++ } ++ ++ gtk_hdy_swipe_tracker_emit_begin_swipe (self, direction, TRUE); ++ ++ self->initial_progress = gtk_hdy_swipeable_get_progress (self->swipeable); ++ self->progress = self->initial_progress; ++ self->velocity = 0; ++ self->state = GTK_HDY_SWIPE_TRACKER_STATE_PENDING; ++} ++ ++static void ++gesture_begin (GtkHdySwipeTracker *self) ++{ ++ g_autoptr (GdkEvent) event = NULL; ++ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_PENDING) ++ return; ++ ++ event = gtk_get_current_event (); ++ self->prev_time = gdk_event_get_time (event); ++ self->state = GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING; ++ ++ gtk_grab_add (GTK_WIDGET (self->swipeable)); ++} ++ ++static void ++gesture_update (GtkHdySwipeTracker *self, ++ gdouble delta) ++{ ++ g_autoptr (GdkEvent) event = NULL; ++ guint32 time; ++ gdouble progress; ++ gdouble first_point, last_point; ++ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) ++ return; ++ ++ event = gtk_get_current_event (); ++ time = gdk_event_get_time (event); ++ if (time != self->prev_time) ++ self->velocity = delta / (time - self->prev_time); ++ ++ get_range (self, &first_point, &last_point); ++ ++ progress = self->progress + delta; ++ progress = CLAMP (progress, first_point, last_point); ++ ++ /* FIXME: this is a hack to prevent swiping more than 1 page at once */ ++ progress = CLAMP (progress, self->initial_progress - 1, self->initial_progress + 1); ++ ++ self->progress = progress; ++ ++ gtk_hdy_swipe_tracker_emit_update_swipe (self, progress); ++ ++ self->prev_time = time; ++} ++ ++static void ++get_closest_snap_points (GtkHdySwipeTracker *self, ++ gdouble *upper, ++ gdouble *lower) ++{ ++ gint i, n; ++ gdouble *points; ++ ++ *upper = 0; ++ *lower = 0; ++ ++ points = gtk_hdy_swipeable_get_snap_points (self->swipeable, &n); ++ ++ for (i = 0; i < n; i++) { ++ if (points[i] >= self->progress) { ++ *upper = points[i]; ++ break; ++ } ++ } ++ ++ for (i = n - 1; i >= 0; i--) { ++ if (points[i] <= self->progress) { ++ *lower = points[i]; ++ break; ++ } ++ } ++ ++ g_free (points); ++} ++ ++static gdouble ++get_end_progress (GtkHdySwipeTracker *self, ++ gdouble distance) ++{ ++ gdouble upper, lower, middle; ++ ++ if (self->cancelled) ++ return gtk_hdy_swipeable_get_cancel_progress (self->swipeable); ++ ++ get_closest_snap_points (self, &upper, &lower); ++ middle = (upper + lower) / 2; ++ ++ if (self->progress > middle) ++ return (self->velocity * distance > -VELOCITY_THRESHOLD || ++ self->initial_progress > upper) ? upper : lower; ++ ++ return (self->velocity * distance < VELOCITY_THRESHOLD || ++ self->initial_progress < lower) ? lower : upper; ++} ++ ++static void ++gesture_end (GtkHdySwipeTracker *self, ++ gdouble distance) ++{ ++ gdouble end_progress, velocity; ++ gint64 duration; ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_NONE) ++ return; ++ ++ end_progress = get_end_progress (self, distance); ++ ++ velocity = ANIMATION_BASE_VELOCITY; ++ if ((end_progress - self->progress) * self->velocity > 0) ++ velocity = self->velocity; ++ ++ duration = ABS ((self->progress - end_progress) / velocity * DURATION_MULTIPLIER); ++ if (self->progress != end_progress) ++ duration = CLAMP (duration, MIN_ANIMATION_DURATION, MAX_ANIMATION_DURATION); ++ ++ gtk_hdy_swipe_tracker_emit_end_swipe (self, duration, end_progress); ++ ++ if (self->cancelled) ++ reset (self); ++ else ++ self->state = GTK_HDY_SWIPE_TRACKER_STATE_FINISHING; ++} ++ ++static void ++gesture_cancel (GtkHdySwipeTracker *self, ++ gdouble distance) ++{ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_PENDING && ++ self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) { ++ reset (self); ++ ++ return; ++ } ++ ++ self->cancelled = TRUE; ++ gesture_end (self, distance); ++} ++ ++static void ++drag_begin_cb (GtkHdySwipeTracker *self, ++ gdouble start_x, ++ gdouble start_y, ++ GtkGestureDrag *gesture) ++{ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_NONE) ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED); ++ ++ self->start_x = start_x; ++ self->start_y = start_y; ++} ++ ++static void ++drag_update_cb (GtkHdySwipeTracker *self, ++ gdouble offset_x, ++ gdouble offset_y, ++ GtkGestureDrag *gesture) ++{ ++ gdouble offset, distance; ++ gboolean is_vertical, is_offset_vertical; ++ ++ distance = gtk_hdy_swipeable_get_distance (self->swipeable); ++ ++ is_vertical = (self->orientation == GTK_ORIENTATION_VERTICAL); ++ if (is_vertical) ++ offset = -offset_y / distance; ++ else ++ offset = -offset_x / distance; ++ ++ if (self->reversed) ++ offset = -offset; ++ ++ is_offset_vertical = (ABS (offset_y) > ABS (offset_x)); ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_REJECTED) { ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED); ++ return; ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_NONE) { ++ if (is_vertical == is_offset_vertical) ++ gesture_prepare (self, offset > 0 ? GTK_HDY_NAVIGATION_DIRECTION_FORWARD : GTK_HDY_NAVIGATION_DIRECTION_BACK, TRUE); ++ else ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED); ++ return; ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_PENDING) { ++ gdouble drag_distance; ++ gdouble first_point, last_point; ++ gboolean is_overshooting; ++ ++ get_range (self, &first_point, &last_point); ++ ++ drag_distance = sqrt (offset_x * offset_x + offset_y * offset_y); ++ is_overshooting = (offset < 0 && self->progress <= first_point) || ++ (offset > 0 && self->progress >= last_point); ++ ++ if (drag_distance >= DRAG_THRESHOLD_DISTANCE) { ++ if ((is_vertical == is_offset_vertical) && !is_overshooting) { ++ gesture_begin (self); ++ self->prev_offset = offset; ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_CLAIMED); ++ } else { ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED); ++ } ++ } ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) { ++ gesture_update (self, offset - self->prev_offset); ++ self->prev_offset = offset; ++ } ++} ++ ++static void ++drag_end_cb (GtkHdySwipeTracker *self, ++ gdouble offset_x, ++ gdouble offset_y, ++ GtkGestureDrag *gesture) ++{ ++ gdouble distance; ++ ++ distance = gtk_hdy_swipeable_get_distance (self->swipeable); ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_REJECTED) { ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED); ++ ++ reset (self); ++ return; ++ } ++ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) { ++ gesture_cancel (self, distance); ++ gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED); ++ return; ++ } ++ ++ gesture_end (self, distance); ++} ++ ++static void ++drag_cancel_cb (GtkHdySwipeTracker *self, ++ GdkEventSequence *sequence, ++ GtkGesture *gesture) ++{ ++ gdouble distance; ++ ++ distance = gtk_hdy_swipeable_get_distance (self->swipeable); ++ ++ gesture_cancel (self, distance); ++ gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED); ++} ++ ++static gboolean ++handle_scroll_event (GtkHdySwipeTracker *self, ++ GdkEvent *event, ++ gboolean capture) ++{ ++ GdkDevice *source_device; ++ GdkInputSource input_source; ++ gdouble dx, dy, delta, distance; ++ gboolean is_vertical; ++ gboolean is_delta_vertical; ++ ++ is_vertical = (self->orientation == GTK_ORIENTATION_VERTICAL); ++ distance = is_vertical ? TOUCHPAD_BASE_DISTANCE_V : TOUCHPAD_BASE_DISTANCE_H; ++ ++ if (gdk_event_get_scroll_direction (event, NULL)) ++ return GDK_EVENT_PROPAGATE; ++ ++ source_device = gdk_event_get_source_device (event); ++ input_source = gdk_device_get_source (source_device); ++ if (input_source != GDK_SOURCE_TOUCHPAD) ++ return GDK_EVENT_PROPAGATE; ++ ++ gdk_event_get_scroll_deltas (event, &dx, &dy); ++ delta = is_vertical ? dy : dx; ++ if (self->reversed) ++ delta = -delta; ++ ++ is_delta_vertical = (ABS (dy) > ABS (dx)); ++ ++ if (self->is_scrolling) { ++ gesture_cancel (self, distance); ++ ++ if (gdk_event_is_scroll_stop_event (event)) ++ self->is_scrolling = FALSE; ++ ++ return GDK_EVENT_PROPAGATE; ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_REJECTED) { ++ if (gdk_event_is_scroll_stop_event (event)) ++ reset (self); ++ ++ return GDK_EVENT_PROPAGATE; ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_NONE) { ++ if (gdk_event_is_scroll_stop_event (event)) ++ return GDK_EVENT_PROPAGATE; ++ ++ if (is_vertical == is_delta_vertical) { ++ if (!capture) { ++ gdouble event_x, event_y; ++ ++ get_widget_coordinates (self, event, &event_x, &event_y); ++ ++ self->start_x = (gint) round (event_x); ++ self->start_y = (gint) round (event_y); ++ ++ gesture_prepare (self, delta > 0 ? GTK_HDY_NAVIGATION_DIRECTION_FORWARD : GTK_HDY_NAVIGATION_DIRECTION_BACK, FALSE); ++ } ++ } else { ++ self->is_scrolling = TRUE; ++ return GDK_EVENT_PROPAGATE; ++ } ++ } ++ ++ if (!capture && self->state == GTK_HDY_SWIPE_TRACKER_STATE_PENDING) { ++ gboolean is_overshooting; ++ gdouble first_point, last_point; ++ ++ get_range (self, &first_point, &last_point); ++ ++ is_overshooting = (delta < 0 && self->progress <= first_point) || ++ (delta > 0 && self->progress >= last_point); ++ ++ if ((is_vertical == is_delta_vertical) && !is_overshooting) ++ gesture_begin (self); ++ else ++ gesture_cancel (self, distance); ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) { ++ if (gdk_event_is_scroll_stop_event (event)) { ++ gesture_end (self, distance); ++ } else { ++ gesture_update (self, delta / distance * SCROLL_MULTIPLIER); ++ return GDK_EVENT_STOP; ++ } ++ } ++ ++ if (!capture && self->state == GTK_HDY_SWIPE_TRACKER_STATE_FINISHING) ++ reset (self); ++ ++ return GDK_EVENT_PROPAGATE; ++} ++ ++static gboolean ++is_window_handle (GtkWidget *widget) ++{ ++ gboolean window_dragging; ++ GtkWidget *parent, *window, *titlebar; ++ ++ gtk_widget_style_get (widget, "window-dragging", &window_dragging, NULL); ++ ++ if (window_dragging) ++ return TRUE; ++ ++ /* Window titlebar area is always draggable, so check if we're inside. */ ++ window = gtk_widget_get_toplevel (widget); ++ if (!GTK_IS_WINDOW (window)) ++ return FALSE; ++ ++ titlebar = gtk_window_get_titlebar (GTK_WINDOW (window)); ++ if (!titlebar) ++ return FALSE; ++ ++ parent = widget; ++ while (parent && parent != titlebar) ++ parent = gtk_widget_get_parent (parent); ++ ++ return parent == titlebar; ++} ++ ++static gboolean ++has_conflicts (GtkHdySwipeTracker *self, ++ GtkWidget *widget) ++{ ++ GtkHdySwipeTracker *other; ++ ++ if (widget == GTK_WIDGET (self->swipeable)) ++ return TRUE; ++ ++ if (!GTK_IS_HDY_SWIPEABLE (widget)) ++ return FALSE; ++ ++ other = gtk_hdy_swipeable_get_swipe_tracker (GTK_HDY_SWIPEABLE (widget)); ++ ++ return self->orientation == other->orientation; ++} ++ ++/* HACK: Since we don't have _gtk_widget_consumes_motion(), we can't do a proper ++ * check for whether we can drag from a widget or not. So we trust the widgets ++ * to propagate or stop their events. However, GtkButton stops press events, ++ * making it impossible to drag from it. ++ */ ++static gboolean ++should_force_drag (GtkHdySwipeTracker *self, ++ GtkWidget *widget) ++{ ++ GtkWidget *parent; ++ ++ if (!GTK_IS_BUTTON (widget)) ++ return FALSE; ++ ++ parent = widget; ++ while (parent && !has_conflicts (self, parent)) ++ parent = gtk_widget_get_parent (parent); ++ ++ return parent == GTK_WIDGET (self->swipeable); ++} ++ ++static gboolean ++handle_event_cb (GtkHdySwipeTracker *self, ++ GdkEvent *event) ++{ ++ GdkEventSequence *sequence; ++ gboolean retval; ++ GtkEventSequenceState state; ++ GtkWidget *widget; ++ ++ if (!self->enabled && self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) ++ return GDK_EVENT_PROPAGATE; ++ ++ if (self->use_capture_phase) ++ return GDK_EVENT_PROPAGATE; ++ ++ if (event->type == GDK_SCROLL) ++ return handle_scroll_event (self, event, FALSE); ++ ++ if (event->type != GDK_BUTTON_PRESS && ++ event->type != GDK_BUTTON_RELEASE && ++ event->type != GDK_MOTION_NOTIFY && ++ event->type != GDK_TOUCH_BEGIN && ++ event->type != GDK_TOUCH_END && ++ event->type != GDK_TOUCH_UPDATE && ++ event->type != GDK_TOUCH_CANCEL) ++ return GDK_EVENT_PROPAGATE; ++ ++ widget = gtk_get_event_widget (event); ++ if (is_window_handle (widget)) ++ return GDK_EVENT_PROPAGATE; ++ ++ sequence = gdk_event_get_event_sequence (event); ++ retval = gtk_event_controller_handle_event (GTK_EVENT_CONTROLLER (self->touch_gesture), event); ++ state = gtk_gesture_get_sequence_state (self->touch_gesture, sequence); ++ ++ if (state == GTK_EVENT_SEQUENCE_DENIED) { ++ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (self->touch_gesture)); ++ return GDK_EVENT_PROPAGATE; ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) { ++ return GDK_EVENT_STOP; ++ } else if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_FINISHING) { ++ reset (self); ++ return GDK_EVENT_STOP; ++ } ++ return retval; ++} ++ ++static gboolean ++captured_event_cb (GtkHdySwipeable *swipeable, ++ GdkEvent *event) ++{ ++ GtkHdySwipeTracker *self = gtk_hdy_swipeable_get_swipe_tracker (swipeable); ++ GtkWidget *widget; ++ GdkEventSequence *sequence; ++ gboolean retval; ++ GtkEventSequenceState state; ++ ++ g_assert (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ if (!self->enabled && self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) ++ return GDK_EVENT_PROPAGATE; ++ ++ if (event->type == GDK_SCROLL) ++ return handle_scroll_event (self, event, TRUE); ++ ++ if (event->type != GDK_BUTTON_PRESS && ++ event->type != GDK_BUTTON_RELEASE && ++ event->type != GDK_MOTION_NOTIFY && ++ event->type != GDK_TOUCH_BEGIN && ++ event->type != GDK_TOUCH_END && ++ event->type != GDK_TOUCH_UPDATE && ++ event->type != GDK_TOUCH_CANCEL) ++ return GDK_EVENT_PROPAGATE; ++ ++ widget = gtk_get_event_widget (event); ++ ++ if (!self->use_capture_phase && !should_force_drag (self, widget)) ++ return GDK_EVENT_PROPAGATE; ++ ++ sequence = gdk_event_get_event_sequence (event); ++ ++ if (gtk_gesture_handles_sequence (self->touch_gesture, sequence)) ++ self->use_capture_phase = TRUE; ++ ++ retval = gtk_event_controller_handle_event (GTK_EVENT_CONTROLLER (self->touch_gesture), event); ++ state = gtk_gesture_get_sequence_state (self->touch_gesture, sequence); ++ ++ if (state == GTK_EVENT_SEQUENCE_DENIED) { ++ gtk_event_controller_reset (GTK_EVENT_CONTROLLER (self->touch_gesture)); ++ return GDK_EVENT_PROPAGATE; ++ } ++ ++ if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) { ++ return GDK_EVENT_STOP; ++ } else if (self->state == GTK_HDY_SWIPE_TRACKER_STATE_FINISHING) { ++ reset (self); ++ return GDK_EVENT_STOP; ++ } ++ ++ return retval; ++} ++ ++static void ++gtk_hdy_swipe_tracker_constructed (GObject *object) ++{ ++ GtkHdySwipeTracker *self = GTK_HDY_SWIPE_TRACKER (object); ++ ++ g_assert (self->swipeable); ++ ++ gtk_widget_add_events (GTK_WIDGET (self->swipeable), ++ GDK_SMOOTH_SCROLL_MASK | ++ GDK_BUTTON_PRESS_MASK | ++ GDK_BUTTON_RELEASE_MASK | ++ GDK_BUTTON_MOTION_MASK | ++ GDK_TOUCH_MASK); ++ ++ self->touch_gesture = g_object_new (GTK_TYPE_GESTURE_DRAG, ++ "widget", self->swipeable, ++ "propagation-phase", GTK_PHASE_NONE, ++ "touch-only", !self->allow_mouse_drag, ++ NULL); ++ ++ g_signal_connect_swapped (self->touch_gesture, "drag-begin", G_CALLBACK (drag_begin_cb), self); ++ g_signal_connect_swapped (self->touch_gesture, "drag-update", G_CALLBACK (drag_update_cb), self); ++ g_signal_connect_swapped (self->touch_gesture, "drag-end", G_CALLBACK (drag_end_cb), self); ++ g_signal_connect_swapped (self->touch_gesture, "cancel", G_CALLBACK (drag_cancel_cb), self); ++ ++ g_signal_connect_object (self->swipeable, "event", G_CALLBACK (handle_event_cb), self, G_CONNECT_SWAPPED); ++ g_signal_connect_object (self->swipeable, "unrealize", G_CALLBACK (reset), self, G_CONNECT_SWAPPED); ++ ++ /* ++ * HACK: GTK3 has no other way to get events on capture phase. ++ * This is a reimplementation of _gtk_widget_set_captured_event_handler(), ++ * which is private. In GTK4 it can be replaced with GtkEventControllerLegacy ++ * with capture propagation phase ++ */ ++ g_object_set_data (G_OBJECT (self->swipeable), "captured-event-handler", captured_event_cb); ++ ++ G_OBJECT_CLASS (gtk_hdy_swipe_tracker_parent_class)->constructed (object); ++} ++ ++static void ++gtk_hdy_swipe_tracker_dispose (GObject *object) ++{ ++ GtkHdySwipeTracker *self = GTK_HDY_SWIPE_TRACKER (object); ++ ++ if (self->swipeable) ++ gtk_grab_remove (GTK_WIDGET (self->swipeable)); ++ ++ if (self->touch_gesture) ++ g_signal_handlers_disconnect_by_data (self->touch_gesture, self); ++ ++ g_object_set_data (G_OBJECT (self->swipeable), "captured-event-handler", NULL); ++ ++ g_clear_object (&self->touch_gesture); ++ g_clear_object (&self->swipeable); ++ ++ G_OBJECT_CLASS (gtk_hdy_swipe_tracker_parent_class)->dispose (object); ++} ++ ++static void ++gtk_hdy_swipe_tracker_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdySwipeTracker *self = GTK_HDY_SWIPE_TRACKER (object); ++ ++ switch (prop_id) { ++ case PROP_SWIPEABLE: ++ g_value_set_object (value, gtk_hdy_swipe_tracker_get_swipeable (self)); ++ break; ++ ++ case PROP_ENABLED: ++ g_value_set_boolean (value, gtk_hdy_swipe_tracker_get_enabled (self)); ++ break; ++ ++ case PROP_REVERSED: ++ g_value_set_boolean (value, gtk_hdy_swipe_tracker_get_reversed (self)); ++ break; ++ ++ case PROP_ALLOW_MOUSE_DRAG: ++ g_value_set_boolean (value, gtk_hdy_swipe_tracker_get_allow_mouse_drag (self)); ++ break; ++ ++ case PROP_ORIENTATION: ++ g_value_set_enum (value, self->orientation); ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_swipe_tracker_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdySwipeTracker *self = GTK_HDY_SWIPE_TRACKER (object); ++ ++ switch (prop_id) { ++ case PROP_SWIPEABLE: ++ self->swipeable = GTK_HDY_SWIPEABLE (g_object_ref (g_value_get_object (value))); ++ break; ++ ++ case PROP_ENABLED: ++ gtk_hdy_swipe_tracker_set_enabled (self, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_REVERSED: ++ gtk_hdy_swipe_tracker_set_reversed (self, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_ALLOW_MOUSE_DRAG: ++ gtk_hdy_swipe_tracker_set_allow_mouse_drag (self, g_value_get_boolean (value)); ++ break; ++ ++ case PROP_ORIENTATION: ++ { ++ GtkOrientation orientation = g_value_get_enum (value); ++ if (orientation != self->orientation) { ++ self->orientation = g_value_get_enum (value); ++ g_object_notify (G_OBJECT (self), "orientation"); ++ } ++ } ++ break; ++ ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ } ++} ++ ++static void ++gtk_hdy_swipe_tracker_class_init (GtkHdySwipeTrackerClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ ++ object_class->constructed = gtk_hdy_swipe_tracker_constructed; ++ object_class->dispose = gtk_hdy_swipe_tracker_dispose; ++ object_class->get_property = gtk_hdy_swipe_tracker_get_property; ++ object_class->set_property = gtk_hdy_swipe_tracker_set_property; ++ ++ /** ++ * GtkHdySwipeTracker:swipeable: ++ * ++ * The widget the swipe tracker is attached to. Must not be %NULL. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_SWIPEABLE] = ++ g_param_spec_object ("swipeable", ++ _("Swipeable"), ++ _("The swipeable the swipe tracker is attached to"), ++ GTK_TYPE_HDY_SWIPEABLE, ++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); ++ ++ /** ++ * GtkHdySwipeTracker:enabled: ++ * ++ * Whether the swipe tracker is enabled. When it's not enabled, no events ++ * will be processed. Usually widgets will want to expose this via a property. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_ENABLED] = ++ g_param_spec_boolean ("enabled", ++ _("Enabled"), ++ _("Whether the swipe tracker processes events"), ++ TRUE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdySwipeTracker:reversed: ++ * ++ * Whether to reverse the swipe direction. If the swipe tracker is horizontal, ++ * it can be used for supporting RTL text direction. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_REVERSED] = ++ g_param_spec_boolean ("reversed", ++ _("Reversed"), ++ _("Whether swipe direction is reversed"), ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdySwipeTracker:allow-mouse-drag: ++ * ++ * Whether to allow dragging with mouse pointer. This should usually be ++ * %FALSE. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_ALLOW_MOUSE_DRAG] = ++ g_param_spec_boolean ("allow-mouse-drag", ++ _("Allow mouse drag"), ++ _("Whether to allow dragging with mouse pointer"), ++ FALSE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ g_object_class_override_property (object_class, ++ PROP_ORIENTATION, ++ "orientation"); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ /** ++ * GtkHdySwipeTracker::begin-swipe: ++ * @self: The #GtkHdySwipeTracker instance ++ * @direction: The direction of the swipe ++ * @direct: %TRUE if the swipe is directly triggered by a gesture, ++ * %FALSE if it's triggered via a #GtkHdySwipeGroup ++ * ++ * This signal is emitted when a possible swipe is detected. ++ * ++ * The @direction value can be used to restrict the swipe to a certain ++ * direction. ++ * ++ * Since: 1.0 ++ */ ++ signals[SIGNAL_BEGIN_SWIPE] = ++ g_signal_new ("begin-swipe", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_FIRST, ++ 0, ++ NULL, NULL, NULL, ++ G_TYPE_NONE, ++ 2, ++ GTK_TYPE_HDY_NAVIGATION_DIRECTION, G_TYPE_BOOLEAN); ++ ++ /** ++ * GtkHdySwipeTracker::update-swipe: ++ * @self: The #GtkHdySwipeTracker instance ++ * @progress: The current animation progress value ++ * ++ * This signal is emitted every time the progress value changes. ++ * ++ * Since: 1.0 ++ */ ++ signals[SIGNAL_UPDATE_SWIPE] = ++ g_signal_new ("update-swipe", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_FIRST, ++ 0, ++ NULL, NULL, NULL, ++ G_TYPE_NONE, ++ 1, ++ G_TYPE_DOUBLE); ++ ++ /** ++ * GtkHdySwipeTracker::end-swipe: ++ * @self: The #GtkHdySwipeTracker instance ++ * @duration: Snap-back animation duration in milliseconds ++ * @to: The progress value to animate to ++ * ++ * This signal is emitted as soon as the gesture has stopped. ++ * ++ * Since: 1.0 ++ */ ++ signals[SIGNAL_END_SWIPE] = ++ g_signal_new ("end-swipe", ++ G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_FIRST, ++ 0, ++ NULL, NULL, NULL, ++ G_TYPE_NONE, ++ 2, ++ G_TYPE_INT64, G_TYPE_DOUBLE); ++} ++ ++static void ++gtk_hdy_swipe_tracker_init (GtkHdySwipeTracker *self) ++{ ++ reset (self); ++ self->orientation = GTK_ORIENTATION_HORIZONTAL; ++ self->enabled = TRUE; ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_new: ++ * @swipeable: a #GtkWidget to add the tracker on ++ * ++ * Create a new #GtkHdySwipeTracker object on @widget. ++ * ++ * Returns: the newly created #GtkHdySwipeTracker object ++ * ++ * Since: 1.0 ++ */ ++GtkHdySwipeTracker * ++gtk_hdy_swipe_tracker_new (GtkHdySwipeable *swipeable) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPEABLE (swipeable), NULL); ++ ++ return g_object_new (GTK_TYPE_HDY_SWIPE_TRACKER, ++ "swipeable", swipeable, ++ NULL); ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_get_swipeable: ++ * @self: a #GtkHdySwipeTracker ++ * ++ * Get @self's swipeable widget. ++ * ++ * Returns: (transfer none): the swipeable widget ++ * ++ * Since: 1.0 ++ */ ++GtkHdySwipeable * ++gtk_hdy_swipe_tracker_get_swipeable (GtkHdySwipeTracker *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self), NULL); ++ ++ return self->swipeable; ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_get_enabled: ++ * @self: a #GtkHdySwipeTracker ++ * ++ * Get whether @self is enabled. When it's not enabled, no events will be ++ * processed. Generally widgets will want to expose this via a property. ++ * ++ * Returns: %TRUE if @self is enabled ++ * ++ * Since: 1.0 ++ */ ++gboolean ++gtk_hdy_swipe_tracker_get_enabled (GtkHdySwipeTracker *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self), FALSE); ++ ++ return self->enabled; ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_set_enabled: ++ * @self: a #GtkHdySwipeTracker ++ * @enabled: whether to enable to swipe tracker ++ * ++ * Set whether @self is enabled. When it's not enabled, no events will be ++ * processed. Usually widgets will want to expose this via a property. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipe_tracker_set_enabled (GtkHdySwipeTracker *self, ++ gboolean enabled) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ enabled = !!enabled; ++ ++ if (self->enabled == enabled) ++ return; ++ ++ self->enabled = enabled; ++ ++ if (!enabled && self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) ++ reset (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENABLED]); ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_get_reversed: ++ * @self: a #GtkHdySwipeTracker ++ * ++ * Get whether @self is reversing the swipe direction. ++ * ++ * Returns: %TRUE is the direction is reversed ++ * ++ * Since: 1.0 ++ */ ++gboolean ++gtk_hdy_swipe_tracker_get_reversed (GtkHdySwipeTracker *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self), FALSE); ++ ++ return self->reversed; ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_set_reversed: ++ * @self: a #GtkHdySwipeTracker ++ * @reversed: whether to reverse the swipe direction ++ * ++ * Set whether to reverse the swipe direction. If @self is horizontal, ++ * can be used for supporting RTL text direction. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipe_tracker_set_reversed (GtkHdySwipeTracker *self, ++ gboolean reversed) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ reversed = !!reversed; ++ ++ if (self->reversed == reversed) ++ return; ++ ++ self->reversed = reversed; ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVERSED]); ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_get_allow_mouse_drag: ++ * @self: a #GtkHdySwipeTracker ++ * ++ * Get whether @self can be dragged with mouse pointer. ++ * ++ * Returns: %TRUE is mouse dragging is allowed ++ * ++ * Since: 1.0 ++ */ ++gboolean ++gtk_hdy_swipe_tracker_get_allow_mouse_drag (GtkHdySwipeTracker *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self), FALSE); ++ ++ return self->allow_mouse_drag; ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_set_allow_mouse_drag: ++ * @self: a #GtkHdySwipeTracker ++ * @allow_mouse_drag: whether to allow mouse dragging ++ * ++ * Set whether @self can be dragged with mouse pointer. This should usually be ++ * %FALSE. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipe_tracker_set_allow_mouse_drag (GtkHdySwipeTracker *self, ++ gboolean allow_mouse_drag) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ allow_mouse_drag = !!allow_mouse_drag; ++ ++ if (self->allow_mouse_drag == allow_mouse_drag) ++ return; ++ ++ self->allow_mouse_drag = allow_mouse_drag; ++ ++ if (self->touch_gesture) ++ g_object_set (self->touch_gesture, "touch-only", !allow_mouse_drag, NULL); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ALLOW_MOUSE_DRAG]); ++} ++ ++/** ++ * gtk_hdy_swipe_tracker_shift_position: ++ * @self: a #GtkHdySwipeTracker ++ * @delta: the position delta ++ * ++ * Move the current progress value by @delta. This can be used to adjust the ++ * current position if snap points move during the gesture. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipe_tracker_shift_position (GtkHdySwipeTracker *self, ++ gdouble delta) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ if (self->state != GTK_HDY_SWIPE_TRACKER_STATE_PENDING && ++ self->state != GTK_HDY_SWIPE_TRACKER_STATE_SCROLLING) ++ return; ++ ++ self->progress += delta; ++ self->initial_progress += delta; ++} ++ ++void ++gtk_hdy_swipe_tracker_emit_begin_swipe (GtkHdySwipeTracker *self, ++ GtkHdyNavigationDirection direction, ++ gboolean direct) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ g_signal_emit (self, signals[SIGNAL_BEGIN_SWIPE], 0, direction, direct); ++} ++ ++void ++gtk_hdy_swipe_tracker_emit_update_swipe (GtkHdySwipeTracker *self, ++ gdouble progress) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ g_signal_emit (self, signals[SIGNAL_UPDATE_SWIPE], 0, progress); ++} ++ ++void ++gtk_hdy_swipe_tracker_emit_end_swipe (GtkHdySwipeTracker *self, ++ gint64 duration, ++ gdouble to) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPE_TRACKER (self)); ++ ++ g_signal_emit (self, signals[SIGNAL_END_SWIPE], 0, duration, to); ++} +diff --git a/gtk/hdy-swipeable-private.h b/gtk/hdy-swipeable-private.h +new file mode 100644 +index 0000000..3c7ac4e +--- /dev/null ++++ b/gtk/hdy-swipeable-private.h +@@ -0,0 +1,82 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include <gdk/gdk.h> ++#include "gtkwidget.h" ++#include "hdy-navigation-direction-private.h" ++ ++G_BEGIN_DECLS ++ ++typedef struct _GtkHdySwipeTracker GtkHdySwipeTracker; ++ ++#define GTK_TYPE_HDY_SWIPEABLE (gtk_hdy_swipeable_get_type ()) ++ ++G_DECLARE_INTERFACE (GtkHdySwipeable, gtk_hdy_swipeable, GTK, HDY_SWIPEABLE, GtkWidget) ++ ++/** ++ * GtkHdySwipeableInterface: ++ * @parent: The parent interface. ++ * @switch_child: Switches visible child. ++ * @get_swipe_tracker: Gets the swipe tracker. ++ * @get_distance: Gets the swipe distance. ++ * @get_snap_points: Gets the snap points ++ * @get_progress: Gets the current progress. ++ * @get_cancel_progress: Gets the cancel progress. ++ * @get_swipe_area: Gets the swipeable rectangle. ++ * ++ * An interface for swipeable widgets. ++ * ++ * Since: 1.0 ++ **/ ++struct _GtkHdySwipeableInterface ++{ ++ GTypeInterface parent; ++ ++ void (*switch_child) (GtkHdySwipeable *self, ++ guint index, ++ gint64 duration); ++ ++ GtkHdySwipeTracker * (*get_swipe_tracker) (GtkHdySwipeable *self); ++ gdouble (*get_distance) (GtkHdySwipeable *self); ++ gdouble * (*get_snap_points) (GtkHdySwipeable *self, ++ gint *n_snap_points); ++ gdouble (*get_progress) (GtkHdySwipeable *self); ++ gdouble (*get_cancel_progress) (GtkHdySwipeable *self); ++ void (*get_swipe_area) (GtkHdySwipeable *self, ++ GtkHdyNavigationDirection navigation_direction, ++ gboolean is_drag, ++ GdkRectangle *rect); ++ ++ /*< private >*/ ++ gpointer padding[4]; ++}; ++ ++void gtk_hdy_swipeable_switch_child (GtkHdySwipeable *self, ++ guint index, ++ gint64 duration); ++ ++void gtk_hdy_swipeable_emit_child_switched (GtkHdySwipeable *self, ++ guint index, ++ gint64 duration); ++ ++GtkHdySwipeTracker *gtk_hdy_swipeable_get_swipe_tracker (GtkHdySwipeable *self); ++gdouble gtk_hdy_swipeable_get_distance (GtkHdySwipeable *self); ++gdouble *gtk_hdy_swipeable_get_snap_points (GtkHdySwipeable *self, ++ gint *n_snap_points); ++gdouble gtk_hdy_swipeable_get_progress (GtkHdySwipeable *self); ++gdouble gtk_hdy_swipeable_get_cancel_progress (GtkHdySwipeable *self); ++void gtk_hdy_swipeable_get_swipe_area (GtkHdySwipeable *self, ++ GtkHdyNavigationDirection navigation_direction, ++ gboolean is_drag, ++ GdkRectangle *rect); ++ ++G_END_DECLS +diff --git a/gtk/hdy-swipeable.c b/gtk/hdy-swipeable.c +new file mode 100644 +index 0000000..916abd9 +--- /dev/null ++++ b/gtk/hdy-swipeable.c +@@ -0,0 +1,274 @@ ++/* ++ * Copyright (C) 2019 Alexander Mikhaylenko <exalm7659@gmail.com> ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++ ++#include "hdy-swipeable-private.h" ++#include "hdy-swipe-tracker-private.h" ++ ++/** ++ * SECTION:gtk_hdy-swipeable ++ * @short_description: An interface for swipeable widgets. ++ * @title: GtkHdySwipeable ++ * @See_also: #GtkHdyCarousel, #GtkHdyDeck, #GtkHdyLeaflet, #GtkHdySwipeGroup ++ * ++ * The #GtkHdySwipeable interface is implemented by all swipeable widgets. They ++ * can be synced using #GtkHdySwipeGroup. ++ * ++ * See #GtkHdySwipeTracker for details about implementing it. ++ * ++ * Since: 0.0.12 ++ */ ++ ++G_DEFINE_INTERFACE (GtkHdySwipeable, gtk_hdy_swipeable, GTK_TYPE_WIDGET) ++ ++enum { ++ SIGNAL_CHILD_SWITCHED, ++ SIGNAL_LAST_SIGNAL, ++}; ++ ++static guint signals[SIGNAL_LAST_SIGNAL]; ++ ++static void ++gtk_hdy_swipeable_default_init (GtkHdySwipeableInterface *iface) ++{ ++ /** ++ * GtkHdySwipeable::child-switched: ++ * @self: The #GtkHdySwipeable instance ++ * @index: the index of the child to switch to ++ * @duration: Animation duration in milliseconds ++ * ++ * This signal should be emitted when the widget's visible child is changed. ++ * ++ * @duration can be 0 if the child is switched without animation. ++ * ++ * This is used by #GtkHdySwipeGroup, applications should not connect to it. ++ * ++ * Since: 1.0 ++ */ ++ signals[SIGNAL_CHILD_SWITCHED] = ++ g_signal_new ("child-switched", ++ G_TYPE_FROM_INTERFACE (iface), ++ G_SIGNAL_RUN_FIRST, ++ 0, ++ NULL, NULL, NULL, ++ G_TYPE_NONE, ++ 2, ++ G_TYPE_UINT, G_TYPE_INT64); ++} ++ ++/** ++ * gtk_hdy_swipeable_switch_child: ++ * @self: a #GtkHdySwipeable ++ * @index: the index of the child to switch to ++ * @duration: Animation duration in milliseconds ++ * ++ * See GtkHdySwipeable::child-switched. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipeable_switch_child (GtkHdySwipeable *self, ++ guint index, ++ gint64 duration) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_if_fail (GTK_IS_HDY_SWIPEABLE (self)); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ g_return_if_fail (iface->switch_child != NULL); ++ ++ iface->switch_child (self, index, duration); ++} ++ ++/** ++ * gtk_hdy_swipeable_emit_child_switched: ++ * @self: a #GtkHdySwipeable ++ * @index: the index of the child to switch to ++ * @duration: Animation duration in milliseconds ++ * ++ * Emits GtkHdySwipeable::child-switched signal. This should be called when the ++ * widget switches visible child widget. ++ * ++ * @duration can be 0 if the child is switched without animation. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipeable_emit_child_switched (GtkHdySwipeable *self, ++ guint index, ++ gint64 duration) ++{ ++ g_return_if_fail (GTK_IS_HDY_SWIPEABLE (self)); ++ ++ g_signal_emit (self, signals[SIGNAL_CHILD_SWITCHED], 0, index, duration); ++} ++ ++/** ++ * gtk_hdy_swipeable_get_swipe_tracker: ++ * @self: a #GtkHdySwipeable ++ * ++ * Gets the #GtkHdySwipeTracker used by this swipeable widget. ++ * ++ * Returns: (transfer none): the swipe tracker ++ * ++ * Since: 1.0 ++ */ ++GtkHdySwipeTracker * ++gtk_hdy_swipeable_get_swipe_tracker (GtkHdySwipeable *self) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPEABLE (self), NULL); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ g_return_val_if_fail (iface->get_swipe_tracker != NULL, NULL); ++ ++ return iface->get_swipe_tracker (self); ++} ++ ++/** ++ * gtk_hdy_swipeable_get_distance: ++ * @self: a #GtkHdySwipeable ++ * ++ * Gets the swipe distance of @self. This corresponds to how many pixels ++ * 1 unit represents. ++ * ++ * Returns: the swipe distance in pixels ++ * ++ * Since: 1.0 ++ */ ++gdouble ++gtk_hdy_swipeable_get_distance (GtkHdySwipeable *self) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPEABLE (self), 0); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ g_return_val_if_fail (iface->get_distance != NULL, 0); ++ ++ return iface->get_distance (self); ++} ++ ++/** ++ * gtk_hdy_swipeable_get_snap_points: (virtual get_snap_points) ++ * @self: a #GtkHdySwipeable ++ * @n_snap_points: (out): location to return the number of the snap points ++ * ++ * Gets the snap points of @self. Each snap point represents a progress value ++ * that is considered acceptable to end the swipe on. ++ * ++ * Returns: (array length=n_snap_points) (transfer full): the snap points of ++ * @self. The array must be freed with g_free(). ++ * ++ * Since: 1.0 ++ */ ++gdouble * ++gtk_hdy_swipeable_get_snap_points (GtkHdySwipeable *self, ++ gint *n_snap_points) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPEABLE (self), NULL); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ g_return_val_if_fail (iface->get_snap_points != NULL, NULL); ++ ++ return iface->get_snap_points (self, n_snap_points); ++} ++ ++/** ++ * gtk_hdy_swipeable_get_progress: ++ * @self: a #GtkHdySwipeable ++ * ++ * Gets the current progress of @self ++ * ++ * Returns: the current progress, unitless ++ * ++ * Since: 1.0 ++ */ ++gdouble ++gtk_hdy_swipeable_get_progress (GtkHdySwipeable *self) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPEABLE (self), 0); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ g_return_val_if_fail (iface->get_progress != NULL, 0); ++ ++ return iface->get_progress (self); ++} ++ ++/** ++ * gtk_hdy_swipeable_get_cancel_progress: ++ * @self: a #GtkHdySwipeable ++ * ++ * Gets the progress @self will snap back to after the gesture is canceled. ++ * ++ * Returns: the cancel progress, unitless ++ * ++ * Since: 1.0 ++ */ ++gdouble ++gtk_hdy_swipeable_get_cancel_progress (GtkHdySwipeable *self) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_val_if_fail (GTK_IS_HDY_SWIPEABLE (self), 0); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ g_return_val_if_fail (iface->get_cancel_progress != NULL, 0); ++ ++ return iface->get_cancel_progress (self); ++} ++ ++/** ++ * gtk_hdy_swipeable_get_swipe_area: ++ * @self: a #GtkHdySwipeable ++ * @navigation_direction: the direction of the swipe ++ * @is_drag: whether the swipe is caused by a dragging gesture ++ * @rect: (out): a pointer to a #GdkRectangle to store the swipe area ++ * ++ * Gets the area @self can start a swipe from for the given direction and ++ * gesture type. ++ * This can be used to restrict swipes to only be possible from a certain area, ++ * for example, to only allow edge swipes, or to have a draggable element and ++ * ignore swipes elsewhere. ++ * ++ * Swipe area is only considered for direct swipes (as in, not initiated by ++ * #GtkHdySwipeGroup). ++ * ++ * If not implemented, the default implementation returns the allocation of ++ * @self, allowing swipes from anywhere. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_swipeable_get_swipe_area (GtkHdySwipeable *self, ++ GtkHdyNavigationDirection navigation_direction, ++ gboolean is_drag, ++ GdkRectangle *rect) ++{ ++ GtkHdySwipeableInterface *iface; ++ ++ g_return_if_fail (GTK_IS_HDY_SWIPEABLE (self)); ++ g_return_if_fail (rect != NULL); ++ ++ iface = GTK_HDY_SWIPEABLE_GET_IFACE (self); ++ ++ if (iface->get_swipe_area) { ++ iface->get_swipe_area (self, navigation_direction, is_drag, rect); ++ return; ++ } ++ ++ rect->x = 0; ++ rect->y = 0; ++ rect->width = gtk_widget_get_allocated_width (GTK_WIDGET (self)); ++ rect->height = gtk_widget_get_allocated_height (GTK_WIDGET (self)); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 7407f5b..ae63ff0 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -388,6 +388,8 @@ gtk_sources = files( + 'hdy-navigation-direction.c', + 'hdy-shadow-helper.c', + 'hdy-squeezer.c', ++ 'hdy-swipeable.c', ++ 'hdy-swipe-tracker.c', + 'hdy-view-switcher-bar.c', + 'hdy-view-switcher-button.c', + 'hdy-view-switcher.c', +@@ -405,6 +407,8 @@ gtk_private_type_headers = files( + 'hdy-navigation-direction-private.h', + 'hdy-shadow-helper-private.h', + 'hdy-squeezer-private.h', ++ 'hdy-swipeable-private.h', ++ 'hdy-swipe-tracker-private.h', + 'hdy-view-switcher-bar-private.h', + 'hdy-view-switcher-button-private.h', + 'hdy-view-switcher-private.h', diff --git a/gtk3-mobile/Add-GtkHdyViewSwitcher.patch b/gtk3-mobile/Add-GtkHdyViewSwitcher.patch new file mode 100644 index 0000000..aef7c96 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyViewSwitcher.patch @@ -0,0 +1,953 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 31 Aug 2020 10:40:08 +0200 +Subject: Add GtkHdyViewSwitcher + +This is imported from HdyViewSwitcher from libhandy 1.0.1. +--- + gtk/gtkprivate.h | 1 + + gtk/hdy-css-private.h | 25 ++ + gtk/hdy-css.c | 74 ++++ + gtk/hdy-view-switcher-private.h | 43 +++ + gtk/hdy-view-switcher.c | 733 ++++++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 4 + + 6 files changed, 880 insertions(+) + create mode 100644 gtk/hdy-css-private.h + create mode 100644 gtk/hdy-css.c + create mode 100644 gtk/hdy-view-switcher-private.h + create mode 100644 gtk/hdy-view-switcher.c + +diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h +index dcab28d..473bb99 100644 +--- a/gtk/gtkprivate.h ++++ b/gtk/gtkprivate.h +@@ -30,6 +30,7 @@ + + #include "gtkcsstypesprivate.h" + #include "gtktexthandleprivate.h" ++#include "hdy-view-switcher-private.h" + + G_BEGIN_DECLS + +diff --git a/gtk/hdy-css-private.h b/gtk/hdy-css-private.h +new file mode 100644 +index 0000000..3f5fca8 +--- /dev/null ++++ b/gtk/hdy-css-private.h +@@ -0,0 +1,25 @@ ++/* ++ * Copyright (C) 2020 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkwidget.h" ++ ++G_BEGIN_DECLS ++ ++void gtk_hdy_css_measure (GtkWidget *widget, ++ GtkOrientation orientation, ++ gint *minimum, ++ gint *natural); ++ ++void gtk_hdy_css_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation); ++ ++G_END_DECLS +diff --git a/gtk/hdy-css.c b/gtk/hdy-css.c +new file mode 100644 +index 0000000..16cbc01 +--- /dev/null ++++ b/gtk/hdy-css.c +@@ -0,0 +1,74 @@ ++/* ++ * Copyright (C) 2020 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++ ++#include "hdy-css-private.h" ++#include "gtkstylecontext.h" ++ ++void ++gtk_hdy_css_measure (GtkWidget *widget, ++ GtkOrientation orientation, ++ gint *minimum, ++ gint *natural) ++{ ++ GtkStyleContext *style_context = gtk_widget_get_style_context (widget); ++ GtkStateFlags state_flags = gtk_widget_get_state_flags (widget); ++ GtkBorder border, margin, padding; ++ gint css_width, css_height; ++ ++ /* Manually apply minimum sizes, the border, the padding and the margin as we ++ * can't use the private GtkGagdet. ++ */ ++ gtk_style_context_get (style_context, state_flags, ++ "min-width", &css_width, ++ "min-height", &css_height, ++ NULL); ++ gtk_style_context_get_border (style_context, state_flags, &border); ++ gtk_style_context_get_margin (style_context, state_flags, &margin); ++ gtk_style_context_get_padding (style_context, state_flags, &padding); ++ if (orientation == GTK_ORIENTATION_VERTICAL) { ++ *minimum = MAX (*minimum, css_height) + ++ border.top + margin.top + padding.top + ++ border.bottom + margin.bottom + padding.bottom; ++ *natural = MAX (*natural, css_height) + ++ border.top + margin.top + padding.top + ++ border.bottom + margin.bottom + padding.bottom; ++ } else { ++ *minimum = MAX (*minimum, css_width) + ++ border.left + margin.left + padding.left + ++ border.right + margin.right + padding.right; ++ *natural = MAX (*natural, css_width) + ++ border.left + margin.left + padding.left + ++ border.right + margin.right + padding.right; ++ } ++} ++ ++void ++gtk_hdy_css_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation) ++{ ++ GtkStyleContext *style_context; ++ GtkStateFlags state_flags; ++ GtkBorder border, margin, padding; ++ ++ /* Manually apply the border, the padding and the margin as we can't use the ++ * private GtkGagdet. ++ */ ++ style_context = gtk_widget_get_style_context (widget); ++ state_flags = gtk_widget_get_state_flags (widget); ++ gtk_style_context_get_border (style_context, state_flags, &border); ++ gtk_style_context_get_margin (style_context, state_flags, &margin); ++ gtk_style_context_get_padding (style_context, state_flags, &padding); ++ allocation->width -= border.left + border.right + ++ margin.left + margin.right + ++ padding.left + padding.right; ++ allocation->height -= border.top + border.bottom + ++ margin.top + margin.bottom + ++ padding.top + padding.bottom; ++ allocation->x += border.left + margin.left + padding.left; ++ allocation->y += border.top + margin.top + padding.top; ++} +diff --git a/gtk/hdy-view-switcher-private.h b/gtk/hdy-view-switcher-private.h +new file mode 100644 +index 0000000..6267afd +--- /dev/null ++++ b/gtk/hdy-view-switcher-private.h +@@ -0,0 +1,43 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkbin.h" ++#include "gtkstack.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_VIEW_SWITCHER (gtk_hdy_view_switcher_get_type()) ++ ++typedef enum { ++ GTK_HDY_VIEW_SWITCHER_POLICY_AUTO, ++ GTK_HDY_VIEW_SWITCHER_POLICY_NARROW, ++ GTK_HDY_VIEW_SWITCHER_POLICY_WIDE, ++} GtkHdyViewSwitcherPolicy; ++ ++G_DECLARE_FINAL_TYPE (GtkHdyViewSwitcher, gtk_hdy_view_switcher, GTK, HDY_VIEW_SWITCHER, GtkBin) ++ ++GtkWidget *hdy_view_switcher_new (void); ++ ++GtkHdyViewSwitcherPolicy gtk_hdy_view_switcher_get_policy (GtkHdyViewSwitcher *self); ++void gtk_hdy_view_switcher_set_policy (GtkHdyViewSwitcher *self, ++ GtkHdyViewSwitcherPolicy policy); ++ ++PangoEllipsizeMode gtk_hdy_view_switcher_get_narrow_ellipsize (GtkHdyViewSwitcher *self); ++void gtk_hdy_view_switcher_set_narrow_ellipsize (GtkHdyViewSwitcher *self, ++ PangoEllipsizeMode mode); ++ ++GtkStack *gtk_hdy_view_switcher_get_stack (GtkHdyViewSwitcher *self); ++void gtk_hdy_view_switcher_set_stack (GtkHdyViewSwitcher *self, ++ GtkStack *stack); ++ ++G_END_DECLS +diff --git a/gtk/hdy-view-switcher.c b/gtk/hdy-view-switcher.c +new file mode 100644 +index 0000000..2664b3e +--- /dev/null ++++ b/gtk/hdy-view-switcher.c +@@ -0,0 +1,733 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * Based on gtkstackswitcher.c, Copyright (c) 2013 Red Hat, Inc. ++ * https://gitlab.gnome.org/GNOME/gtk/blob/a0129f556b1fd655215165739d0277d7f7a2c1a8/gtk/gtkstackswitcher.c ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "gtkbox.h" ++#include "gtkdragdest.h" ++#include "gtkorientable.h" ++#include "gtkprivatetypebuiltins.h" ++#include "hdy-css-private.h" ++#include "hdy-view-switcher-button-private.h" ++#include "hdy-view-switcher-private.h" ++ ++/** ++ * SECTION:gtk-hdy-view-switcher ++ * @short_description: An adaptive view switcher. ++ * @title: GtkHdyViewSwitcher ++ * ++ * An adaptive view switcher, designed to switch between multiple views in a ++ * similar fashion than a #GtkStackSwitcher. ++ * ++ * Depending on the available width, the view switcher can adapt from a wide ++ * mode showing the view's icon and title side by side, to a narrow mode showing ++ * the view's icon and title one on top of the other, in a more compact way. ++ * This can be controlled via the policy property. ++ * ++ * To look good in a header bar, an #GtkHdyViewSwitcher requires to fill its full ++ * height. Contrary to #GtkHeaderBar, #GtkHdyHeaderBar doesn't force a vertical ++ * alignment on its title widget, so we recommend it over #GtkHeaderBar. ++ * ++ * # CSS nodes ++ * ++ * #GtkHdyViewSwitcher has a single CSS node with name viewswitcher. ++ * ++ * Since: 0.0.10 ++ */ ++ ++#define MIN_NAT_BUTTON_WIDTH 100 ++#define TIMEOUT_EXPAND 500 ++ ++enum { ++ PROP_0, ++ PROP_POLICY, ++ PROP_NARROW_ELLIPSIZE, ++ PROP_STACK, ++ LAST_PROP, ++}; ++ ++struct _GtkHdyViewSwitcher ++{ ++ GtkBin parent_instance; ++ ++ GtkWidget *box; ++ GHashTable *buttons; ++ gboolean in_child_changed; ++ GtkWidget *switch_button; ++ guint switch_timer; ++ ++ GtkHdyViewSwitcherPolicy policy; ++ PangoEllipsizeMode narrow_ellipsize; ++ GtkStack *stack; ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++G_DEFINE_TYPE (GtkHdyViewSwitcher, gtk_hdy_view_switcher, GTK_TYPE_BIN) ++ ++static void ++set_visible_stack_child_for_button (GtkHdyViewSwitcher *self, ++ GtkHdyViewSwitcherButton *button) ++{ ++ if (self->in_child_changed) ++ return; ++ ++ gtk_stack_set_visible_child (self->stack, GTK_WIDGET (g_object_get_data (G_OBJECT (button), "stack-child"))); ++} ++ ++static void ++update_button (GtkHdyViewSwitcher *self, ++ GtkWidget *widget, ++ GtkHdyViewSwitcherButton *button) ++{ ++ g_autofree gchar *title = NULL; ++ g_autofree gchar *icon_name = NULL; ++ gboolean needs_attention; ++ ++ gtk_container_child_get (GTK_CONTAINER (self->stack), widget, ++ "title", &title, ++ "icon-name", &icon_name, ++ "needs-attention", &needs_attention, ++ NULL); ++ ++ g_object_set (G_OBJECT (button), ++ "icon-name", icon_name, ++ "icon-size", GTK_ICON_SIZE_BUTTON, ++ "label", title, ++ "needs-attention", needs_attention, ++ NULL); ++ ++ gtk_widget_set_visible (GTK_WIDGET (button), ++ gtk_widget_get_visible (widget) && (title != NULL || icon_name != NULL)); ++} ++ ++static void ++on_stack_child_updated (GtkWidget *widget, ++ GParamSpec *pspec, ++ GtkHdyViewSwitcher *self) ++{ ++ update_button (self, widget, g_hash_table_lookup (self->buttons, widget)); ++} ++ ++static void ++on_position_updated (GtkWidget *widget, ++ GParamSpec *pspec, ++ GtkHdyViewSwitcher *self) ++{ ++ GtkWidget *button = g_hash_table_lookup (self->buttons, widget); ++ gint position; ++ ++ gtk_container_child_get (GTK_CONTAINER (self->stack), widget, ++ "position", &position, ++ NULL); ++ gtk_box_reorder_child (GTK_BOX (self->box), button, position); ++} ++ ++static void ++remove_switch_timer (GtkHdyViewSwitcher *self) ++{ ++ if (!self->switch_timer) ++ return; ++ ++ g_source_remove (self->switch_timer); ++ self->switch_timer = 0; ++} ++ ++static gboolean ++gtk_hdy_view_switcher_switch_timeout (gpointer data) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (data); ++ GtkWidget *button = self->switch_button; ++ ++ self->switch_timer = 0; ++ self->switch_button = NULL; ++ ++ if (button) ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static gboolean ++gtk_hdy_view_switcher_drag_motion (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (widget); ++ GtkAllocation allocation; ++ GtkWidget *button; ++ GHashTableIter iter; ++ gpointer value; ++ gboolean retval = FALSE; ++ ++ gtk_widget_get_allocation (widget, &allocation); ++ ++ x += allocation.x; ++ y += allocation.y; ++ ++ button = NULL; ++ g_hash_table_iter_init (&iter, self->buttons); ++ while (g_hash_table_iter_next (&iter, NULL, &value)) { ++ gtk_widget_get_allocation (GTK_WIDGET (value), &allocation); ++ if (x >= allocation.x && x <= allocation.x + allocation.width && ++ y >= allocation.y && y <= allocation.y + allocation.height) { ++ button = GTK_WIDGET (value); ++ retval = TRUE; ++ ++ break; ++ } ++ } ++ ++ if (button != self->switch_button) ++ remove_switch_timer (self); ++ ++ self->switch_button = button; ++ ++ if (button && !self->switch_timer) { ++ self->switch_timer = gdk_threads_add_timeout (TIMEOUT_EXPAND, ++ gtk_hdy_view_switcher_switch_timeout, ++ self); ++ g_source_set_name_by_id (self->switch_timer, "[gtk+] gtk_hdy_view_switcher_switch_timeout"); ++ } ++ ++ return retval; ++} ++ ++static void ++gtk_hdy_view_switcher_drag_leave (GtkWidget *widget, ++ GdkDragContext *context, ++ guint time) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (widget); ++ ++ remove_switch_timer (self); ++} ++ ++static void ++add_button_for_stack_child (GtkHdyViewSwitcher *self, ++ GtkWidget *stack_child) ++{ ++ g_autoptr (GList) children = gtk_container_get_children (GTK_CONTAINER (self->box)); ++ GtkHdyViewSwitcherButton *button = GTK_HDY_VIEW_SWITCHER_BUTTON (gtk_hdy_view_switcher_button_new ()); ++ ++ g_object_set_data (G_OBJECT (button), "stack-child", stack_child); ++ gtk_hdy_view_switcher_button_set_narrow_ellipsize (button, self->narrow_ellipsize); ++ ++ update_button (self, stack_child, button); ++ ++ if (children != NULL) ++ gtk_radio_button_join_group (GTK_RADIO_BUTTON (button), GTK_RADIO_BUTTON (children->data)); ++ ++ gtk_container_add (GTK_CONTAINER (self->box), GTK_WIDGET (button)); ++ ++ g_signal_connect_swapped (button, "clicked", G_CALLBACK (set_visible_stack_child_for_button), self); ++ g_signal_connect (stack_child, "notify::visible", G_CALLBACK (on_stack_child_updated), self); ++ g_signal_connect (stack_child, "child-notify::title", G_CALLBACK (on_stack_child_updated), self); ++ g_signal_connect (stack_child, "child-notify::icon-name", G_CALLBACK (on_stack_child_updated), self); ++ g_signal_connect (stack_child, "child-notify::needs-attention", G_CALLBACK (on_stack_child_updated), self); ++ g_signal_connect (stack_child, "child-notify::position", G_CALLBACK (on_position_updated), self); ++ ++ g_hash_table_insert (self->buttons, stack_child, button); ++} ++ ++static void ++add_button_for_stack_child_cb (GtkWidget *stack_child, ++ GtkHdyViewSwitcher *self) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self)); ++ g_return_if_fail (GTK_IS_WIDGET (stack_child)); ++ ++ add_button_for_stack_child (self, stack_child); ++} ++ ++static void ++remove_button_for_stack_child (GtkHdyViewSwitcher *self, ++ GtkWidget *stack_child) ++{ ++ g_signal_handlers_disconnect_by_func (stack_child, on_stack_child_updated, self); ++ g_signal_handlers_disconnect_by_func (stack_child, on_position_updated, self); ++ gtk_container_remove (GTK_CONTAINER (self->box), g_hash_table_lookup (self->buttons, stack_child)); ++ g_hash_table_remove (self->buttons, stack_child); ++} ++ ++static void ++remove_button_for_stack_child_cb (GtkWidget *stack_child, ++ GtkHdyViewSwitcher *self) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self)); ++ g_return_if_fail (GTK_IS_WIDGET (stack_child)); ++ ++ remove_button_for_stack_child (self, stack_child); ++} ++ ++static void ++update_active_button_for_visible_stack_child (GtkHdyViewSwitcher *self) ++{ ++ GtkWidget *visible_stack_child = gtk_stack_get_visible_child (self->stack); ++ GtkWidget *button = g_hash_table_lookup (self->buttons, visible_stack_child); ++ ++ if (button == NULL) ++ return; ++ ++ self->in_child_changed = TRUE; ++ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); ++ self->in_child_changed = FALSE; ++} ++ ++static void ++disconnect_stack_signals (GtkHdyViewSwitcher *self) ++{ ++ g_signal_handlers_disconnect_by_func (self->stack, add_button_for_stack_child, self); ++ g_signal_handlers_disconnect_by_func (self->stack, remove_button_for_stack_child, self); ++ g_signal_handlers_disconnect_by_func (self->stack, update_active_button_for_visible_stack_child, self); ++ g_signal_handlers_disconnect_by_func (self->stack, disconnect_stack_signals, self); ++} ++ ++static void ++connect_stack_signals (GtkHdyViewSwitcher *self) ++{ ++ g_signal_connect_object (self->stack, "add", ++ G_CALLBACK (add_button_for_stack_child), self, ++ G_CONNECT_AFTER | G_CONNECT_SWAPPED); ++ g_signal_connect_object (self->stack, "remove", ++ G_CALLBACK (remove_button_for_stack_child), self, ++ G_CONNECT_AFTER | G_CONNECT_SWAPPED); ++ g_signal_connect_object (self->stack, "notify::visible-child", ++ G_CALLBACK (update_active_button_for_visible_stack_child), self, ++ G_CONNECT_SWAPPED); ++ g_signal_connect_object (self->stack, "destroy", ++ G_CALLBACK (disconnect_stack_signals), self, ++ G_CONNECT_SWAPPED); ++} ++ ++static void ++gtk_hdy_view_switcher_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (object); ++ ++ switch (prop_id) { ++ case PROP_POLICY: ++ g_value_set_enum (value, gtk_hdy_view_switcher_get_policy (self)); ++ break; ++ case PROP_NARROW_ELLIPSIZE: ++ g_value_set_enum (value, gtk_hdy_view_switcher_get_narrow_ellipsize (self)); ++ break; ++ case PROP_STACK: ++ g_value_set_object (value, gtk_hdy_view_switcher_get_stack (self)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (object); ++ ++ switch (prop_id) { ++ case PROP_POLICY: ++ gtk_hdy_view_switcher_set_policy (self, g_value_get_enum (value)); ++ break; ++ case PROP_NARROW_ELLIPSIZE: ++ gtk_hdy_view_switcher_set_narrow_ellipsize (self, g_value_get_enum (value)); ++ break; ++ case PROP_STACK: ++ gtk_hdy_view_switcher_set_stack (self, g_value_get_object (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_dispose (GObject *object) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (object); ++ ++ remove_switch_timer (self); ++ gtk_hdy_view_switcher_set_stack (self, NULL); ++ ++ G_OBJECT_CLASS (gtk_hdy_view_switcher_parent_class)->dispose (object); ++} ++ ++static void ++gtk_hdy_view_switcher_finalize (GObject *object) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (object); ++ ++ g_hash_table_destroy (self->buttons); ++ ++ G_OBJECT_CLASS (gtk_hdy_view_switcher_parent_class)->finalize (object); ++} ++ ++static void ++gtk_hdy_view_switcher_get_preferred_width (GtkWidget *widget, ++ gint *min, ++ gint *nat) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (widget); ++ g_autoptr (GList) children = gtk_container_get_children (GTK_CONTAINER (self->box)); ++ gint max_h_min = 0, max_h_nat = 0, max_v_min = 0, max_v_nat = 0; ++ gint n_children = 0; ++ ++ for (GList *l = children; l != NULL; l = g_list_next (l)) { ++ gint h_min = 0, h_nat = 0, v_min = 0, v_nat = 0; ++ ++ if (!gtk_widget_get_visible (l->data)) ++ continue; ++ ++ gtk_hdy_view_switcher_button_get_size (GTK_HDY_VIEW_SWITCHER_BUTTON (l->data), &h_min, &h_nat, &v_min, &v_nat); ++ max_h_min = MAX (h_min, max_h_min); ++ max_h_nat = MAX (h_nat, max_h_nat); ++ max_v_min = MAX (v_min, max_v_min); ++ max_v_nat = MAX (v_nat, max_v_nat); ++ ++ n_children++; ++ } ++ ++ /* Make the buttons ask at least a minimum arbitrary size for their natural ++ * width. This prevents them from looking terribly narrow in a very wide bar. ++ */ ++ max_h_nat = MAX (max_h_nat, MIN_NAT_BUTTON_WIDTH); ++ max_v_nat = MAX (max_v_nat, MIN_NAT_BUTTON_WIDTH); ++ ++ switch (self->policy) { ++ case GTK_HDY_VIEW_SWITCHER_POLICY_NARROW: ++ *min = max_v_min * n_children; ++ *nat = max_v_nat * n_children; ++ break; ++ case GTK_HDY_VIEW_SWITCHER_POLICY_WIDE: ++ *min = max_h_min * n_children; ++ *nat = max_h_nat * n_children; ++ break; ++ case GTK_HDY_VIEW_SWITCHER_POLICY_AUTO: ++ default: ++ *min = max_v_min * n_children; ++ *nat = max_h_nat * n_children; ++ break; ++ } ++ ++ gtk_hdy_css_measure (widget, GTK_ORIENTATION_HORIZONTAL, min, nat); ++} ++ ++static gint ++is_narrow (GtkHdyViewSwitcher *self, ++ gint width) ++{ ++ g_autoptr (GList) children = gtk_container_get_children (GTK_CONTAINER (self->box)); ++ gint max_h_min = 0; ++ gint n_children = 0; ++ ++ if (self->policy == GTK_HDY_VIEW_SWITCHER_POLICY_NARROW) ++ return TRUE; ++ ++ if (self->policy == GTK_HDY_VIEW_SWITCHER_POLICY_WIDE) ++ return FALSE; ++ ++ for (GList *l = children; l != NULL; l = g_list_next (l)) { ++ gint h_min = 0; ++ ++ if (!gtk_widget_get_visible (l->data)) ++ continue; ++ ++ gtk_hdy_view_switcher_button_get_size (GTK_HDY_VIEW_SWITCHER_BUTTON (l->data), &h_min, NULL, NULL, NULL); ++ max_h_min = MAX (max_h_min, h_min); ++ ++ n_children++; ++ } ++ ++ return (max_h_min * n_children) > width; ++} ++ ++static void ++gtk_hdy_view_switcher_size_allocate (GtkWidget *widget, ++ GtkAllocation *allocation) ++{ ++ GtkHdyViewSwitcher *self = GTK_HDY_VIEW_SWITCHER (widget); ++ ++ g_autoptr (GList) children = gtk_container_get_children (GTK_CONTAINER (self->box)); ++ GtkOrientation orientation; ++ ++ gtk_hdy_css_size_allocate (widget, allocation); ++ ++ orientation = is_narrow (GTK_HDY_VIEW_SWITCHER (widget), allocation->width) ? ++ GTK_ORIENTATION_VERTICAL : ++ GTK_ORIENTATION_HORIZONTAL; ++ ++ for (GList *l = children; l != NULL; l = g_list_next (l)) ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (l->data), orientation); ++ ++ GTK_WIDGET_CLASS (gtk_hdy_view_switcher_parent_class)->size_allocate (widget, allocation); ++} ++ ++static void ++gtk_hdy_view_switcher_class_init (GtkHdyViewSwitcherClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ ++ object_class->get_property = gtk_hdy_view_switcher_get_property; ++ object_class->set_property = gtk_hdy_view_switcher_set_property; ++ object_class->dispose = gtk_hdy_view_switcher_dispose; ++ object_class->finalize = gtk_hdy_view_switcher_finalize; ++ ++ widget_class->size_allocate = gtk_hdy_view_switcher_size_allocate; ++ widget_class->get_preferred_width = gtk_hdy_view_switcher_get_preferred_width; ++ widget_class->drag_motion = gtk_hdy_view_switcher_drag_motion; ++ widget_class->drag_leave = gtk_hdy_view_switcher_drag_leave; ++ ++ /** ++ * GtkHdyViewSwitcher:policy: ++ * ++ * The #GtkHdyViewSwitcherPolicy the view switcher should use to determine which ++ * mode to use. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_POLICY] = ++ g_param_spec_enum ("policy", ++ _("Policy"), ++ _("The policy to determine the mode to use"), ++ GTK_TYPE_HDY_VIEW_SWITCHER_POLICY, GTK_HDY_VIEW_SWITCHER_POLICY_AUTO, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcher:narrow-ellipsize: ++ * ++ * The preferred place to ellipsize the string, if the narrow mode label does ++ * not have enough room to display the entire string, specified as a ++ * #PangoEllipsizeMode. ++ * ++ * Note that setting this property to a value other than %PANGO_ELLIPSIZE_NONE ++ * has the side-effect that the label requests only enough space to display ++ * the ellipsis. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_NARROW_ELLIPSIZE] = ++ g_param_spec_enum ("narrow-ellipsize", ++ _("Narrow ellipsize"), ++ _("The preferred place to ellipsize the string, if the narrow mode label does not have enough room to display the entire string"), ++ PANGO_TYPE_ELLIPSIZE_MODE, ++ PANGO_ELLIPSIZE_NONE, ++ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); ++ ++ /** ++ * GtkHdyViewSwitcher:stack: ++ * ++ * The #GtkStack the view switcher controls. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_STACK] = ++ g_param_spec_object ("stack", ++ _("Stack"), ++ _("Stack"), ++ GTK_TYPE_STACK, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ gtk_widget_class_set_css_name (widget_class, "viewswitcher"); ++} ++ ++static void ++gtk_hdy_view_switcher_init (GtkHdyViewSwitcher *self) ++{ ++ self->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++ gtk_widget_show (self->box); ++ gtk_box_set_homogeneous (GTK_BOX (self->box), TRUE); ++ gtk_container_add (GTK_CONTAINER (self), self->box); ++ ++ self->buttons = g_hash_table_new (g_direct_hash, g_direct_equal); ++ ++ gtk_widget_set_valign (GTK_WIDGET (self), GTK_ALIGN_FILL); ++ ++ gtk_drag_dest_set (GTK_WIDGET (self), 0, NULL, 0, 0); ++ gtk_drag_dest_set_track_motion (GTK_WIDGET (self), TRUE); ++} ++ ++/** ++ * gtk_hdy_view_switcher_new: ++ * ++ * Creates a new #GtkHdyViewSwitcher widget. ++ * ++ * Returns: a new #GtkHdyViewSwitcher ++ * ++ * Since: 0.0.10 ++ */ ++GtkWidget * ++gtk_hdy_view_switcher_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_VIEW_SWITCHER, NULL); ++} ++ ++/** ++ * gtk_hdy_view_switcher_get_policy: ++ * @self: a #GtkHdyViewSwitcher ++ * ++ * Gets the policy of @self. ++ * ++ * Returns: the policy of @self ++ * ++ * Since: 0.0.10 ++ */ ++GtkHdyViewSwitcherPolicy ++gtk_hdy_view_switcher_get_policy (GtkHdyViewSwitcher *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self), GTK_HDY_VIEW_SWITCHER_POLICY_AUTO); ++ ++ return self->policy; ++} ++ ++/** ++ * gtk_hdy_view_switcher_set_policy: ++ * @self: a #GtkHdyViewSwitcher ++ * @policy: the new policy ++ * ++ * Sets the policy of @self. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_set_policy (GtkHdyViewSwitcher *self, ++ GtkHdyViewSwitcherPolicy policy) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self)); ++ ++ if (self->policy == policy) ++ return; ++ ++ self->policy = policy; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_POLICY]); ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++/** ++ * gtk_hdy_view_switcher_get_narrow_ellipsize: ++ * @self: a #GtkHdyViewSwitcher ++ * ++ * Get the ellipsizing position of the narrow mode label. See ++ * gtk_hdy_view_switcher_set_narrow_ellipsize(). ++ * ++ * Returns: #PangoEllipsizeMode ++ * ++ * Since: 0.0.10 ++ **/ ++PangoEllipsizeMode ++gtk_hdy_view_switcher_get_narrow_ellipsize (GtkHdyViewSwitcher *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self), PANGO_ELLIPSIZE_NONE); ++ ++ return self->narrow_ellipsize; ++} ++ ++/** ++ * gtk_hdy_view_switcher_set_narrow_ellipsize: ++ * @self: a #GtkHdyViewSwitcher ++ * @mode: a #PangoEllipsizeMode ++ * ++ * Set the mode used to ellipsize the text in narrow mode if there is not ++ * enough space to render the entire string. ++ * ++ * Since: 0.0.10 ++ **/ ++void ++gtk_hdy_view_switcher_set_narrow_ellipsize (GtkHdyViewSwitcher *self, ++ PangoEllipsizeMode mode) ++{ ++ GHashTableIter iter; ++ gpointer button; ++ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self)); ++ g_return_if_fail (mode >= PANGO_ELLIPSIZE_NONE && mode <= PANGO_ELLIPSIZE_END); ++ ++ if ((PangoEllipsizeMode) self->narrow_ellipsize == mode) ++ return; ++ ++ self->narrow_ellipsize = mode; ++ ++ g_hash_table_iter_init (&iter, self->buttons); ++ while (g_hash_table_iter_next (&iter, NULL, &button)) ++ gtk_hdy_view_switcher_button_set_narrow_ellipsize (GTK_HDY_VIEW_SWITCHER_BUTTON (button), mode); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NARROW_ELLIPSIZE]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_get_stack: ++ * @self: a #GtkHdyViewSwitcher ++ * ++ * Get the #GtkStack being controlled by the #GtkHdyViewSwitcher. ++ * ++ * See: gtk_hdy_view_switcher_set_stack() ++ * ++ * Returns: (nullable) (transfer none): the #GtkStack, or %NULL if none has been set ++ * ++ * Since: 0.0.10 ++ */ ++GtkStack * ++gtk_hdy_view_switcher_get_stack (GtkHdyViewSwitcher *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self), NULL); ++ ++ return self->stack; ++} ++ ++/** ++ * gtk_hdy_view_switcher_set_stack: ++ * @self: a #GtkHdyViewSwitcher ++ * @stack: (nullable): a #GtkStack ++ * ++ * Sets the #GtkStack to control. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_set_stack (GtkHdyViewSwitcher *self, ++ GtkStack *stack) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER (self)); ++ g_return_if_fail (stack == NULL || GTK_IS_STACK (stack)); ++ ++ if (self->stack == stack) ++ return; ++ ++ if (self->stack) { ++ disconnect_stack_signals (self); ++ gtk_container_foreach (GTK_CONTAINER (self->stack), (GtkCallback) remove_button_for_stack_child_cb, self); ++ } ++ ++ g_set_object (&self->stack, stack); ++ ++ if (self->stack) { ++ gtk_container_foreach (GTK_CONTAINER (self->stack), (GtkCallback) add_button_for_stack_child_cb, self); ++ update_active_button_for_visible_stack_child (self); ++ connect_stack_signals (self); ++ } ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STACK]); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 38b810c..1054e29 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -383,7 +383,9 @@ gtk_sources = files( + 'gtkwin32draw.c', + 'gtkwin32theme.c', + 'gdkpixbufutils.c', ++ 'hdy-css.c', + 'hdy-view-switcher-button.c', ++ 'hdy-view-switcher.c', + 'language-names.c', + 'script-names.c', + ) +@@ -391,7 +393,9 @@ gtk_sources = files( + gtk_private_type_headers = files( + 'gtkcsstypesprivate.h', + 'gtktexthandleprivate.h', ++ 'hdy-css-private.h', + 'hdy-view-switcher-button-private.h', ++ 'hdy-view-switcher-private.h', + ) + + gtk_gir_public_headers = files( diff --git a/gtk3-mobile/Add-GtkHdyViewSwitcherBar.patch b/gtk3-mobile/Add-GtkHdyViewSwitcherBar.patch new file mode 100644 index 0000000..9410ea3 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyViewSwitcherBar.patch @@ -0,0 +1,509 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 31 Aug 2020 10:40:14 +0200 +Subject: Add GtkHdyViewSwitcherBar + +This is imported from HdyViewSwitcherBar from libhandy 1.0.0. +--- + gtk/hdy-view-switcher-bar-private.h | 38 ++++ + gtk/hdy-view-switcher-bar.c | 398 ++++++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + gtk/ui/hdy-view-switcher-bar.ui | 20 ++ + 4 files changed, 458 insertions(+) + create mode 100644 gtk/hdy-view-switcher-bar-private.h + create mode 100644 gtk/hdy-view-switcher-bar.c + create mode 100644 gtk/ui/hdy-view-switcher-bar.ui + +diff --git a/gtk/hdy-view-switcher-bar-private.h b/gtk/hdy-view-switcher-bar-private.h +new file mode 100644 +index 0000000..a1d942a +--- /dev/null ++++ b/gtk/hdy-view-switcher-bar-private.h +@@ -0,0 +1,38 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkbin.h" ++#include "gtkstack.h" ++#include "hdy-view-switcher-private.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_VIEW_SWITCHER_BAR (gtk_hdy_view_switcher_bar_get_type()) ++ ++G_DECLARE_FINAL_TYPE (GtkHdyViewSwitcherBar, gtk_hdy_view_switcher_bar, GTK, HDY_VIEW_SWITCHER_BAR, GtkBin) ++ ++GtkWidget *gtk_hdy_view_switcher_bar_new (void); ++ ++GtkHdyViewSwitcherPolicy gtk_hdy_view_switcher_bar_get_policy (GtkHdyViewSwitcherBar *self); ++void gtk_hdy_view_switcher_bar_set_policy (GtkHdyViewSwitcherBar *self, ++ GtkHdyViewSwitcherPolicy policy); ++ ++GtkStack *gtk_hdy_view_switcher_bar_get_stack (GtkHdyViewSwitcherBar *self); ++void gtk_hdy_view_switcher_bar_set_stack (GtkHdyViewSwitcherBar *self, ++ GtkStack *stack); ++ ++gboolean gtk_hdy_view_switcher_bar_get_reveal (GtkHdyViewSwitcherBar *self); ++void gtk_hdy_view_switcher_bar_set_reveal (GtkHdyViewSwitcherBar *self, ++ gboolean reveal); ++ ++G_END_DECLS +diff --git a/gtk/hdy-view-switcher-bar.c b/gtk/hdy-view-switcher-bar.c +new file mode 100644 +index 0000000..39d2aa4 +--- /dev/null ++++ b/gtk/hdy-view-switcher-bar.c +@@ -0,0 +1,398 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "gtkactionbar.h" ++#include "gtkrevealer.h" ++#include "gtkprivatetypebuiltins.h" ++#include "hdy-view-switcher-bar-private.h" ++#include "hdy-view-switcher-private.h" ++ ++/** ++ * SECTION:hdy-view-switcher-bar ++ * @short_description: A view switcher action bar. ++ * @title: GtkHdyViewSwitcherBar ++ * @See_also: #GtkHdyViewSwitcher, #GtkHdyViewSwitcherTitle ++ * ++ * An action bar letting you switch between multiple views offered by a ++ * #GtkStack, via an #GtkHdyViewSwitcher. It is designed to be put at the bottom of ++ * a window and to be revealed only on really narrow windows e.g. on mobile ++ * phones. It can't be revealed if there are less than two pages. ++ * ++ * You can conveniently bind the #GtkHdyViewSwitcherBar:reveal property to ++ * #GtkHdyViewSwitcherTitle:title-visible to automatically reveal the view switcher ++ * bar when the title label is displayed in place of the view switcher. ++ * ++ * An example of the UI definition for a common use case: ++ * |[ ++ * <object class="GtkWindow"/> ++ * <child type="titlebar"> ++ * <object class="HdyHeaderBar"> ++ * <property name="centering-policy">strict</property> ++ * <child type="title"> ++ * <object class="GtkHdyViewSwitcherTitle" ++ * id="view_switcher_title"> ++ * <property name="stack">stack</property> ++ * </object> ++ * </child> ++ * </object> ++ * </child> ++ * <child> ++ * <object class="GtkBox"> ++ * <child> ++ * <object class="GtkStack" id="stack"/> ++ * </child> ++ * <child> ++ * <object class="GtkHdyViewSwitcherBar"> ++ * <property name="stack">stack</property> ++ * <property name="reveal" ++ * bind-source="view_switcher_title" ++ * bind-property="title-visible" ++ * bind-flags="sync-create"/> ++ * </object> ++ * </child> ++ * </object> ++ * </child> ++ * </object> ++ * ]| ++ * ++ * # CSS nodes ++ * ++ * #GtkHdyViewSwitcherBar has a single CSS node with name viewswitcherbar. ++ * ++ * Since: 0.0.10 ++ */ ++ ++enum { ++ PROP_0, ++ PROP_POLICY, ++ PROP_STACK, ++ PROP_REVEAL, ++ LAST_PROP, ++}; ++ ++struct _GtkHdyViewSwitcherBar ++{ ++ GtkBin parent_instance; ++ ++ GtkActionBar *action_bar; ++ GtkRevealer *revealer; ++ GtkHdyViewSwitcher *view_switcher; ++ ++ GtkHdyViewSwitcherPolicy policy; ++ gboolean reveal; ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++G_DEFINE_TYPE (GtkHdyViewSwitcherBar, gtk_hdy_view_switcher_bar, GTK_TYPE_BIN) ++ ++static void ++count_children_cb (GtkWidget *widget, ++ gint *count) ++{ ++ (*count)++; ++} ++ ++static void ++update_bar_revealed (GtkHdyViewSwitcherBar *self) ++{ ++ GtkStack *stack = gtk_hdy_view_switcher_get_stack (self->view_switcher); ++ gint count = 0; ++ ++ if (self->reveal && stack) ++ gtk_container_foreach (GTK_CONTAINER (stack), (GtkCallback) count_children_cb, &count); ++ ++ gtk_revealer_set_reveal_child (self->revealer, count > 1); ++} ++ ++static void ++gtk_hdy_view_switcher_bar_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcherBar *self = GTK_HDY_VIEW_SWITCHER_BAR (object); ++ ++ switch (prop_id) { ++ case PROP_POLICY: ++ g_value_set_enum (value, gtk_hdy_view_switcher_bar_get_policy (self)); ++ break; ++ case PROP_STACK: ++ g_value_set_object (value, gtk_hdy_view_switcher_bar_get_stack (self)); ++ break; ++ case PROP_REVEAL: ++ g_value_set_boolean (value, gtk_hdy_view_switcher_bar_get_reveal (self)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_bar_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcherBar *self = GTK_HDY_VIEW_SWITCHER_BAR (object); ++ ++ switch (prop_id) { ++ case PROP_POLICY: ++ gtk_hdy_view_switcher_bar_set_policy (self, g_value_get_enum (value)); ++ break; ++ case PROP_STACK: ++ gtk_hdy_view_switcher_bar_set_stack (self, g_value_get_object (value)); ++ break; ++ case PROP_REVEAL: ++ gtk_hdy_view_switcher_bar_set_reveal (self, g_value_get_boolean (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_bar_class_init (GtkHdyViewSwitcherBarClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ ++ object_class->get_property = gtk_hdy_view_switcher_bar_get_property; ++ object_class->set_property = gtk_hdy_view_switcher_bar_set_property; ++ ++ /** ++ * GtkHdyViewSwitcherBar:policy: ++ * ++ * The #GtkHdyViewSwitcherPolicy the #GtkHdyViewSwitcher should use to determine ++ * which mode to use. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_POLICY] = ++ g_param_spec_enum ("policy", ++ _("Policy"), ++ _("The policy to determine the mode to use"), ++ GTK_TYPE_HDY_VIEW_SWITCHER_POLICY, GTK_HDY_VIEW_SWITCHER_POLICY_NARROW, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherBar:stack: ++ * ++ * The #GtkStack the #GtkHdyViewSwitcher controls. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_STACK] = ++ g_param_spec_object ("stack", ++ _("Stack"), ++ _("Stack"), ++ GTK_TYPE_STACK, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherBar:reveal: ++ * ++ * Whether the bar should be revealed or hidden. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_REVEAL] = ++ g_param_spec_boolean ("reveal", ++ _("Reveal"), ++ _("Whether the view switcher is revealed"), ++ FALSE, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ gtk_widget_class_set_css_name (widget_class, "viewswitcherbar"); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gtk/libgtk/ui/hdy-view-switcher-bar.ui"); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherBar, action_bar); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherBar, view_switcher); ++} ++ ++static void ++gtk_hdy_view_switcher_bar_init (GtkHdyViewSwitcherBar *self) ++{ ++ /* This must be initialized before the template so the embedded view switcher ++ * can pick up the correct default value. ++ */ ++ self->policy = GTK_HDY_VIEW_SWITCHER_POLICY_NARROW; ++ ++ g_type_ensure (GTK_TYPE_HDY_VIEW_SWITCHER); ++ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ self->revealer = GTK_REVEALER (gtk_bin_get_child (GTK_BIN (self->action_bar))); ++ update_bar_revealed (self); ++ gtk_revealer_set_transition_type (self->revealer, GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_new: ++ * ++ * Creates a new #GtkHdyViewSwitcherBar widget. ++ * ++ * Returns: a new #GtkHdyViewSwitcherBar ++ * ++ * Since: 0.0.10 ++ */ ++GtkWidget * ++gtk_hdy_view_switcher_bar_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_VIEW_SWITCHER_BAR, NULL); ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_get_policy: ++ * @self: a #GtkHdyViewSwitcherBar ++ * ++ * Gets the policy of @self. ++ * ++ * Returns: the policy of @self ++ * ++ * Since: 0.0.10 ++ */ ++GtkHdyViewSwitcherPolicy ++gtk_hdy_view_switcher_bar_get_policy (GtkHdyViewSwitcherBar *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BAR (self), GTK_HDY_VIEW_SWITCHER_POLICY_NARROW); ++ ++ return self->policy; ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_set_policy: ++ * @self: a #GtkHdyViewSwitcherBar ++ * @policy: the new policy ++ * ++ * Sets the policy of @self. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_bar_set_policy (GtkHdyViewSwitcherBar *self, ++ GtkHdyViewSwitcherPolicy policy) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BAR (self)); ++ ++ if (self->policy == policy) ++ return; ++ ++ self->policy = policy; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_POLICY]); ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_get_stack: ++ * @self: a #GtkHdyViewSwitcherBar ++ * ++ * Get the #GtkStack being controlled by the #GtkHdyViewSwitcher. ++ * ++ * Returns: (nullable) (transfer none): the #GtkStack, or %NULL if none has been set ++ * ++ * Since: 0.0.10 ++ */ ++GtkStack * ++gtk_hdy_view_switcher_bar_get_stack (GtkHdyViewSwitcherBar *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BAR (self), NULL); ++ ++ return gtk_hdy_view_switcher_get_stack (self->view_switcher); ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_set_stack: ++ * @self: a #GtkHdyViewSwitcherBar ++ * @stack: (nullable): a #GtkStack ++ * ++ * Sets the #GtkStack to control. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_bar_set_stack (GtkHdyViewSwitcherBar *self, ++ GtkStack *stack) ++{ ++ GtkStack *previous_stack; ++ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BAR (self)); ++ g_return_if_fail (stack == NULL || GTK_IS_STACK (stack)); ++ ++ previous_stack = gtk_hdy_view_switcher_get_stack (self->view_switcher); ++ ++ if (previous_stack == stack) ++ return; ++ ++ if (previous_stack) ++ g_signal_handlers_disconnect_by_func (previous_stack, G_CALLBACK (update_bar_revealed), self); ++ ++ gtk_hdy_view_switcher_set_stack (self->view_switcher, stack); ++ ++ if (stack) { ++ g_signal_connect_swapped (stack, "add", G_CALLBACK (update_bar_revealed), self); ++ g_signal_connect_swapped (stack, "remove", G_CALLBACK (update_bar_revealed), self); ++ } ++ ++ update_bar_revealed (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STACK]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_get_reveal: ++ * @self: a #GtkHdyViewSwitcherBar ++ * ++ * Gets whether @self should be revealed or not. ++ * ++ * Returns: %TRUE if @self is revealed, %FALSE if not. ++ * ++ * Since: 0.0.10 ++ */ ++gboolean ++gtk_hdy_view_switcher_bar_get_reveal (GtkHdyViewSwitcherBar *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BAR (self), FALSE); ++ ++ return self->reveal; ++} ++ ++/** ++ * gtk_hdy_view_switcher_bar_set_reveal: ++ * @self: a #GtkHdyViewSwitcherBar ++ * @reveal: %TRUE to reveal @self ++ * ++ * Sets whether @self should be revealed or not. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_bar_set_reveal (GtkHdyViewSwitcherBar *self, ++ gboolean reveal) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BAR (self)); ++ ++ reveal = !!reveal; ++ ++ if (self->reveal == reveal) ++ return; ++ ++ self->reveal = reveal; ++ update_bar_revealed (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_REVEAL]); ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 1054e29..1d35e83 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -384,6 +384,7 @@ gtk_sources = files( + 'gtkwin32theme.c', + 'gdkpixbufutils.c', + 'hdy-css.c', ++ 'hdy-view-switcher-bar.c', + 'hdy-view-switcher-button.c', + 'hdy-view-switcher.c', + 'language-names.c', +@@ -394,6 +395,7 @@ gtk_private_type_headers = files( + 'gtkcsstypesprivate.h', + 'gtktexthandleprivate.h', + 'hdy-css-private.h', ++ 'hdy-view-switcher-bar-private.h', + 'hdy-view-switcher-button-private.h', + 'hdy-view-switcher-private.h', + ) +diff --git a/gtk/ui/hdy-view-switcher-bar.ui b/gtk/ui/hdy-view-switcher-bar.ui +new file mode 100644 +index 0000000..42246e8 +--- /dev/null ++++ b/gtk/ui/hdy-view-switcher-bar.ui +@@ -0,0 +1,20 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<interface> ++ <requires lib="gtk+" version="3.0"/> ++ <template class="GtkHdyViewSwitcherBar" parent="GtkBin"> ++ <child> ++ <object class="GtkActionBar" id="action_bar"> ++ <property name="visible">True</property> ++ <child type="center"> ++ <object class="GtkHdyViewSwitcher" id="view_switcher"> ++ <property name="margin-start">10</property> ++ <property name="margin-end">10</property> ++ <property name="narrow-ellipsize">end</property> ++ <property name="policy" bind-source="GtkHdyViewSwitcherBar" bind-property="policy" bind-flags="sync-create|bidirectional" /> ++ <property name="visible">True</property> ++ </object> ++ </child> ++ </object> ++ </child> ++ </template> ++</interface> diff --git a/gtk3-mobile/Add-GtkHdyViewSwitcherButton.patch b/gtk3-mobile/Add-GtkHdyViewSwitcherButton.patch new file mode 100644 index 0000000..679de36 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyViewSwitcherButton.patch @@ -0,0 +1,753 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 31 Aug 2020 10:40:01 +0200 +Subject: Add GtkHdyViewSwitcherButton + +This is imported from HdyViewSwitcherButton from libhandy 1.0.0. +--- + gtk/hdy-view-switcher-button-private.h | 51 ++++ + gtk/hdy-view-switcher-button.c | 544 +++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + gtk/ui/hdy-view-switcher-button.ui | 105 +++++++ + 4 files changed, 702 insertions(+) + create mode 100644 gtk/hdy-view-switcher-button-private.h + create mode 100644 gtk/hdy-view-switcher-button.c + create mode 100644 gtk/ui/hdy-view-switcher-button.ui + +diff --git a/gtk/hdy-view-switcher-button-private.h b/gtk/hdy-view-switcher-button-private.h +new file mode 100644 +index 0000000..a37add6 +--- /dev/null ++++ b/gtk/hdy-view-switcher-button-private.h +@@ -0,0 +1,51 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "gtkradiobutton.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_VIEW_SWITCHER_BUTTON (gtk_hdy_view_switcher_button_get_type()) ++ ++G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkRadioButton, g_object_unref) ++ ++G_DECLARE_FINAL_TYPE (GtkHdyViewSwitcherButton, gtk_hdy_view_switcher_button, GTK, HDY_VIEW_SWITCHER_BUTTON, GtkRadioButton) ++ ++GtkWidget *gtk_hdy_view_switcher_button_new (void); ++ ++const gchar *gtk_hdy_view_switcher_button_get_icon_name (GtkHdyViewSwitcherButton *self); ++void gtk_hdy_view_switcher_button_set_icon_name (GtkHdyViewSwitcherButton *self, ++ const gchar *icon_name); ++ ++GtkIconSize gtk_hdy_view_switcher_button_get_icon_size (GtkHdyViewSwitcherButton *self); ++void gtk_hdy_view_switcher_button_set_icon_size (GtkHdyViewSwitcherButton *self, ++ GtkIconSize icon_size); ++ ++gboolean gtk_hdy_view_switcher_button_get_needs_attention (GtkHdyViewSwitcherButton *self); ++void gtk_hdy_view_switcher_button_set_needs_attention (GtkHdyViewSwitcherButton *self, ++ gboolean needs_attention); ++ ++const gchar *gtk_hdy_view_switcher_button_get_label (GtkHdyViewSwitcherButton *self); ++void gtk_hdy_view_switcher_button_set_label (GtkHdyViewSwitcherButton *self, ++ const gchar *label); ++ ++void gtk_hdy_view_switcher_button_set_narrow_ellipsize (GtkHdyViewSwitcherButton *self, ++ PangoEllipsizeMode mode); ++ ++void gtk_hdy_view_switcher_button_get_size (GtkHdyViewSwitcherButton *self, ++ gint *h_min_width, ++ gint *h_nat_width, ++ gint *v_min_width, ++ gint *v_nat_width); ++ ++G_END_DECLS +diff --git a/gtk/hdy-view-switcher-button.c b/gtk/hdy-view-switcher-button.c +new file mode 100644 +index 0000000..875ca7d +--- /dev/null ++++ b/gtk/hdy-view-switcher-button.c +@@ -0,0 +1,544 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "gtkbox.h" ++#include "gtkimage.h" ++#include "gtklabel.h" ++#include "gtkorientable.h" ++#include "gtkstack.h" ++#include "gtkstylecontext.h" ++#include "gtkstyleprovider.h" ++#include "hdy-view-switcher-button-private.h" ++ ++ ++/** ++ * PRIVATE:gtk-hdy-view-switcher-button ++ * @short_description: Button used in #GtkHdyViewSwitcher. ++ * @title: GtkHdyViewSwitcherButton ++ * @See_also: #GtkHdyViewSwitcher ++ * @stability: Private ++ * ++ * #GtkHdyViewSwitcherButton represents an application's view. It is designed to be ++ * used exclusively internally by #GtkHdyViewSwitcher. ++ * ++ * Since: 0.0.10 ++ */ ++ ++enum { ++ PROP_0, ++ PROP_ICON_SIZE, ++ PROP_ICON_NAME, ++ PROP_NEEDS_ATTENTION, ++ ++ /* Overridden properties */ ++ PROP_LABEL, ++ PROP_ORIENTATION, ++ ++ LAST_PROP = PROP_NEEDS_ATTENTION + 1, ++}; ++ ++struct _GtkHdyViewSwitcherButton ++{ ++ GtkRadioButton parent_instance; ++ ++ GtkBox *horizontal_box; ++ GtkImage *horizontal_image; ++ GtkLabel *horizontal_label_active; ++ GtkLabel *horizontal_label_inactive; ++ GtkStack *horizontal_label_stack; ++ GtkStack *stack; ++ GtkBox *vertical_box; ++ GtkImage *vertical_image; ++ GtkLabel *vertical_label_active; ++ GtkLabel *vertical_label_inactive; ++ GtkStack *vertical_label_stack; ++ ++ gchar *icon_name; ++ GtkIconSize icon_size; ++ gchar *label; ++ GtkOrientation orientation; ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++G_DEFINE_TYPE_WITH_CODE (GtkHdyViewSwitcherButton, gtk_hdy_view_switcher_button, GTK_TYPE_RADIO_BUTTON, ++ G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE, NULL)) ++ ++static void ++on_active_changed (GtkHdyViewSwitcherButton *self) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ ++ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self))) { ++ gtk_stack_set_visible_child (self->horizontal_label_stack, GTK_WIDGET (self->horizontal_label_active)); ++ gtk_stack_set_visible_child (self->vertical_label_stack, GTK_WIDGET (self->vertical_label_active)); ++ } else { ++ gtk_stack_set_visible_child (self->horizontal_label_stack, GTK_WIDGET (self->horizontal_label_inactive)); ++ gtk_stack_set_visible_child (self->vertical_label_stack, GTK_WIDGET (self->vertical_label_inactive)); ++ } ++} ++ ++static GtkOrientation ++get_orientation (GtkHdyViewSwitcherButton *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self), GTK_ORIENTATION_HORIZONTAL); ++ ++ return self->orientation; ++} ++ ++static void ++set_orientation (GtkHdyViewSwitcherButton *self, ++ GtkOrientation orientation) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ ++ if (self->orientation == orientation) ++ return; ++ ++ self->orientation = orientation; ++ ++ gtk_stack_set_visible_child (self->stack, ++ GTK_WIDGET (self->orientation == GTK_ORIENTATION_VERTICAL ? ++ self->vertical_box : ++ self->horizontal_box)); ++} ++ ++static void ++gtk_hdy_view_switcher_button_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcherButton *self = GTK_HDY_VIEW_SWITCHER_BUTTON (object); ++ ++ switch (prop_id) { ++ case PROP_ICON_NAME: ++ g_value_set_string (value, gtk_hdy_view_switcher_button_get_icon_name (self)); ++ break; ++ case PROP_ICON_SIZE: ++ g_value_set_int (value, gtk_hdy_view_switcher_button_get_icon_size (self)); ++ break; ++ case PROP_NEEDS_ATTENTION: ++ g_value_set_boolean (value, gtk_hdy_view_switcher_button_get_needs_attention (self)); ++ break; ++ case PROP_LABEL: ++ g_value_set_string (value, gtk_hdy_view_switcher_button_get_label (self)); ++ break; ++ case PROP_ORIENTATION: ++ g_value_set_enum (value, get_orientation (self)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_button_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcherButton *self = GTK_HDY_VIEW_SWITCHER_BUTTON (object); ++ ++ switch (prop_id) { ++ case PROP_ICON_NAME: ++ gtk_hdy_view_switcher_button_set_icon_name (self, g_value_get_string (value)); ++ break; ++ case PROP_ICON_SIZE: ++ gtk_hdy_view_switcher_button_set_icon_size (self, g_value_get_int (value)); ++ break; ++ case PROP_NEEDS_ATTENTION: ++ gtk_hdy_view_switcher_button_set_needs_attention (self, g_value_get_boolean (value)); ++ break; ++ case PROP_LABEL: ++ gtk_hdy_view_switcher_button_set_label (self, g_value_get_string (value)); ++ break; ++ case PROP_ORIENTATION: ++ set_orientation (self, g_value_get_enum (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_button_finalize (GObject *object) ++{ ++ GtkHdyViewSwitcherButton *self = GTK_HDY_VIEW_SWITCHER_BUTTON (object); ++ ++ g_free (self->icon_name); ++ g_free (self->label); ++ ++ G_OBJECT_CLASS (gtk_hdy_view_switcher_button_parent_class)->finalize (object); ++} ++ ++static void ++gtk_hdy_view_switcher_button_class_init (GtkHdyViewSwitcherButtonClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ ++ object_class->get_property = gtk_hdy_view_switcher_button_get_property; ++ object_class->set_property = gtk_hdy_view_switcher_button_set_property; ++ object_class->finalize = gtk_hdy_view_switcher_button_finalize; ++ ++ g_object_class_override_property (object_class, ++ PROP_LABEL, ++ "label"); ++ ++ g_object_class_override_property (object_class, ++ PROP_ORIENTATION, ++ "orientation"); ++ ++ /** ++ * GtkHdyViewSwitcherButton:icon-name: ++ * ++ * The icon name representing the view, or %NULL for no icon. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_ICON_NAME] = ++ g_param_spec_string ("icon-name", ++ _("Icon Name"), ++ _("Icon name for image"), ++ "text-x-generic-symbolic", ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE); ++ ++ /** ++ * GtkHdyViewSwitcherButton:icon-size: ++ * ++ * The icon size. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_ICON_SIZE] = ++ g_param_spec_int ("icon-size", ++ _("Icon Size"), ++ _("Symbolic size to use for named icon"), ++ 0, G_MAXINT, GTK_ICON_SIZE_BUTTON, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE); ++ ++ /** ++ * GtkHdyViewSwitcherButton:needs-attention: ++ * ++ * Sets a flag specifying whether the view requires the user attention. This ++ * is used by the GtkHdyViewSwitcher to change the appearance of the ++ * corresponding button when a view needs attention and it is not the current ++ * one. ++ * ++ * Since: 0.0.10 ++ */ ++ props[PROP_NEEDS_ATTENTION] = ++ g_param_spec_boolean ("needs-attention", ++ _("Needs attention"), ++ _("Hint the view needs attention"), ++ FALSE, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ /* We probably should set the class's CSS name to "viewswitcherbutton" ++ * here, but it doesn't work because GtkCheckButton hardcodes it to "button" ++ * on instantiation, and the functions required to override it are private. ++ * In the meantime, we can use the "viewswitcher > button" CSS selector as ++ * a fairly safe fallback. ++ */ ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gtk/libgtk/ui/hdy-view-switcher-button.ui"); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, horizontal_box); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, horizontal_image); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, horizontal_label_active); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, horizontal_label_inactive); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, horizontal_label_stack); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, stack); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, vertical_box); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, vertical_image); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, vertical_label_active); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, vertical_label_inactive); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherButton, vertical_label_stack); ++ gtk_widget_class_bind_template_callback (widget_class, on_active_changed); ++} ++ ++static void ++gtk_hdy_view_switcher_button_init (GtkHdyViewSwitcherButton *self) ++{ ++ self->icon_size = GTK_ICON_SIZE_BUTTON; ++ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ gtk_stack_set_visible_child (GTK_STACK (self->stack), GTK_WIDGET (self->horizontal_box)); ++ ++ gtk_widget_set_focus_on_click (GTK_WIDGET (self), FALSE); ++ /* Make the button look like a regular button and not a radio button. */ ++ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (self), FALSE); ++ ++ on_active_changed (self); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_new: ++ * ++ * Creates a new #GtkHdyViewSwitcherButton widget. ++ * ++ * Returns: a new #GtkHdyViewSwitcherButton ++ * ++ * Since: 0.0.10 ++ */ ++GtkWidget * ++gtk_hdy_view_switcher_button_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_VIEW_SWITCHER_BUTTON, NULL); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_get_icon_name: ++ * @self: a #GtkHdyViewSwitcherButton ++ * ++ * Gets the icon name representing the view, or %NULL is no icon is set. ++ * ++ * Returns: (transfer none) (nullable): the icon name, or %NULL ++ * ++ * Since: 0.0.10 ++ **/ ++const gchar * ++gtk_hdy_view_switcher_button_get_icon_name (GtkHdyViewSwitcherButton *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self), NULL); ++ ++ return self->icon_name; ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_set_icon_name: ++ * @self: a #GtkHdyViewSwitcherButton ++ * @icon_name: (nullable): an icon name or %NULL ++ * ++ * Sets the icon name representing the view, or %NULL to disable the icon. ++ * ++ * Since: 0.0.10 ++ **/ ++void ++gtk_hdy_view_switcher_button_set_icon_name (GtkHdyViewSwitcherButton *self, ++ const gchar *icon_name) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ ++ if (!g_strcmp0 (self->icon_name, icon_name)) ++ return; ++ ++ g_free (self->icon_name); ++ self->icon_name = g_strdup (icon_name); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ICON_NAME]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_get_icon_size: ++ * @self: a #GtkHdyViewSwitcherButton ++ * ++ * Gets the icon size used by @self. ++ * ++ * Returns: the icon size used by @self ++ * ++ * Since: 0.0.10 ++ **/ ++GtkIconSize ++gtk_hdy_view_switcher_button_get_icon_size (GtkHdyViewSwitcherButton *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self), GTK_ICON_SIZE_INVALID); ++ ++ return self->icon_size; ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_set_icon_size: ++ * @self: a #GtkHdyViewSwitcherButton ++ * @icon_size: the new icon size ++ * ++ * Sets the icon size used by @self. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_button_set_icon_size (GtkHdyViewSwitcherButton *self, ++ GtkIconSize icon_size) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ ++ if (self->icon_size == icon_size) ++ return; ++ ++ self->icon_size = icon_size; ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ICON_SIZE]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_get_needs_attention: ++ * @self: a #GtkHdyViewSwitcherButton ++ * ++ * Gets whether the view represented by @self requires the user attention. ++ * ++ * Returns: %TRUE if the view represented by @self requires the user attention, %FALSE otherwise ++ * ++ * Since: 0.0.10 ++ **/ ++gboolean ++gtk_hdy_view_switcher_button_get_needs_attention (GtkHdyViewSwitcherButton *self) ++{ ++ GtkStyleContext *context; ++ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self), FALSE); ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (self)); ++ ++ return gtk_style_context_has_class (context, GTK_STYLE_CLASS_NEEDS_ATTENTION); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_set_needs_attention: ++ * @self: a #GtkHdyViewSwitcherButton ++ * @needs_attention: the new icon size ++ * ++ * Sets whether the view represented by @self requires the user attention. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_button_set_needs_attention (GtkHdyViewSwitcherButton *self, ++ gboolean needs_attention) ++{ ++ GtkStyleContext *context; ++ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ ++ needs_attention = !!needs_attention; ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (self)); ++ if (gtk_style_context_has_class (context, GTK_STYLE_CLASS_NEEDS_ATTENTION) == needs_attention) ++ return; ++ ++ if (needs_attention) ++ gtk_style_context_add_class (context, GTK_STYLE_CLASS_NEEDS_ATTENTION); ++ else ++ gtk_style_context_remove_class (context, GTK_STYLE_CLASS_NEEDS_ATTENTION); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_NEEDS_ATTENTION]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_get_label: ++ * @self: a #GtkHdyViewSwitcherButton ++ * ++ * Gets the label representing the view. ++ * ++ * Returns: (transfer none) (nullable): the label, or %NULL ++ * ++ * Since: 0.0.10 ++ **/ ++const gchar * ++gtk_hdy_view_switcher_button_get_label (GtkHdyViewSwitcherButton *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self), NULL); ++ ++ return self->label; ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_set_label: ++ * @self: a #GtkHdyViewSwitcherButton ++ * @label: (nullable): a label or %NULL ++ * ++ * Sets the label representing the view. ++ * ++ * Since: 0.0.10 ++ **/ ++void ++gtk_hdy_view_switcher_button_set_label (GtkHdyViewSwitcherButton *self, ++ const gchar *label) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ ++ if (!g_strcmp0 (self->label, label)) ++ return; ++ ++ g_free (self->label); ++ self->label = g_strdup (label); ++ ++ g_object_notify (G_OBJECT (self), "label"); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_set_narrow_ellipsize: ++ * @self: a #GtkHdyViewSwitcherButton ++ * @mode: a #PangoEllipsizeMode ++ * ++ * Set the mode used to ellipsize the text in narrow mode if there is not ++ * enough space to render the entire string. ++ * ++ * Since: 0.0.10 ++ **/ ++void ++gtk_hdy_view_switcher_button_set_narrow_ellipsize (GtkHdyViewSwitcherButton *self, ++ PangoEllipsizeMode mode) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_BUTTON (self)); ++ g_return_if_fail (mode >= PANGO_ELLIPSIZE_NONE && mode <= PANGO_ELLIPSIZE_END); ++ ++ gtk_label_set_ellipsize (self->vertical_label_active, mode); ++ gtk_label_set_ellipsize (self->vertical_label_inactive, mode); ++} ++ ++/** ++ * gtk_hdy_view_switcher_button_get_size: ++ * @self: a #GtkHdyViewSwitcherButton ++ * @h_min_width: (out) (nullable): the minimum width when horizontal ++ * @h_nat_width: (out) (nullable): the natural width when horizontal ++ * @v_min_width: (out) (nullable): the minimum width when vertical ++ * @v_nat_width: (out) (nullable): the natural width when vertical ++ * ++ * Measure the size requests in both horizontal and vertical modes. ++ * ++ * Since: 0.0.10 ++ */ ++void ++gtk_hdy_view_switcher_button_get_size (GtkHdyViewSwitcherButton *self, ++ gint *h_min_width, ++ gint *h_nat_width, ++ gint *v_min_width, ++ gint *v_nat_width) ++{ ++ GtkStyleContext *context; ++ GtkStateFlags state; ++ GtkBorder border; ++ ++ /* gtk_widget_get_preferred_width() doesn't accept both its out parameters to ++ * be NULL, so we must have guards. ++ */ ++ if (h_min_width != NULL || h_nat_width != NULL) ++ gtk_widget_get_preferred_width (GTK_WIDGET (self->horizontal_box), h_min_width, h_nat_width); ++ if (v_min_width != NULL || v_nat_width != NULL) ++ gtk_widget_get_preferred_width (GTK_WIDGET (self->vertical_box), v_min_width, v_nat_width); ++ ++ context = gtk_widget_get_style_context (GTK_WIDGET (self)); ++ state = gtk_style_context_get_state (context); ++ gtk_style_context_get_border (context, state, &border); ++ if (h_min_width != NULL) ++ *h_min_width += border.left + border.right; ++ if (h_nat_width != NULL) ++ *h_nat_width += border.left + border.right; ++ if (v_min_width != NULL) ++ *v_min_width += border.left + border.right; ++ if (v_nat_width != NULL) ++ *v_nat_width += border.left + border.right; ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 4b7a453..38b810c 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -383,6 +383,7 @@ gtk_sources = files( + 'gtkwin32draw.c', + 'gtkwin32theme.c', + 'gdkpixbufutils.c', ++ 'hdy-view-switcher-button.c', + 'language-names.c', + 'script-names.c', + ) +@@ -390,6 +391,7 @@ gtk_sources = files( + gtk_private_type_headers = files( + 'gtkcsstypesprivate.h', + 'gtktexthandleprivate.h', ++ 'hdy-view-switcher-button-private.h', + ) + + gtk_gir_public_headers = files( +diff --git a/gtk/ui/hdy-view-switcher-button.ui b/gtk/ui/hdy-view-switcher-button.ui +new file mode 100644 +index 0000000..6e437dc +--- /dev/null ++++ b/gtk/ui/hdy-view-switcher-button.ui +@@ -0,0 +1,105 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<interface> ++ <requires lib="gtk+" version="3.0"/> ++ <template class="GtkHdyViewSwitcherButton" parent="GtkRadioButton"> ++ <signal name="notify::active" handler="on_active_changed" after="yes"/> ++ <child> ++ <object class="GtkStack" id="stack"> ++ <property name="hhomogeneous">False</property> ++ <property name="transition-type">crossfade</property> ++ <property name="vhomogeneous">True</property> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkBox" id="horizontal_box"> ++ <property name="halign">center</property> ++ <property name="orientation">horizontal</property> ++ <property name="spacing">8</property> ++ <property name="valign">center</property> ++ <property name="visible">True</property> ++ <style> ++ <class name="wide"/> ++ </style> ++ <child> ++ <object class="GtkImage" id="horizontal_image"> ++ <property name="icon-name" bind-source="GtkHdyViewSwitcherButton" bind-property="icon-name" bind-flags="sync-create" /> ++ <property name="icon-size" bind-source="GtkHdyViewSwitcherButton" bind-property="icon-size" bind-flags="sync-create" /> ++ <property name="visible">True</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkStack" id="horizontal_label_stack"> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkLabel" id="horizontal_label_inactive"> ++ <property name="label" bind-source="GtkHdyViewSwitcherButton" bind-property="label" bind-flags="sync-create|bidirectional" /> ++ <property name="visible">True</property> ++ </object> ++ <packing> ++ <property name="name">inactive</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="horizontal_label_active"> ++ <property name="label" bind-source="GtkHdyViewSwitcherButton" bind-property="label" bind-flags="sync-create|bidirectional" /> ++ <property name="visible">True</property> ++ <style> ++ <class name="active"/> ++ </style> ++ </object> ++ <packing> ++ <property name="name">active</property> ++ </packing> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkBox" id="vertical_box"> ++ <property name="halign">center</property> ++ <property name="orientation">vertical</property> ++ <property name="spacing">4</property> ++ <property name="valign">center</property> ++ <property name="visible">True</property> ++ <style> ++ <class name="narrow"/> ++ </style> ++ <child> ++ <object class="GtkImage" id="vertical_image"> ++ <property name="icon-name" bind-source="GtkHdyViewSwitcherButton" bind-property="icon-name" bind-flags="sync-create" /> ++ <property name="icon-size" bind-source="GtkHdyViewSwitcherButton" bind-property="icon-size" bind-flags="sync-create" /> ++ <property name="visible">True</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkStack" id="vertical_label_stack"> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkLabel" id="vertical_label_inactive"> ++ <property name="label" bind-source="GtkHdyViewSwitcherButton" bind-property="label" bind-flags="sync-create|bidirectional" /> ++ <property name="visible">True</property> ++ </object> ++ <packing> ++ <property name="name">inactive</property> ++ </packing> ++ </child> ++ <child> ++ <object class="GtkLabel" id="vertical_label_active"> ++ <property name="label" bind-source="GtkHdyViewSwitcherButton" bind-property="label" bind-flags="sync-create|bidirectional" /> ++ <property name="visible">True</property> ++ <style> ++ <class name="active"/> ++ </style> ++ </object> ++ <packing> ++ <property name="name">active</property> ++ </packing> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ </template> ++</interface> diff --git a/gtk3-mobile/Add-GtkHdyViewSwitcherTitle.patch b/gtk3-mobile/Add-GtkHdyViewSwitcherTitle.patch new file mode 100644 index 0000000..eac5db6 --- /dev/null +++ b/gtk3-mobile/Add-GtkHdyViewSwitcherTitle.patch @@ -0,0 +1,757 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Thu, 10 Sep 2020 14:26:18 +0200 +Subject: Add GtkHdyViewSwitcherTitle + +This is imported from HdyViewSwitcherTitle from libhandy 1.0.0. +--- + gtk/hdy-view-switcher-title-private.h | 46 +++ + gtk/hdy-view-switcher-title.c | 606 ++++++++++++++++++++++++++++++++++ + gtk/meson.build | 2 + + gtk/ui/hdy-view-switcher-title.ui | 52 +++ + 4 files changed, 706 insertions(+) + create mode 100644 gtk/hdy-view-switcher-title-private.h + create mode 100644 gtk/hdy-view-switcher-title.c + create mode 100644 gtk/ui/hdy-view-switcher-title.ui + +diff --git a/gtk/hdy-view-switcher-title-private.h b/gtk/hdy-view-switcher-title-private.h +new file mode 100644 +index 0000000..6bc8fdf +--- /dev/null ++++ b/gtk/hdy-view-switcher-title-private.h +@@ -0,0 +1,46 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#pragma once ++ ++#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) ++#error "Only <gtk/gtk.h> can be included directly." ++#endif ++ ++#include "hdy-view-switcher-private.h" ++ ++G_BEGIN_DECLS ++ ++#define GTK_TYPE_HDY_VIEW_SWITCHER_TITLE (gtk_hdy_view_switcher_title_get_type()) ++ ++G_DECLARE_FINAL_TYPE (GtkHdyViewSwitcherTitle, gtk_hdy_view_switcher_title, GTK, HDY_VIEW_SWITCHER_TITLE, GtkBin) ++ ++GtkHdyViewSwitcherTitle *gtk_hdy_view_switcher_title_new (void); ++ ++GtkHdyViewSwitcherPolicy gtk_hdy_view_switcher_title_get_policy (GtkHdyViewSwitcherTitle *self); ++void gtk_hdy_view_switcher_title_set_policy (GtkHdyViewSwitcherTitle *self, ++ GtkHdyViewSwitcherPolicy policy); ++ ++GtkStack *gtk_hdy_view_switcher_title_get_stack (GtkHdyViewSwitcherTitle *self); ++void gtk_hdy_view_switcher_title_set_stack (GtkHdyViewSwitcherTitle *self, ++ GtkStack *stack); ++ ++const gchar *gtk_hdy_view_switcher_title_get_title (GtkHdyViewSwitcherTitle *self); ++void gtk_hdy_view_switcher_title_set_title (GtkHdyViewSwitcherTitle *self, ++ const gchar *title); ++ ++const gchar *gtk_hdy_view_switcher_title_get_subtitle (GtkHdyViewSwitcherTitle *self); ++void gtk_hdy_view_switcher_title_set_subtitle (GtkHdyViewSwitcherTitle *self, ++ const gchar *subtitle); ++ ++gboolean gtk_hdy_view_switcher_title_get_view_switcher_enabled (GtkHdyViewSwitcherTitle *self); ++void gtk_hdy_view_switcher_title_set_view_switcher_enabled (GtkHdyViewSwitcherTitle *self, ++ gboolean enabled); ++ ++gboolean gtk_hdy_view_switcher_title_get_title_visible (GtkHdyViewSwitcherTitle *self); ++ ++G_END_DECLS +diff --git a/gtk/hdy-view-switcher-title.c b/gtk/hdy-view-switcher-title.c +new file mode 100644 +index 0000000..4cb815b +--- /dev/null ++++ b/gtk/hdy-view-switcher-title.c +@@ -0,0 +1,606 @@ ++/* ++ * Copyright (C) 2019 Zander Brown <zbrown@gnome.org> ++ * Copyright (C) 2019 Purism SPC ++ * ++ * SPDX-License-Identifier: LGPL-2.1+ ++ */ ++ ++#include "config.h" ++#include <glib/gi18n-lib.h> ++ ++#include "gtkbox.h" ++#include "gtklabel.h" ++#include "gtkprivatetypebuiltins.h" ++#include "hdy-view-switcher-title-private.h" ++#include "hdy-squeezer-private.h" ++ ++/** ++ * SECTION:gtk-hdy-view-switcher-title ++ * @short_description: A view switcher title. ++ * @title: GtkHdyViewSwitcherTitle ++ * @See_also: #GtkHdyHeaderBar, #GtkHdyViewSwitcher, #GtkHdyViewSwitcherBar ++ * ++ * A widget letting you switch between multiple views offered by a #GtkStack, ++ * via an #GtkHdyViewSwitcher. It is designed to be used as the title widget of a ++ * #GtkHdyHeaderBar, and will display the window's title when the window is too ++ * narrow to fit the view switcher e.g. on mobile phones, or if there are less ++ * than two views. ++ * ++ * You can conveniently bind the #GtkHdyViewSwitcherBar:reveal property to ++ * #GtkHdyViewSwitcherTitle:title-visible to automatically reveal the view switcher ++ * bar when the title label is displayed in place of the view switcher. ++ * ++ * An example of the UI definition for a common use case: ++ * |[ ++ * <object class="GtkWindow"/> ++ * <child type="titlebar"> ++ * <object class="GtkHdyHeaderBar"> ++ * <property name="centering-policy">strict</property> ++ * <child type="title"> ++ * <object class="GtkHdyViewSwitcherTitle" ++ * id="view_switcher_title"> ++ * <property name="stack">stack</property> ++ * </object> ++ * </child> ++ * </object> ++ * </child> ++ * <child> ++ * <object class="GtkBox"> ++ * <child> ++ * <object class="GtkStack" id="stack"/> ++ * </child> ++ * <child> ++ * <object class="GtkHdyViewSwitcherBar"> ++ * <property name="stack">stack</property> ++ * <property name="reveal" ++ * bind-source="view_switcher_title" ++ * bind-property="title-visible" ++ * bind-flags="sync-create"/> ++ * </object> ++ * </child> ++ * </object> ++ * </child> ++ * </object> ++ * ]| ++ * ++ * # CSS nodes ++ * ++ * #GtkHdyViewSwitcherTitle has a single CSS node with name viewswitchertitle. ++ * ++ * Since: 1.0 ++ */ ++ ++enum { ++ PROP_0, ++ PROP_POLICY, ++ PROP_STACK, ++ PROP_TITLE, ++ PROP_SUBTITLE, ++ PROP_VIEW_SWITCHER_ENABLED, ++ PROP_TITLE_VISIBLE, ++ LAST_PROP, ++}; ++ ++struct _GtkHdyViewSwitcherTitle ++{ ++ GtkBin parent_instance; ++ ++ GtkHdySqueezer *squeezer; ++ GtkLabel *subtitle_label; ++ GtkBox *title_box; ++ GtkLabel *title_label; ++ GtkHdyViewSwitcher *view_switcher; ++ ++ gboolean view_switcher_enabled; ++}; ++ ++static GParamSpec *props[LAST_PROP]; ++ ++G_DEFINE_TYPE (GtkHdyViewSwitcherTitle, gtk_hdy_view_switcher_title, GTK_TYPE_BIN) ++ ++static void ++update_subtitle_label (GtkHdyViewSwitcherTitle *self) ++{ ++ const gchar *subtitle = gtk_label_get_label (self->subtitle_label); ++ ++ gtk_widget_set_visible (GTK_WIDGET (self->subtitle_label), subtitle && subtitle[0]); ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++static void ++count_children_cb (GtkWidget *widget, ++ gint *count) ++{ ++ (*count)++; ++} ++ ++static void ++update_view_switcher_visible (GtkHdyViewSwitcherTitle *self) ++{ ++ GtkStack *stack = gtk_hdy_view_switcher_get_stack (self->view_switcher); ++ gint count = 0; ++ ++ if (self->view_switcher_enabled && stack) ++ gtk_container_foreach (GTK_CONTAINER (stack), (GtkCallback) count_children_cb, &count); ++ ++ gtk_hdy_squeezer_set_child_enabled (self->squeezer, GTK_WIDGET (self->view_switcher), count > 1); ++} ++ ++static void ++notify_squeezer_visible_child_cb (GObject *self) ++{ ++ g_object_notify_by_pspec (self, props[PROP_TITLE_VISIBLE]); ++} ++ ++static void ++gtk_hdy_view_switcher_title_get_property (GObject *object, ++ guint prop_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcherTitle *self = GTK_HDY_VIEW_SWITCHER_TITLE (object); ++ ++ switch (prop_id) { ++ case PROP_POLICY: ++ g_value_set_enum (value, gtk_hdy_view_switcher_title_get_policy (self)); ++ break; ++ case PROP_STACK: ++ g_value_set_object (value, gtk_hdy_view_switcher_title_get_stack (self)); ++ break; ++ case PROP_TITLE: ++ g_value_set_string (value, gtk_hdy_view_switcher_title_get_title (self)); ++ break; ++ case PROP_SUBTITLE: ++ g_value_set_string (value, gtk_hdy_view_switcher_title_get_subtitle (self)); ++ break; ++ case PROP_VIEW_SWITCHER_ENABLED: ++ g_value_set_boolean (value, gtk_hdy_view_switcher_title_get_view_switcher_enabled (self)); ++ break; ++ case PROP_TITLE_VISIBLE: ++ g_value_set_boolean (value, gtk_hdy_view_switcher_title_get_title_visible (self)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_title_set_property (GObject *object, ++ guint prop_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ GtkHdyViewSwitcherTitle *self = GTK_HDY_VIEW_SWITCHER_TITLE (object); ++ ++ switch (prop_id) { ++ case PROP_POLICY: ++ gtk_hdy_view_switcher_title_set_policy (self, g_value_get_enum (value)); ++ break; ++ case PROP_STACK: ++ gtk_hdy_view_switcher_title_set_stack (self, g_value_get_object (value)); ++ break; ++ case PROP_TITLE: ++ gtk_hdy_view_switcher_title_set_title (self, g_value_get_string (value)); ++ break; ++ case PROP_SUBTITLE: ++ gtk_hdy_view_switcher_title_set_subtitle (self, g_value_get_string (value)); ++ break; ++ case PROP_VIEW_SWITCHER_ENABLED: ++ gtk_hdy_view_switcher_title_set_view_switcher_enabled (self, g_value_get_boolean (value)); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gtk_hdy_view_switcher_title_dispose (GObject *object) { ++ GtkHdyViewSwitcherTitle *self = (GtkHdyViewSwitcherTitle *)object; ++ ++ if (self->view_switcher) { ++ GtkStack *stack = gtk_hdy_view_switcher_get_stack (self->view_switcher); ++ ++ if (stack) ++ g_signal_handlers_disconnect_by_func (stack, G_CALLBACK (update_view_switcher_visible), self); ++ } ++ ++ G_OBJECT_CLASS (gtk_hdy_view_switcher_title_parent_class)->dispose (object); ++} ++ ++static void ++gtk_hdy_view_switcher_title_class_init (GtkHdyViewSwitcherTitleClass *klass) ++{ ++ GObjectClass *object_class = G_OBJECT_CLASS (klass); ++ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); ++ ++ object_class->dispose = gtk_hdy_view_switcher_title_dispose; ++ object_class->get_property = gtk_hdy_view_switcher_title_get_property; ++ object_class->set_property = gtk_hdy_view_switcher_title_set_property; ++ ++ /** ++ * GtkHdyViewSwitcherTitle:policy: ++ * ++ * The #GtkHdyViewSwitcherPolicy the #GtkHdyViewSwitcher should use to determine ++ * which mode to use. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_POLICY] = ++ g_param_spec_enum ("policy", ++ _("Policy"), ++ _("The policy to determine the mode to use"), ++ GTK_TYPE_HDY_VIEW_SWITCHER_POLICY, GTK_HDY_VIEW_SWITCHER_POLICY_AUTO, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherTitle:stack: ++ * ++ * The #GtkStack the #GtkHdyViewSwitcher controls. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_STACK] = ++ g_param_spec_object ("stack", ++ _("Stack"), ++ _("Stack"), ++ GTK_TYPE_STACK, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherTitle:title: ++ * ++ * The title of the #GtkHdyViewSwitcher. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_TITLE] = ++ g_param_spec_string ("title", ++ _("Title"), ++ _("The title to display"), ++ NULL, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherTitle:subtitle: ++ * ++ * The subtitle of the #GtkHdyViewSwitcher. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_SUBTITLE] = ++ g_param_spec_string ("subtitle", ++ _("Subtitle"), ++ _("The subtitle to display"), ++ NULL, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherTitle:view-switcher-enabled: ++ * ++ * Whether the bar should be revealed or hidden. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_VIEW_SWITCHER_ENABLED] = ++ g_param_spec_boolean ("view-switcher-enabled", ++ _("View switcher enabled"), ++ _("Whether the view switcher is enabled"), ++ TRUE, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); ++ ++ /** ++ * GtkHdyViewSwitcherTitle:title-visible: ++ * ++ * Whether the bar should be revealed or hidden. ++ * ++ * Since: 1.0 ++ */ ++ props[PROP_TITLE_VISIBLE] = ++ g_param_spec_boolean ("title-visible", ++ _("Title visible"), ++ _("Whether the title label is visible"), ++ TRUE, ++ G_PARAM_EXPLICIT_NOTIFY | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); ++ ++ g_object_class_install_properties (object_class, LAST_PROP, props); ++ ++ gtk_widget_class_set_css_name (widget_class, "viewswitchertitle"); ++ ++ gtk_widget_class_set_template_from_resource (widget_class, ++ "/org/gtk/libgtk/ui/hdy-view-switcher-title.ui"); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherTitle, squeezer); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherTitle, subtitle_label); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherTitle, title_box); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherTitle, title_label); ++ gtk_widget_class_bind_template_child (widget_class, GtkHdyViewSwitcherTitle, view_switcher); ++ gtk_widget_class_bind_template_callback (widget_class, notify_squeezer_visible_child_cb); ++} ++ ++static void ++gtk_hdy_view_switcher_title_init (GtkHdyViewSwitcherTitle *self) ++{ ++ /* This must be initialized before the template so the embedded view switcher ++ * can pick up the correct default value. ++ */ ++ self->view_switcher_enabled = TRUE; ++ ++ g_type_ensure (GTK_TYPE_HDY_SQUEEZER); ++ g_type_ensure (GTK_TYPE_HDY_VIEW_SWITCHER); ++ ++ gtk_widget_init_template (GTK_WIDGET (self)); ++ ++ update_subtitle_label (self); ++ update_view_switcher_visible (self); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_new: ++ * ++ * Creates a new #GtkHdyViewSwitcherTitle widget. ++ * ++ * Returns: a new #GtkHdyViewSwitcherTitle ++ * ++ * Since: 1.0 ++ */ ++GtkHdyViewSwitcherTitle * ++gtk_hdy_view_switcher_title_new (void) ++{ ++ return g_object_new (GTK_TYPE_HDY_VIEW_SWITCHER_TITLE, NULL); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_get_policy: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * ++ * Gets the policy of @self. ++ * ++ * Returns: the policy of @self ++ * ++ * Since: 1.0 ++ */ ++GtkHdyViewSwitcherPolicy ++gtk_hdy_view_switcher_title_get_policy (GtkHdyViewSwitcherTitle *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self), GTK_HDY_VIEW_SWITCHER_POLICY_NARROW); ++ ++ return gtk_hdy_view_switcher_get_policy (self->view_switcher); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_set_policy: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * @policy: the new policy ++ * ++ * Sets the policy of @self. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_view_switcher_title_set_policy (GtkHdyViewSwitcherTitle *self, ++ GtkHdyViewSwitcherPolicy policy) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self)); ++ ++ if (gtk_hdy_view_switcher_get_policy (self->view_switcher) == policy) ++ return; ++ ++ gtk_hdy_view_switcher_set_policy (self->view_switcher, policy); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_POLICY]); ++ ++ gtk_widget_queue_resize (GTK_WIDGET (self)); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_get_stack: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * ++ * Get the #GtkStack being controlled by the #GtkHdyViewSwitcher. ++ * ++ * Returns: (nullable) (transfer none): the #GtkStack, or %NULL if none has been set ++ * ++ * Since: 1.0 ++ */ ++GtkStack * ++gtk_hdy_view_switcher_title_get_stack (GtkHdyViewSwitcherTitle *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self), NULL); ++ ++ return gtk_hdy_view_switcher_get_stack (self->view_switcher); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_set_stack: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * @stack: (nullable): a #GtkStack ++ * ++ * Sets the #GtkStack to control. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_view_switcher_title_set_stack (GtkHdyViewSwitcherTitle *self, ++ GtkStack *stack) ++{ ++ GtkStack *previous_stack; ++ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self)); ++ g_return_if_fail (stack == NULL || GTK_IS_STACK (stack)); ++ ++ previous_stack = gtk_hdy_view_switcher_get_stack (self->view_switcher); ++ ++ if (previous_stack == stack) ++ return; ++ ++ if (previous_stack) ++ g_signal_handlers_disconnect_by_func (previous_stack, G_CALLBACK (update_view_switcher_visible), self); ++ ++ gtk_hdy_view_switcher_set_stack (self->view_switcher, stack); ++ ++ if (stack) { ++ g_signal_connect_swapped (stack, "add", G_CALLBACK (update_view_switcher_visible), self); ++ g_signal_connect_swapped (stack, "remove", G_CALLBACK (update_view_switcher_visible), self); ++ } ++ ++ update_view_switcher_visible (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_STACK]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_get_title: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * ++ * Gets the title of @self. See gtk_hdy_view_switcher_title_set_title(). ++ * ++ * Returns: (transfer none) (nullable): the title of @self, or %NULL. ++ * ++ * Since: 1.0 ++ */ ++const gchar * ++gtk_hdy_view_switcher_title_get_title (GtkHdyViewSwitcherTitle *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self), NULL); ++ ++ return gtk_label_get_label (self->title_label); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_set_title: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * @title: (nullable): a title, or %NULL ++ * ++ * Sets the title of @self. The title should give a user additional details. A ++ * good title should not include the application name. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_view_switcher_title_set_title (GtkHdyViewSwitcherTitle *self, ++ const gchar *title) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self)); ++ ++ if (g_strcmp0 (gtk_label_get_label (self->title_label), title) == 0) ++ return; ++ ++ gtk_label_set_label (self->title_label, title); ++ gtk_widget_set_visible (GTK_WIDGET (self->title_label), title && title[0]); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_TITLE]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_get_subtitle: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * ++ * Gets the subtitle of @self. See gtk_hdy_view_switcher_title_set_subtitle(). ++ * ++ * Returns: (transfer none) (nullable): the subtitle of @self, or %NULL. ++ * ++ * Since: 1.0 ++ */ ++const gchar * ++gtk_hdy_view_switcher_title_get_subtitle (GtkHdyViewSwitcherTitle *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self), NULL); ++ ++ return gtk_label_get_label (self->subtitle_label); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_set_subtitle: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * @subtitle: (nullable): a subtitle, or %NULL ++ * ++ * Sets the subtitle of @self. The subtitle should give a user additional ++ * details. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_view_switcher_title_set_subtitle (GtkHdyViewSwitcherTitle *self, ++ const gchar *subtitle) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self)); ++ ++ if (g_strcmp0 (gtk_label_get_label (self->subtitle_label), subtitle) == 0) ++ return; ++ ++ gtk_label_set_label (self->subtitle_label, subtitle); ++ update_subtitle_label (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SUBTITLE]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_get_view_switcher_enabled: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * ++ * Gets whether @self's view switcher is enabled. ++ * ++ * See gtk_hdy_view_switcher_title_set_view_switcher_enabled(). ++ * ++ * Returns: %TRUE if the view switcher is enabled, %FALSE otherwise. ++ * ++ * Since: 1.0 ++ */ ++gboolean ++gtk_hdy_view_switcher_title_get_view_switcher_enabled (GtkHdyViewSwitcherTitle *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self), FALSE); ++ ++ return self->view_switcher_enabled; ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_set_view_switcher_enabled: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * @enabled: %TRUE to enable the view switcher, %FALSE to disable it ++ * ++ * Make @self enable or disable its view switcher. If it is disabled, the title ++ * will be displayed instead. This allows to programmatically and prematurely ++ * hide the view switcher of @self even if it fits in the available space. ++ * ++ * This can be used e.g. to ensure the view switcher is hidden below a certain ++ * window width, or any other constraint you find suitable. ++ * ++ * Since: 1.0 ++ */ ++void ++gtk_hdy_view_switcher_title_set_view_switcher_enabled (GtkHdyViewSwitcherTitle *self, ++ gboolean enabled) ++{ ++ g_return_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self)); ++ ++ enabled = !!enabled; ++ ++ if (self->view_switcher_enabled == enabled) ++ return; ++ ++ self->view_switcher_enabled = enabled; ++ update_view_switcher_visible (self); ++ ++ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_VIEW_SWITCHER_ENABLED]); ++} ++ ++/** ++ * gtk_hdy_view_switcher_title_get_title_visible: ++ * @self: a #GtkHdyViewSwitcherTitle ++ * ++ * Get whether the title label of @self is visible. ++ * ++ * Returns: %TRUE if the title label of @self is visible, %FALSE if not. ++ * ++ * Since: 1.0 ++ */ ++gboolean ++gtk_hdy_view_switcher_title_get_title_visible (GtkHdyViewSwitcherTitle *self) ++{ ++ g_return_val_if_fail (GTK_IS_HDY_VIEW_SWITCHER_TITLE (self), FALSE); ++ ++ return gtk_hdy_squeezer_get_visible_child (self->squeezer) == (GtkWidget *) self->title_box; ++} +diff --git a/gtk/meson.build b/gtk/meson.build +index 80ae1bf..4b3e871 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -389,6 +389,7 @@ gtk_sources = files( + 'hdy-view-switcher-bar.c', + 'hdy-view-switcher-button.c', + 'hdy-view-switcher.c', ++ 'hdy-view-switcher-title.c', + 'language-names.c', + 'script-names.c', + ) +@@ -403,6 +404,7 @@ gtk_private_type_headers = files( + 'hdy-view-switcher-bar-private.h', + 'hdy-view-switcher-button-private.h', + 'hdy-view-switcher-private.h', ++ 'hdy-view-switcher-title-private.h', + ) + + gtk_gir_public_headers = files( +diff --git a/gtk/ui/hdy-view-switcher-title.ui b/gtk/ui/hdy-view-switcher-title.ui +new file mode 100644 +index 0000000..3e16d1f +--- /dev/null ++++ b/gtk/ui/hdy-view-switcher-title.ui +@@ -0,0 +1,52 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<interface> ++ <requires lib="gtk+" version="3.0"/> ++ <template class="GtkHdyViewSwitcherTitle" parent="GtkBin"> ++ <child> ++ <object class="GtkHdySqueezer" id="squeezer"> ++ <property name="transition-type">crossfade</property> ++ <property name="visible">True</property> ++ <property name="no-show-all">True</property> ++ <signal name="notify::visible-child" handler="notify_squeezer_visible_child_cb" swapped="yes"/> ++ <child> ++ <object class="GtkHdyViewSwitcher" id="view_switcher"> ++ <property name="visible">True</property> ++ </object> ++ </child> ++ <child> ++ <object class="GtkBox" id="title_box"> ++ <property name="orientation">vertical</property> ++ <property name="halign">center</property> ++ <property name="valign">center</property> ++ <property name="visible">True</property> ++ <child> ++ <object class="GtkLabel" id="title_label"> ++ <property name="ellipsize">end</property> ++ <property name="halign">center</property> ++ <property name="wrap">False</property> ++ <property name="single-line-mode">True</property> ++ <property name="visible">True</property> ++ <property name="width-chars">5</property> ++ <style> ++ <class name="title"/> ++ </style> ++ </object> ++ </child> ++ <child> ++ <object class="GtkLabel" id="subtitle_label"> ++ <property name="ellipsize">end</property> ++ <property name="halign">center</property> ++ <property name="wrap">False</property> ++ <property name="single-line-mode">True</property> ++ <property name="visible">True</property> ++ <style> ++ <class name="subtitle"/> ++ </style> ++ </object> ++ </child> ++ </object> ++ </child> ++ </object> ++ </child> ++ </template> ++</interface> diff --git a/gtk3-mobile/Add-org.gtk.Settings.Purism.patch b/gtk3-mobile/Add-org.gtk.Settings.Purism.patch new file mode 100644 index 0000000..17dd523 --- /dev/null +++ b/gtk3-mobile/Add-org.gtk.Settings.Purism.patch @@ -0,0 +1,46 @@ +From: Mohammed Sadiq <sadiq@sadiqpk.org> +Date: Thu, 27 Aug 2020 14:45:07 +0530 +Subject: Add org.gtk.Settings.Purism + +--- + gtk/meson.build | 1 + + gtk/org.gtk.Settings.Purism.gschema.xml | 18 ++++++++++++++++++ + 2 files changed, 19 insertions(+) + create mode 100644 gtk/org.gtk.Settings.Purism.gschema.xml + +diff --git a/gtk/meson.build b/gtk/meson.build +index 40feabc..e50a4bc 100644 +--- a/gtk/meson.build ++++ b/gtk/meson.build +@@ -964,6 +964,7 @@ gtk_settings_schemas = [ + 'org.gtk.Settings.ColorChooser.gschema.xml', + 'org.gtk.Settings.EmojiChooser.gschema.xml', + 'org.gtk.Settings.Debug.gschema.xml', ++ 'org.gtk.Settings.Purism.gschema.xml', + ] + install_data(gtk_settings_schemas, install_dir: gtk_schemasdir) + gnome.compile_schemas(depend_files: files(gtk_settings_schemas), +diff --git a/gtk/org.gtk.Settings.Purism.gschema.xml b/gtk/org.gtk.Settings.Purism.gschema.xml +new file mode 100644 +index 0000000..f5637dd +--- /dev/null ++++ b/gtk/org.gtk.Settings.Purism.gschema.xml +@@ -0,0 +1,18 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<schemalist> ++ ++ <schema id='org.gtk.Settings.Purism' path='/org/gtk/settings/purism/'> ++ <key name='is-phone' type='b'> ++ <default>false</default> ++ <summary>Enable hacks for small screens</summary> ++ <description> ++ If this setting is true, GTK enables various tweaks to let it ++ work on small screens. ++ ++ This is a temporary workaround until automatic adaptive UIs ++ are implemented based on the workarea size. ++ </description> ++ </key> ++ </schema> ++ ++</schemalist> diff --git a/gtk3-mobile/Add-padding-for-HdyViewSwitcherTitle.patch b/gtk3-mobile/Add-padding-for-HdyViewSwitcherTitle.patch new file mode 100644 index 0000000..b60666f --- /dev/null +++ b/gtk3-mobile/Add-padding-for-HdyViewSwitcherTitle.patch @@ -0,0 +1,81 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Tue, 13 Oct 2020 18:54:49 +0500 +Subject: Add padding for HdyViewSwitcherTitle + +Make sure it moves to the bottom on narrow sizes. +--- + gtk/theme/Adwaita/_common.scss | 5 +++++ + gtk/theme/Adwaita/gtk-contained-dark.css | 2 ++ + gtk/theme/Adwaita/gtk-contained.css | 2 ++ + gtk/theme/HighContrast/gtk-contained-inverse.css | 2 ++ + gtk/theme/HighContrast/gtk-contained.css | 2 ++ + 5 files changed, 13 insertions(+) + +diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss +index 19b6f38..e40e429 100644 +--- a/gtk/theme/Adwaita/_common.scss ++++ b/gtk/theme/Adwaita/_common.scss +@@ -4868,6 +4868,11 @@ viewswitcher { + padding: 0; + } + ++ headerbar & { ++ padding-left: 70px; ++ padding-right: 70px; ++ } ++ + button { + border-radius: 0; + border-top: 0; +diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css +index 9797b3a..3cd917d 100644 +--- a/gtk/theme/Adwaita/gtk-contained-dark.css ++++ b/gtk/theme/Adwaita/gtk-contained-dark.css +@@ -1958,6 +1958,8 @@ popover.emoji-completion .emoji:hover { background: #424242; } + /************ libhandy * */ + viewswitcher, viewswitcher button { margin: 0; padding: 0; } + ++headerbar viewswitcher { padding-left: 70px; padding-right: 70px; } ++ + viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } + + viewswitcher button:not(:checked):not(:hover) { background: transparent; } +diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css +index 72946ec..4eff74f 100644 +--- a/gtk/theme/Adwaita/gtk-contained.css ++++ b/gtk/theme/Adwaita/gtk-contained.css +@@ -1974,6 +1974,8 @@ popover.emoji-completion .emoji:hover { background: white; } + /************ libhandy * */ + viewswitcher, viewswitcher button { margin: 0; padding: 0; } + ++headerbar viewswitcher { padding-left: 70px; padding-right: 70px; } ++ + viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } + + viewswitcher button:not(:checked):not(:hover) { background: transparent; } +diff --git a/gtk/theme/HighContrast/gtk-contained-inverse.css b/gtk/theme/HighContrast/gtk-contained-inverse.css +index eb633dc..5a2cf09 100644 +--- a/gtk/theme/HighContrast/gtk-contained-inverse.css ++++ b/gtk/theme/HighContrast/gtk-contained-inverse.css +@@ -2038,6 +2038,8 @@ popover.emoji-completion .emoji:hover { background: #424242; } + /************ libhandy * */ + viewswitcher, viewswitcher button { margin: 0; padding: 0; } + ++headerbar viewswitcher { padding-left: 70px; padding-right: 70px; } ++ + viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } + + viewswitcher button:not(:checked):not(:hover) { background: transparent; } +diff --git a/gtk/theme/HighContrast/gtk-contained.css b/gtk/theme/HighContrast/gtk-contained.css +index 95d09e5..ba598cc 100644 +--- a/gtk/theme/HighContrast/gtk-contained.css ++++ b/gtk/theme/HighContrast/gtk-contained.css +@@ -2054,6 +2054,8 @@ popover.emoji-completion .emoji:hover { background: white; } + /************ libhandy * */ + viewswitcher, viewswitcher button { margin: 0; padding: 0; } + ++headerbar viewswitcher { padding-left: 70px; padding-right: 70px; } ++ + viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } + + viewswitcher button:not(:checked):not(:hover) { background: transparent; } diff --git a/gtk3-mobile/Add-the-view-sidebar-symbolic-icon.patch b/gtk3-mobile/Add-the-view-sidebar-symbolic-icon.patch new file mode 100644 index 0000000..fc9a5d1 --- /dev/null +++ b/gtk3-mobile/Add-the-view-sidebar-symbolic-icon.patch @@ -0,0 +1,112 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 1 Jul 2019 13:28:48 +0200 +Subject: Add the view-sidebar-symbolic icon + +This will be used to reveal/conceal the file chooser sidebar. +--- + gtk/gen-gtk-gresources-xml.py | 6 ++ + .../scalable/actions/view-sidebar-symbolic.svg | 78 ++++++++++++++++++++++ + 2 files changed, 84 insertions(+) + create mode 100644 gtk/icons/scalable/actions/view-sidebar-symbolic.svg + +diff --git a/gtk/gen-gtk-gresources-xml.py b/gtk/gen-gtk-gresources-xml.py +index 91cbaa3..4816205 100644 +--- a/gtk/gen-gtk-gresources-xml.py ++++ b/gtk/gen-gtk-gresources-xml.py +@@ -71,6 +71,12 @@ for s in ['16x16', '22x22', '24x24', '32x32', '48x48']: + for f in get_files(icons_dir, '.png'): + xml += ' <file>icons/{0}/{1}/{2}</file>\n'.format(s,c,f) + ++for c in ['actions', 'status']: ++ icons_dir = 'icons/scalable/{0}'.format(c) ++ if os.path.exists(os.path.join(srcdir,icons_dir)): ++ for f in get_files(icons_dir, '.svg'): ++ xml += ' <file>icons/scalable/{0}/{1}</file>\n'.format(c,f) ++ + for f in get_files('inspector', '.ui'): + xml += ' <file compressed=\'true\' preprocess=\'xml-stripblanks\'>inspector/{0}</file>\n'.format(f) + +diff --git a/gtk/icons/scalable/actions/view-sidebar-symbolic.svg b/gtk/icons/scalable/actions/view-sidebar-symbolic.svg +new file mode 100644 +index 0000000..559e11f +--- /dev/null ++++ b/gtk/icons/scalable/actions/view-sidebar-symbolic.svg +@@ -0,0 +1,78 @@ ++<?xml version="1.0" encoding="UTF-8" standalone="no"?> ++<!-- Created with Inkscape (http://www.inkscape.org/) --> ++ ++<svg ++ xmlns:dc="http://purl.org/dc/elements/1.1/" ++ xmlns:cc="http://creativecommons.org/ns#" ++ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ++ xmlns:svg="http://www.w3.org/2000/svg" ++ xmlns="http://www.w3.org/2000/svg" ++ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" ++ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" ++ width="4.2333331mm" ++ height="4.2333331mm" ++ viewBox="0 0 4.2333331 4.2333331" ++ version="1.1" ++ id="svg10539" ++ inkscape:version="0.92.2 2405546, 2018-03-11" ++ sodipodi:docname="view-sidebar-symbolic.svg"> ++ <defs ++ id="defs10533" /> ++ <sodipodi:namedview ++ id="base" ++ pagecolor="#e8e8e7" ++ bordercolor="#666666" ++ borderopacity="1.0" ++ inkscape:pageopacity="0" ++ inkscape:pageshadow="2" ++ inkscape:zoom="44.8" ++ inkscape:cx="3.9955133" ++ inkscape:cy="6.9472436" ++ inkscape:document-units="px" ++ inkscape:current-layer="layer1" ++ showgrid="true" ++ fit-margin-top="0" ++ fit-margin-left="0" ++ fit-margin-right="0" ++ fit-margin-bottom="0" ++ inkscape:window-width="3440" ++ inkscape:window-height="1376" ++ inkscape:window-x="0" ++ inkscape:window-y="27" ++ inkscape:window-maximized="1"> ++ <inkscape:grid ++ type="xygrid" ++ id="grid11109" /> ++ </sodipodi:namedview> ++ <metadata ++ id="metadata10536"> ++ <rdf:RDF> ++ <cc:Work ++ rdf:about=""> ++ <dc:format>image/svg+xml</dc:format> ++ <dc:type ++ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> ++ <dc:title /> ++ </cc:Work> ++ </rdf:RDF> ++ </metadata> ++ <g ++ inkscape:label="Layer 1" ++ inkscape:groupmode="layer" ++ id="layer1" ++ transform="translate(45.205952,-342.50834)"> ++ <path ++ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.99999994;marker:none" ++ d="M 3 2 C 1.9093002 2 1 2.9093039 1 4 L 1 12 L 1 14 L 15 14 L 15 12 L 15 4 C 15 2.9093039 14.090704 2 13 2 L 3 2 z M 3 4 L 6 4 L 6 12 L 3 12 L 3 4 z M 7 4 L 13 4 L 13 12 L 7 12 L 7 4 z " ++ transform="matrix(0.26458333,0,0,0.26458333,-45.205952,342.50834)" ++ id="rect10509" /> ++ <rect ++ transform="matrix(0,-1,-1,0,0,0)" ++ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.26458332;marker:none" ++ id="rect10511" ++ width="2.1166327" ++ height="0.79374611" ++ x="-345.68332" ++ y="43.618412" /> ++ </g> ++</svg> diff --git a/gtk3-mobile/PKGBUILD b/gtk3-mobile/PKGBUILD new file mode 100644 index 0000000..4e5f88b --- /dev/null +++ b/gtk3-mobile/PKGBUILD @@ -0,0 +1,209 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> +# Contributor: Ionut Biru <ibiru@archlinux.org> + +pkgname=gtk3-mobile +pkgver=3.24.43 +pkgrel=1 +pkgdesc="GObject-based multi-platform GUI toolkit (Built with Purism patches)" +url="https://www.gtk.org/" +arch=('x86_64' 'armv7h' 'aarch64') +license=(LGPL-2.1-or-later) +depends=( + adwaita-icon-theme + at-spi2-core + cairo + cantarell-fonts + dconf + desktop-file-utils + fontconfig + fribidi + gdk-pixbuf2 + glib2 + glibc + gtk-update-icon-cache + harfbuzz + iso-codes + libcloudproviders + libcolord + libcups + libegl + libepoxy + libgl + librsvg + libx11 + libxcomposite + libxcursor + libxdamage + libxext + libxfixes + libxi + libxinerama + libxkbcommon + libxrandr + libxrender + pango + shared-mime-info + tracker3 + wayland +) +makedepends=( + git + glib2-devel + gobject-introspection + gtk-doc + hicolor-icon-theme + meson + sassc + wayland-protocols +) +optdepends=('evince: Default print preview command') +provides=( + gtk3 + gtk3-print-backends + libgailutil-3.so + libgdk-3.so + libgtk-3.so +) +conflicts=( + gtk3 + gtk3-print-backends +) +install=gtk3.install +source=( + "git+https://gitlab.gnome.org/GNOME/gtk.git#tag=$pkgver" + gtk-query-immodules-3.0.hook + 0001-Allow-disabling-legacy-Tracker-search.patch + # Purism patches + Add-GtkHdyViewSwitcherButton.patch + Add-GtkHdyViewSwitcher.patch + Add-GtkHdyViewSwitcherBar.patch + Add-GtkHdyAnimation.patch + Add-GtkHdySqueezer.patch + Add-GtkHdyViewSwitcherTitle.patch + Add-GtkHdyShadowHelper.patch + Add-GtkHdyNavigationDirection.patch + Add-GtkHdySwipeable-and-GtkHdySwipeTracker.patch + Add-GtkHdyClamp.patch + Add-GtkHdyFlap.patch + theme-Add-libhandy-styles.patch + Add-padding-for-HdyViewSwitcherTitle.patch + hdy-flap-Use-natural-size-for-folding-instead-of-minimum.patch + Add-org.gtk.Settings.Purism.patch + gtkprivate-Add-an-API-to-check-if-phone.patch + aboutdialog-Port-to-phones.patch + Add-the-view-sidebar-symbolic-icon.patch + Port-file-chooser-to-phones.patch + messagedialog-Set-orientation-based-on-device.patch + dialog-Maximize-resizable-dialogs-on-phones.patch + window-Maximize-resizable-pseudo-dialogs-on-mobile.patch + headerbar-Use-a-back-button-in-dialogs-on-mobile.patch + infobar-Move-the-action-area-below-on-the-phone.patch + Reduce-the-font-chooser-minimum-size.patch + printunixdialog-Adapt-for-phones.patch + window-Disable-window-dragging-on-phones.patch + librem5-Make-GtkShortcutsWindow-adaptive.patch + scrolledwindow-Set-deceleration-value-based-on-the-device.patch + events-Compress-touch-update-events.patch + gdk-wayland-Track-last-touch-serial-on-seat.patch +) +sha256sums=('2d447a2ecf41d2616e413263b495a8f410a43dda1c74cf3e05a740c98f98f9ff' + 'de46e5514ff39a7a65e01e485e874775ab1c0ad20b8e94ada43f4a6af1370845' + 'f102ea1987b9b8370882d5c7f6aa577bfa3adade834b179c6352c39388ab9b3e' + '5d741bf9ef9071f1a78cf8b1b8f0ffa62d67e1144628093e66a0e22ac06d5d3d' + '4d8c9deaa13619eb813e399413bb8e4a77b825e843e80efe9580f0c70317dbae' + '23cff79de2a818b58e8dc76551d32b67642c5031253350285dbec5d7f160a7a0' + 'd3af6e355ce1508fcf021ab46dfed389f914e3f9cf1bbf11b2eec131d5b76427' + '8b40ce6feb86b09c30e08280b8a7cd7fb1a79eea1d5de827706411c629687c8d' + '115a79dceb93715bb729e351b5964003f1bf725044619f28a5a8c76adf5fb22b' + 'd43e2eda22eea205f55ff452e6ebc6b844463c258885a1ea4beae908034d82dc' + 'c8e849707874e5da7610ca69da5f4451fddd3182b2e6a9c4d4531bb0fce70636' + 'a972aa3b1dfe1aa46365d595ab0011154fcb37dede6fd281494872b390181049' + '257d65205e783107115676c6fb193bed7554ca8eac5249c6053b1fddadbe0164' + '5d0234ef479c71b654432f70c004ea203d5d739a91eb2501c1b16c15d6ecf0eb' + 'b92313d8fdb6552cbd30bdd287dac4cd5ebb275b3adc16f9a7ca69aac1de7269' + '59a5f0ebd8b7edbac6383d0c5493524b1e6083fe18feff269122ae90fa00984e' + 'dd45a31922dd3f991510231db2b6bba177b6bba87391359cb3c0f952efe35e8d' + '623071a08e6f11605fcf2715b912f247c136c32cf4606ff4cd6fbf5dcea8cb13' + '4090a682251701822354b9234e56731696e29c5a18d9f784ace4acec48a289e0' + 'f5a46311e324a21ba84378f7afcf84a6b63bf30863f87819082abaf69e07ffea' + '37c03f07e3dfd4797897bc763ab16584329dda38eb669ff0134e5c5bf8c1fee9' + '22907025b7eff0e8df69320b5e8c677ee36f492bfc28ecb216cba5a7a3d23fab' + 'd2cacebfa98032fbe0b4cf8d5f57715701d2b27a6e3b419480a239ee7e88c248' + 'e9990ef0b19f76c34538afca009e3133d382d95ba04d73c7fa3c376bf24f775c' + '93059974c72ac6975b75bf014a5d1e9e4dee0af91c714e54efde9549ae7abe1d' + '5a1bd1b7a6398f941a2c5a2f106f8e58ba94ff7f0dba8f96fb9e74551e821177' + '84af604adc392c5e8e4b721219694f0a7c3d7f1c507ec6ffe4cb3349c6bd2d51' + '2e6b997431443c53449af401bc5d4a3645c55ba3268809cf5c28cdfbe98e379c' + 'f81d536f84b589fa2bdf516c7f7a07083da5a0729467203a918fb8f715b366a7' + '2c1ab430785c1d3ac2622db66aa531a165d592d997e7f445c8512786217955c8' + '7b6d71ac78967c7bcf45c3f9b458874373dcf5ac7b8df451df9dbe7d42e07a6d' + '308db49020bae14b42de494e72216c0b9b222f59d1e18d1e4c04dda45e060e54' + '5b9194b11f214fc7033265ef0f1ed085485318b6fd3028074c8c58115a59a868' + '3568421c2ac4434ccc340add69520bce021b52f90ff2ef3bf065ff2e249e5903') + +pkgver() { + cd gtk + git describe --tags | sed 's/[^-]*-g/r&/;s/-/+/g' +} + +prepare() { + cd gtk + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + msg2 "Applying patch $src..." + patch -Np1 < "../$src" + done +} + +build() { + local meson_options=( + -D broadway_backend=true + -D cloudproviders=true + -D colord=yes + -D gtk_doc=true + -D introspection=true + -D man=true + -D tracker=false + -D tracker3=true + ) + + CFLAGS+=" -DG_DISABLE_CAST_CHECKS" + arch-meson gtk build "${meson_options[@]}" + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + install -Dm644 /dev/stdin "$pkgdir/usr/share/gtk-3.0/settings.ini" <<END +[Settings] +gtk-icon-theme-name = Adwaita +gtk-theme-name = Adwaita +gtk-font-name = Cantarell 11 +END + + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 gtk-query-immodules-3.0.hook + + cd "$pkgdir" + + # Built by GTK 4, shared with GTK 3 + rm usr/bin/gtk-update-icon-cache + rm usr/share/man/man1/gtk-update-icon-cache.1 + + # provided by gtk3-docs + rm -r usr/share/gtk-doc + + # provided by gtk3-demos + rm -r usr/bin/gtk3-{demo,demo-application,icon-browser,widget-factory} + rm -r usr/share/applications/gtk3-{demo,icon-browser,widget-factory}.desktop + rm -r usr/share/glib-2.0/schemas/org.gtk.{Demo,exampleapp}.gschema.xml + rm -r usr/share/icons/hicolor/*/apps/gtk3-{demo,widget-factory}[-.]* + rm -r usr/share/man/man1/gtk3-{demo,demo-application,icon-browser,widget-factory}.1 +} + +# vim:set ts=2 sw=2 et: diff --git a/gtk3-mobile/Port-file-chooser-to-phones.patch b/gtk3-mobile/Port-file-chooser-to-phones.patch new file mode 100644 index 0000000..6247de8 --- /dev/null +++ b/gtk3-mobile/Port-file-chooser-to-phones.patch @@ -0,0 +1,728 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 24 Jun 2019 15:52:36 +0200 +Subject: Port file chooser to phones + +Fixes https://source.puri.sm/Librem5/Apps_Issues/issues/99. +--- + gtk/gtkfilechooserdialog.c | 2 +- + gtk/gtkfilechooserwidget.c | 165 ++++++++++++++++++++++++++++++++++------- + gtk/gtkplacesview.c | 24 ++++++ + gtk/ui/gtkfilechooserwidget.ui | 87 ++++++++++++++++------ + gtk/ui/gtkplacesview.ui | 3 +- + 5 files changed, 226 insertions(+), 55 deletions(-) + +diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c +index db1d8f6..cf4229a 100644 +--- a/gtk/gtkfilechooserdialog.c ++++ b/gtk/gtkfilechooserdialog.c +@@ -532,7 +532,7 @@ setup_save_entry (GtkFileChooserDialog *dialog) + need_entry = action == GTK_FILE_CHOOSER_ACTION_SAVE || + action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER; + +- if (need_entry && !dialog->priv->has_entry) ++ if (need_entry && !dialog->priv->has_entry && FALSE) + { + GtkWidget *box; + GtkWidget *label; +diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c +index 0496fd2..32a32aa 100644 +--- a/gtk/gtkfilechooserwidget.c ++++ b/gtk/gtkfilechooserwidget.c +@@ -31,6 +31,7 @@ + #include "gtkcheckmenuitem.h" + #include "gtkclipboard.h" + #include "gtkcomboboxtext.h" ++#include "gtkcssprovider.h" + #include "gtkdragsource.h" + #include "gtkdragdest.h" + #include "gtkentry.h" +@@ -80,6 +81,8 @@ + #include "gtkseparator.h" + #include "gtkmodelbutton.h" + #include "gtkgesturelongpress.h" ++#include "hdy-clamp-private.h" ++#include "hdy-flap-private.h" + + #include <cairo-gobject.h> + +@@ -225,7 +228,8 @@ struct _GtkFileChooserWidgetPrivate { + GtkWidget *save_widgets_table; + + /* The file browsing widgets */ +- GtkWidget *browse_widgets_hpaned; ++ GtkWidget *flap; ++ GtkWidget *browse_box; + GtkWidget *browse_header_revealer; + GtkWidget *browse_header_stack; + GtkWidget *browse_files_stack; +@@ -379,6 +383,7 @@ struct _GtkFileChooserWidgetPrivate { + guint create_folders : 1; + guint auto_selecting_first_row : 1; + guint browse_files_interaction_frozen : 1; ++ guint location_visible : 1; + }; + + #define MAX_LOADING_TIME 500 +@@ -426,6 +431,7 @@ enum { + MODEL_COL_TIME_TEXT, + MODEL_COL_LOCATION_TEXT, + MODEL_COL_ELLIPSIZE, ++ MODEL_COL_DISPLAY, + MODEL_COL_NUM_COLUMNS + }; + +@@ -445,7 +451,8 @@ enum { + G_TYPE_STRING, /* MODEL_COL_DATE_TEXT */ \ + G_TYPE_STRING, /* MODEL_COL_TIME_TEXT */ \ + G_TYPE_STRING, /* MODEL_COL_LOCATION_TEXT */ \ +- PANGO_TYPE_ELLIPSIZE_MODE /* MODEL_COL_ELLIPSIZE */ ++ PANGO_TYPE_ELLIPSIZE_MODE, /* MODEL_COL_ELLIPSIZE */ \ ++ G_TYPE_STRING /* MODEL_COL_DISPLAY */ + + #define DEFAULT_RECENT_FILES_LIMIT 50 + +@@ -1289,6 +1296,9 @@ places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar, + operation_mode_set (impl, OPERATION_MODE_RECENT); + else + change_folder_and_display_error (impl, location, clear_entry); ++ ++ if (gtk_hdy_flap_get_folded (GTK_HDY_FLAP (priv->flap))) ++ gtk_hdy_flap_set_reveal_flap (GTK_HDY_FLAP (priv->flap), FALSE); + } + + /* Callback used when the places sidebar needs us to display an error message */ +@@ -1846,6 +1856,24 @@ open_folder_cb (GSimpleAction *action, + } + G_GNUC_END_IGNORE_DEPRECATIONS + ++static void ++update_show_columns (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean folded = gtk_hdy_flap_get_folded (GTK_HDY_FLAP (priv->flap)); ++ ++ gtk_tree_view_column_set_visible (priv->list_size_column, ++ priv->show_size_column && !folded); ++ gtk_tree_view_column_set_visible (priv->list_type_column, ++ priv->show_type_column && !folded); ++ gtk_tree_view_column_set_visible (priv->list_time_column, !folded); ++ g_object_set (priv->list_time_renderer, ++ "visible", priv->show_time && !folded, ++ NULL); ++ ++ clear_model_cache (impl, MODEL_COL_DISPLAY); ++} ++ + /* callback used when the "Show Hidden Files" menu item is toggled */ + static void + change_show_hidden_state (GSimpleAction *action, +@@ -1870,8 +1898,7 @@ change_show_size_state (GSimpleAction *action, + g_simple_action_set_state (action, state); + priv->show_size_column = g_variant_get_boolean (state); + +- gtk_tree_view_column_set_visible (priv->list_size_column, +- priv->show_size_column); ++ update_show_columns (impl); + } + + /* Callback used when the "Show Type Column" menu item is toggled */ +@@ -1886,8 +1913,8 @@ change_show_type_state (GSimpleAction *action, + g_simple_action_set_state (action, state); + priv->show_type_column = g_variant_get_boolean (state); + +- gtk_tree_view_column_set_visible (priv->list_type_column, +- priv->show_type_column); ++ update_show_columns (impl); ++ + } + + static void +@@ -1952,11 +1979,9 @@ update_time_renderer_visible (GtkFileChooserWidget *impl) + { + GtkFileChooserWidgetPrivate *priv = impl->priv; + +- g_object_set (priv->list_time_renderer, +- "visible", priv->show_time, +- NULL); + clear_model_cache (impl, MODEL_COL_DATE_TEXT); + clear_model_cache (impl, MODEL_COL_TIME_TEXT); ++ update_show_columns (impl); + gtk_widget_queue_draw (priv->browse_files_tree_view); + } + +@@ -2637,7 +2662,7 @@ location_entry_setup (GtkFileChooserWidget *impl) + _gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action); + _gtk_file_chooser_entry_set_file_filter (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), + priv->current_filter); +- gtk_entry_set_width_chars (GTK_ENTRY (priv->location_entry), 45); ++ + gtk_entry_set_activates_default (GTK_ENTRY (priv->location_entry), TRUE); + } + +@@ -2684,6 +2709,8 @@ save_widgets_create (GtkFileChooserWidget *impl) + { + GtkFileChooserWidgetPrivate *priv = impl->priv; + GtkWidget *vbox; ++ GtkWidget *clamp; ++ GtkWidget *separator; + GtkWidget *widget; + + if (priv->save_widgets != NULL || +@@ -2705,14 +2732,19 @@ save_widgets_create (GtkFileChooserWidget *impl) + return; + } + +- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); +- gtk_style_context_add_class (gtk_widget_get_style_context (vbox), "search-bar"); ++ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + +- gtk_container_set_border_width (GTK_CONTAINER (vbox), 0); ++ clamp = gtk_hdy_clamp_new (); ++ gtk_widget_show (clamp); ++ gtk_container_add (GTK_CONTAINER (vbox), clamp); ++ ++ separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); ++ gtk_widget_show (separator); ++ gtk_container_add (GTK_CONTAINER (vbox), separator); + + priv->save_widgets_table = gtk_grid_new (); +- gtk_container_set_border_width (GTK_CONTAINER (priv->save_widgets_table), 10); +- gtk_box_pack_start (GTK_BOX (vbox), priv->save_widgets_table, FALSE, FALSE, 0); ++ gtk_container_set_border_width (GTK_CONTAINER (priv->save_widgets_table), 6); ++ gtk_container_add (GTK_CONTAINER (clamp), priv->save_widgets_table); + gtk_widget_show (priv->save_widgets_table); + gtk_grid_set_row_spacing (GTK_GRID (priv->save_widgets_table), 12); + gtk_grid_set_column_spacing (GTK_GRID (priv->save_widgets_table), 12); +@@ -2878,6 +2910,9 @@ places_sidebar_show_other_locations_with_flags_cb (GtkPlacesSidebar *sidebar + update_preview_widget_visibility (impl); + + operation_mode_set (impl, OPERATION_MODE_OTHER_LOCATIONS); ++ ++ if (gtk_hdy_flap_get_folded (GTK_HDY_FLAP (priv->flap))) ++ gtk_hdy_flap_set_reveal_flap (GTK_HDY_FLAP (priv->flap), FALSE); + } + + static void +@@ -2940,7 +2975,8 @@ update_extra_and_filters (GtkFileChooserWidget *impl) + { + gtk_widget_set_visible (impl->priv->extra_and_filters, + gtk_widget_get_visible (impl->priv->extra_align) || +- gtk_widget_get_visible (impl->priv->filter_combo_hbox)); ++ gtk_widget_get_visible (impl->priv->filter_combo_hbox) || ++ gtk_hdy_flap_get_folded (GTK_HDY_FLAP (impl->priv->flap))); + } + + /* Sets the extra_widget by packing it in the appropriate place */ +@@ -3755,7 +3791,7 @@ change_icon_theme (GtkFileChooserWidget *impl) + + profile_start ("start", NULL); + +- if (gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height)) ++ if (gtk_icon_size_lookup (GTK_ICON_SIZE_DND, &width, &height)) + priv->icon_size = MAX (width, height); + else + priv->icon_size = FALLBACK_ICON_SIZE; +@@ -3888,7 +3924,6 @@ settings_load (GtkFileChooserWidget *impl) + gint sort_column; + GtkSortType sort_order; + StartupMode startup_mode; +- gint sidebar_width; + GSettings *settings; + + settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl)); +@@ -3898,7 +3933,6 @@ settings_load (GtkFileChooserWidget *impl) + show_type_column = g_settings_get_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN); + sort_column = g_settings_get_enum (settings, SETTINGS_KEY_SORT_COLUMN); + sort_order = g_settings_get_enum (settings, SETTINGS_KEY_SORT_ORDER); +- sidebar_width = g_settings_get_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH); + startup_mode = g_settings_get_enum (settings, SETTINGS_KEY_STARTUP_MODE); + sort_directories_first = g_settings_get_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST); + date_format = g_settings_get_enum (settings, SETTINGS_KEY_DATE_FORMAT); +@@ -3907,9 +3941,8 @@ settings_load (GtkFileChooserWidget *impl) + if (!priv->show_hidden_set) + set_show_hidden (impl, show_hidden); + priv->show_size_column = show_size_column; +- gtk_tree_view_column_set_visible (priv->list_size_column, show_size_column); + priv->show_type_column = show_type_column; +- gtk_tree_view_column_set_visible (priv->list_type_column, show_type_column); ++ update_show_columns (impl); + + priv->sort_column = sort_column; + priv->sort_order = sort_order; +@@ -3924,7 +3957,6 @@ settings_load (GtkFileChooserWidget *impl) + */ + + update_time_renderer_visible (impl); +- gtk_paned_set_position (GTK_PANED (priv->browse_widgets_hpaned), sidebar_width); + } + + static void +@@ -3945,8 +3977,6 @@ settings_save (GtkFileChooserWidget *impl) + g_settings_set_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST, priv->sort_directories_first); + g_settings_set_enum (settings, SETTINGS_KEY_SORT_COLUMN, priv->sort_column); + g_settings_set_enum (settings, SETTINGS_KEY_SORT_ORDER, priv->sort_order); +- g_settings_set_int (settings, SETTINGS_KEY_SIDEBAR_WIDTH, +- gtk_paned_get_position (GTK_PANED (priv->browse_widgets_hpaned))); + g_settings_set_enum (settings, SETTINGS_KEY_DATE_FORMAT, priv->show_time ? DATE_FORMAT_WITH_TIME : DATE_FORMAT_REGULAR); + g_settings_set_enum (settings, SETTINGS_KEY_TYPE_FORMAT, priv->type_format); + +@@ -4416,13 +4446,18 @@ update_columns (GtkFileChooserWidget *impl, + { + GtkFileChooserWidgetPrivate *priv = impl->priv; + gboolean need_resize = FALSE; ++ gboolean folded = gtk_hdy_flap_get_folded (GTK_HDY_FLAP (priv->flap)); ++ ++ priv->location_visible = location_visible; + +- if (gtk_tree_view_column_get_visible (priv->list_location_column) != location_visible) ++ if (gtk_tree_view_column_get_visible (priv->list_location_column) != (location_visible && !folded)) + { +- gtk_tree_view_column_set_visible (priv->list_location_column, location_visible); ++ gtk_tree_view_column_set_visible (priv->list_location_column, location_visible && !folded); + need_resize = TRUE; + } + ++ clear_model_cache (impl, MODEL_COL_DISPLAY); ++ + if (g_strcmp0 (gtk_tree_view_column_get_title (priv->list_time_column), time_title) != 0) + { + gtk_tree_view_column_set_title (priv->list_time_column, time_title); +@@ -5303,6 +5338,47 @@ file_system_model_set (GtkFileSystemModel *model, + g_object_unref (home_location); + } + break; ++ case MODEL_COL_DISPLAY: ++ { ++ gchar *metadata_str; ++ gchar* metadata[7]; ++ int i = 0; ++ ++ #define APPEND_COLUMN(column) {\ ++ GValue val = { 0, }; \ ++ gchar *ret; \ ++ g_value_init (&val, G_TYPE_STRING); \ ++ file_system_model_set (model, file, info, column, &val, data); \ ++ ret = g_value_get_string (&val); \ ++ if (ret && *ret) \ ++ metadata[i++] = g_markup_escape_text (ret, -1); \ ++ g_value_unset (&val); \ ++ } ++ ++ APPEND_COLUMN(MODEL_COL_NAME) ++ APPEND_COLUMN(MODEL_COL_DATE_TEXT) ++ ++ if (priv->show_time) ++ APPEND_COLUMN(MODEL_COL_TIME_TEXT) ++ ++ if (priv->show_type_column) ++ APPEND_COLUMN(MODEL_COL_TYPE) ++ ++ if (priv->show_size_column) ++ APPEND_COLUMN(MODEL_COL_SIZE_TEXT) ++ ++ if (priv->operation_mode == OPERATION_MODE_RECENT) ++ APPEND_COLUMN(MODEL_COL_LOCATION_TEXT) ++ ++ metadata[i] = NULL; ++ metadata_str = g_strjoinv (" · ", &metadata[1]); ++ g_value_take_string (value, g_strdup_printf ("%s\n<span size=\"smaller\" alpha=\"55%%\">%s</span>", metadata[0], metadata_str)); ++ ++ while (i > 0) ++ g_free (metadata[--i]); ++ g_free (metadata_str); ++ } ++ break; + default: + g_assert_not_reached (); + break; +@@ -8106,6 +8182,7 @@ static void + update_cell_renderer_attributes (GtkFileChooserWidget *impl) + { + GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean folded = gtk_hdy_flap_get_folded (GTK_HDY_FLAP (priv->flap)); + + gtk_tree_view_column_set_attributes (priv->list_name_column, + priv->list_pixbuf_renderer, +@@ -8114,7 +8191,8 @@ update_cell_renderer_attributes (GtkFileChooserWidget *impl) + NULL); + gtk_tree_view_column_set_attributes (priv->list_name_column, + priv->list_name_renderer, +- "text", MODEL_COL_NAME, ++ folded ? "markup" : "text", ++ folded ? MODEL_COL_DISPLAY : MODEL_COL_NAME, + "ellipsize", MODEL_COL_ELLIPSIZE, + "sensitive", MODEL_COL_IS_SENSITIVE, + NULL); +@@ -8152,6 +8230,20 @@ update_cell_renderer_attributes (GtkFileChooserWidget *impl) + update_time_renderer_visible (impl); + } + ++static void ++flap_folded_cb (GtkFileChooserWidget *impl) ++{ ++ GtkFileChooserWidgetPrivate *priv = impl->priv; ++ gboolean folded = gtk_hdy_flap_get_folded (GTK_HDY_FLAP (priv->flap)); ++ ++ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->browse_files_tree_view), !folded); ++ ++ update_show_columns (impl); ++ update_cell_renderer_attributes (impl); ++ update_extra_and_filters (impl); ++ update_columns (impl, priv->location_visible, gtk_tree_view_column_get_title (priv->list_time_column)); ++} ++ + static void + location_set_user_text (GtkFileChooserWidget *impl, + const gchar *path) +@@ -8688,12 +8780,13 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) + "/org/gtk/libgtk/ui/gtkfilechooserwidget.ui"); + + /* A *lot* of widgets that we need to handle .... */ +- gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_widgets_hpaned); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_stack); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, places_sidebar); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, places_view); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_tree_view); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_files_swin); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, flap); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_box); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_header_revealer); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_header_stack); + gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_new_folder_button); +@@ -8755,6 +8848,7 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class) + gtk_widget_class_bind_template_callback (widget_class, rename_file_name_changed); + gtk_widget_class_bind_template_callback (widget_class, rename_file_rename_clicked); + gtk_widget_class_bind_template_callback (widget_class, rename_file_end); ++ gtk_widget_class_bind_template_callback (widget_class, flap_folded_cb); + + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE); + gtk_widget_class_set_css_name (widget_class, "filechooser"); +@@ -8831,6 +8925,19 @@ post_process_ui (GtkFileChooserWidget *impl) + gtk_popover_set_relative_to (GTK_POPOVER (impl->priv->rename_file_popover), impl->priv->browse_files_tree_view); + + add_actions (impl); ++ ++ { ++ GtkCssProvider *provider; ++ ++ provider = gtk_css_provider_new (); ++ gtk_css_provider_load_from_data (provider, "placessidebar { border: none; }", -1, NULL); ++ ++ gtk_style_context_add_provider (gtk_widget_get_style_context (impl->priv->places_sidebar), ++ GTK_STYLE_PROVIDER (provider), ++ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); ++ } ++ ++ update_extra_and_filters (impl); + } + + void +@@ -8888,6 +8995,8 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl) + /* Ensure GTK+ private types used by the template + * definition before calling gtk_widget_init_template() + */ ++ g_type_ensure (GTK_TYPE_HDY_CLAMP); ++ g_type_ensure (GTK_TYPE_HDY_FLAP); + g_type_ensure (GTK_TYPE_PATH_BAR); + g_type_ensure (GTK_TYPE_PLACES_VIEW); + +diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c +index 89f7ace..fd17820 100644 +--- a/gtk/gtkplacesview.c ++++ b/gtk/gtkplacesview.c +@@ -26,6 +26,7 @@ + #include "gtkmarshalers.h" + #include "gtkplacesviewprivate.h" + #include "gtkplacesviewrowprivate.h" ++#include "gtkprivate.h" + #include "gtktypebuiltins.h" + + /** +@@ -94,6 +95,9 @@ struct _GtkPlacesViewPrivate + guint fetching_networks : 1; + guint loading : 1; + guint destroyed : 1; ++ ++ GtkWidget *connect_label; ++ GSettings *settings; + }; + + static void mount_volume (GtkPlacesView *view, +@@ -409,6 +413,8 @@ gtk_places_view_destroy (GtkWidget *widget) + g_cancellable_cancel (priv->cancellable); + g_cancellable_cancel (priv->networks_fetching_cancellable); + ++ g_clear_object (&priv->settings); ++ + GTK_WIDGET_CLASS (gtk_places_view_parent_class)->destroy (widget); + } + +@@ -2211,6 +2217,14 @@ listbox_sort_func (GtkListBoxRow *row1, + return retval; + } + ++static void ++update_connect_label (GtkPlacesView *self) ++{ ++ GtkPlacesViewPrivate *priv = gtk_places_view_get_instance_private (self); ++ ++ gtk_widget_set_visible (priv->connect_label, !_gtk_get_is_phone ()); ++} ++ + static void + gtk_places_view_constructed (GObject *object) + { +@@ -2260,6 +2274,15 @@ gtk_places_view_constructed (GObject *object) + "volume-removed", + G_CALLBACK (update_places), + object); ++ ++ priv->settings = _gtk_get_purism_settings (); ++ ++ if (priv->settings) ++ g_signal_connect_object (priv->settings, "changed::is-phone", ++ G_CALLBACK (update_connect_label), object, ++ G_CONNECT_SWAPPED); ++ ++ update_connect_label (GTK_PLACES_VIEW (object)); + } + + static void +@@ -2386,6 +2409,7 @@ gtk_places_view_class_init (GtkPlacesViewClass *klass) + gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, stack); + gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, server_adresses_popover); + gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, available_protocols_grid); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, connect_label); + + gtk_widget_class_bind_template_callback (widget_class, on_address_entry_text_changed); + gtk_widget_class_bind_template_callback (widget_class, on_address_entry_show_help_pressed); +diff --git a/gtk/ui/gtkfilechooserwidget.ui b/gtk/ui/gtkfilechooserwidget.ui +index 6e7c21d..89f891c 100644 +--- a/gtk/ui/gtkfilechooserwidget.ui ++++ b/gtk/ui/gtkfilechooserwidget.ui +@@ -9,14 +9,20 @@ + <property name="visible">1</property> + <property name="orientation">vertical</property> + <child> +- <object class="GtkPaned" id="browse_widgets_hpaned"> ++ <object class="GtkHdyFlap" id="flap"> + <property name="visible">1</property> +- <child> ++ <property name="swipe-to-open">0</property> ++ <property name="swipe-to-close" bind-source="flap" bind-property="folded" bind-flags="sync-create"/> ++ <signal name="notify::folded" handler="flap_folded_cb" swapped="yes"/> ++ <child type="flap"> + <object class="GtkPlacesSidebar" id="places_sidebar"> + <property name="visible">1</property> ++ <property name="hexpand-set">1</property> + <property name="hscrollbar-policy">never</property> + <property name="local-only">1</property> + <property name="show-other-locations">1</property> ++ <property name="propagate-natural-width">1</property> ++ <property name="width-request">200</property> + <child internal-child="accessible"> + <object class="AtkObject"> + <property name="AtkObject::accessible-name" translatable="yes">Places</property> +@@ -29,13 +35,17 @@ + <signal name="show-error-message" handler="places_sidebar_show_error_message_cb" swapped="no"/> + <signal name="show-other-locations-with-flags" handler="places_sidebar_show_other_locations_with_flags_cb" swapped="no"/> + </object> +- <packing> +- <property name="resize">0</property> +- <property name="shrink">0</property> +- </packing> ++ </child> ++ <child type="separator"> ++ <object class="GtkSeparator"> ++ <property name="visible">1</property> ++ <style> ++ <class name="sidebar"/> ++ </style> ++ </object> + </child> + <child> +- <object class="GtkBox"> ++ <object class="GtkBox" id="browse_box"> + <property name="visible">1</property> + <property name="orientation">vertical</property> + <child> +@@ -110,6 +120,9 @@ + <property name="name">pathbar</property> + </packing> + </child> ++ <child> ++ <object class="GtkHdyClamp"> ++ <property name="visible">1</property> + <child> + <object class="GtkBox" id="location_entry_box"> + <property name="visible">1</property> +@@ -122,10 +135,15 @@ + </object> + </child> + </object> ++ </child> ++ </object> + <packing> + <property name="name">location</property> + </packing> + </child> ++ <child> ++ <object class="GtkHdyClamp"> ++ <property name="visible">1</property> + <child> + <object class="GtkBox" id="search_entry_box"> + <property name="visible">1</property> +@@ -137,10 +155,10 @@ + <property name="AtkObject::accessible-name" translatable="yes">Search Layer</property> + </object> + </child> +- <child type="center"> ++ <child> + <object class="GtkSearchEntry" id="search_entry"> + <property name="visible">1</property> +- <property name="width-chars">45</property> ++ <property name="hexpand">True</property> + <signal name="search-changed" handler="search_entry_activate_cb" swapped="yes"/> + <signal name="stop-search" handler="search_entry_stop_cb" swapped="yes"/> + </object> +@@ -154,6 +172,8 @@ + </packing> + </child> + </object> ++ </child> ++ </object> + <packing> + <property name="name">search</property> + </packing> +@@ -171,9 +191,15 @@ + </packing> + </child> + <child> +- <object class="GtkBox" id="list_and_preview_box"> ++ <object class="GtkHdyFlap" id="list_and_preview_box"> + <property name="visible">1</property> +- <property name="spacing">12</property> ++ <property name="flap-position">end</property> ++ <property name="fold-policy">never</property> ++ <property name="modal">False</property> ++ <property name="swipe-to-open">False</property> ++ <property name="swipe-to-close">False</property> ++ <property name="transition-type">slide</property> ++ <property name="reveal-flap" bind-source="flap" bind-property="folded" bind-flags="invert-boolean|sync-create"/> + <child> + <object class="GtkStack" id="browse_files_stack"> + <property name="visible">1</property> +@@ -223,6 +249,7 @@ + <child> + <object class="GtkCellRendererPixbuf" id="list_pixbuf_renderer"> + <property name="xpad">6</property> ++ <property name="stock-size">5</property> + </object> + </child> + <child> +@@ -351,6 +378,8 @@ + <object class="GtkLabel"> + <property name="visible">1</property> + <property name="label" translatable="yes">No Results Found</property> ++ <property name="justify">center</property> ++ <property name="wrap">True</property> + <attributes> + <attribute name="weight" value="bold"/> + <attribute name="scale" value="1.44"/> +@@ -365,6 +394,8 @@ + <object class="GtkLabel"> + <property name="visible">1</property> + <property name="label" translatable="yes">Try a different search</property> ++ <property name="justify">center</property> ++ <property name="wrap">True</property> + <style> + <class name="dim-label"/> + </style> +@@ -380,19 +411,15 @@ + </packing> + </child> + </object> +- <packing> +- <property name="expand">1</property> +- </packing> + </child> +- <child> ++ <child type="flap"> + <object class="GtkBox" id="preview_box"> + <property name="orientation">vertical</property> + <property name="spacing">12</property> ++ <style> ++ <class name="background"/> ++ </style> + </object> +- <packing> +- <property name="fill">0</property> +- <property name="position">1</property> +- </packing> + </child> + </object> + <packing> +@@ -401,9 +428,6 @@ + </packing> + </child> + </object> +- <packing> +- <property name="shrink">0</property> +- </packing> + </child> + </object> + <packing> +@@ -419,15 +443,30 @@ + <child> + <object class="GtkActionBar" id="extra_and_filters"> + <property name="no-show-all">1</property> ++ <child> ++ <object class="GtkToggleButton" id="reveal_sidebar_button"> ++ <property name="visible" bind-source="flap" bind-property="folded" bind-flags="sync-create"/> ++ <property name="active" bind-source="flap" bind-property="reveal-flap" bind-flags="sync-create|bidirectional"/> ++ <property name="tooltip-text" translatable="yes">Show locations</property> ++ <property name="use-underline">1</property> ++ <property name="can-default">1</property> ++ <child> ++ <object class="GtkImage"> ++ <property name="visible">1</property> ++ <property name="icon-name">view-sidebar-symbolic</property> ++ </object> ++ </child> ++ </object> ++ </child> + <child> + <object class="GtkBox" id="extra_align"> +- <property name="visible">1</property> ++ <property name="no-show-all">1</property> + <property name="spacing">12</property> + </object> + </child> + <child> + <object class="GtkBox" id="filter_combo_hbox"> +- <property name="visible">1</property> ++ <property name="no-show-all">1</property> + <property name="spacing">12</property> + <child> + <object class="GtkComboBoxText" id="filter_combo"> +diff --git a/gtk/ui/gtkplacesview.ui b/gtk/ui/gtkplacesview.ui +index 5ede590..d68aab0 100644 +--- a/gtk/ui/gtkplacesview.ui ++++ b/gtk/ui/gtkplacesview.ui +@@ -300,7 +300,7 @@ + <class name="background"/> + </style> + <child> +- <object class="GtkLabel"> ++ <object class="GtkLabel" id="connect_label"> + <property name="visible">1</property> + <property name="hexpand">1</property> + <property name="xalign">0</property> +@@ -336,7 +336,6 @@ + <property name="visible">1</property> + <property name="can-focus">1</property> + <property name="hexpand">1</property> +- <property name="width-chars">20</property> + <property name="placeholder-text" translatable="yes">Enter server address…</property> + <property name="secondary-icon-name">dialog-question-symbolic</property> + <property name="completion">address_entry_completion</property> diff --git a/gtk3-mobile/Reduce-the-font-chooser-minimum-size.patch b/gtk3-mobile/Reduce-the-font-chooser-minimum-size.patch new file mode 100644 index 0000000..9f5f2ac --- /dev/null +++ b/gtk3-mobile/Reduce-the-font-chooser-minimum-size.patch @@ -0,0 +1,38 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Sun, 25 Aug 2019 10:20:31 +0200 +Subject: Reduce the font chooser minimum size + +This helps GtkfontChooserDialog fitting in mobile phone screens. +--- + gtk/ui/gtkfontchooserdialog.ui | 2 ++ + gtk/ui/gtkfontchooserwidget.ui | 4 ++-- + 2 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/gtk/ui/gtkfontchooserdialog.ui b/gtk/ui/gtkfontchooserdialog.ui +index 1067096..f787ee6 100644 +--- a/gtk/ui/gtkfontchooserdialog.ui ++++ b/gtk/ui/gtkfontchooserdialog.ui +@@ -5,6 +5,8 @@ + <property name="border-width">5</property> + <property name="title" translatable="yes">Select Font</property> + <property name="type-hint">dialog</property> ++ <property name="default-width">400</property> ++ <property name="default-height">500</property> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox1"> + <property name="orientation">vertical</property> +diff --git a/gtk/ui/gtkfontchooserwidget.ui b/gtk/ui/gtkfontchooserwidget.ui +index 2d39200..074f233 100644 +--- a/gtk/ui/gtkfontchooserwidget.ui ++++ b/gtk/ui/gtkfontchooserwidget.ui +@@ -70,8 +70,8 @@ + <child> + <object class="GtkScrolledWindow" id="list_scrolled_window"> + <property name="visible">1</property> +- <property name="width-request">400</property> +- <property name="height-request">300</property> ++ <property name="width-request">300</property> ++ <property name="height-request">50</property> + <property name="can-focus">1</property> + <property name="hexpand">1</property> + <property name="vexpand">1</property> diff --git a/gtk3-mobile/aboutdialog-Port-to-phones.patch b/gtk3-mobile/aboutdialog-Port-to-phones.patch new file mode 100644 index 0000000..27fea46 --- /dev/null +++ b/gtk3-mobile/aboutdialog-Port-to-phones.patch @@ -0,0 +1,186 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 28 Jan 2019 18:52:40 +0100 +Subject: aboutdialog: Port to phones + +--- + gtk/gtkaboutdialog.c | 22 ++++++++++++++++------ + gtk/ui/gtkaboutdialog.ui | 30 +++++++++++++++++++++++++----- + 2 files changed, 41 insertions(+), 11 deletions(-) + +diff --git a/gtk/gtkaboutdialog.c b/gtk/gtkaboutdialog.c +index adb0515..a1967b0 100644 +--- a/gtk/gtkaboutdialog.c ++++ b/gtk/gtkaboutdialog.c +@@ -51,12 +51,13 @@ + #include "gtktogglebutton.h" + #include "gtktypebuiltins.h" + #include "gtkstack.h" +-#include "gtkstackswitcher.h" + #include "gtksettings.h" + #include "gtkheaderbar.h" + #include "gtkprivate.h" + #include "gtkintl.h" + #include "gtkdialogprivate.h" ++#include "hdy-view-switcher-bar-private.h" ++#include "hdy-view-switcher-title-private.h" + + + /** +@@ -162,6 +163,7 @@ struct _GtkAboutDialogPrivate + + GtkWidget *stack; + GtkWidget *stack_switcher; ++ GtkWidget *stack_switcher_mobile; + GtkWidget *credits_button; + GtkWidget *license_button; + +@@ -591,6 +593,7 @@ gtk_about_dialog_class_init (GtkAboutDialogClass *klass) + + gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, stack); + gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, stack_switcher); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, stack_switcher_mobile); + gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, logo_image); + gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, name_label); + gtk_widget_class_bind_template_child_private (widget_class, GtkAboutDialog, version_label); +@@ -625,12 +628,13 @@ static void + update_stack_switcher_visibility (GtkAboutDialog *about) + { + GtkAboutDialogPrivate *priv = about->priv; ++ gboolean show; + +- if (gtk_widget_get_visible (priv->credits_page) || +- gtk_widget_get_visible (priv->license_page)) +- gtk_widget_show (priv->stack_switcher); +- else +- gtk_widget_hide (priv->stack_switcher); ++ show = gtk_widget_get_visible (priv->credits_page) || ++ gtk_widget_get_visible (priv->license_page); ++ ++ gtk_widget_set_visible (priv->stack_switcher, show); ++ gtk_widget_set_visible (priv->stack_switcher_mobile, show); + } + + static void +@@ -749,6 +753,9 @@ gtk_about_dialog_init (GtkAboutDialog *about) + + gtk_dialog_set_default_response (GTK_DIALOG (about), GTK_RESPONSE_CANCEL); + ++ g_type_ensure (GTK_TYPE_HDY_VIEW_SWITCHER_BAR); ++ g_type_ensure (GTK_TYPE_HDY_VIEW_SWITCHER_TITLE); ++ + gtk_widget_init_template (GTK_WIDGET (about)); + gtk_dialog_set_use_header_bar_from_setting (GTK_DIALOG (about)); + +@@ -2197,6 +2204,9 @@ add_credits_section (GtkAboutDialog *about, + markup = g_strdup_printf ("<span size=\"small\">%s</span>", title); + label = gtk_label_new (markup); + gtk_label_set_use_markup (GTK_LABEL (label), TRUE); ++ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); ++ gtk_label_set_line_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD_CHAR); ++ + g_free (markup); + gtk_widget_set_halign (label, GTK_ALIGN_END); + gtk_widget_set_valign (label, GTK_ALIGN_CENTER); +diff --git a/gtk/ui/gtkaboutdialog.ui b/gtk/ui/gtkaboutdialog.ui +index 31bb628..7d3d2a5 100644 +--- a/gtk/ui/gtkaboutdialog.ui ++++ b/gtk/ui/gtkaboutdialog.ui +@@ -6,29 +6,32 @@ + <property name="icon-name">help-about</property> + </object> + <template class="GtkAboutDialog" parent="GtkDialog"> +- <property name="border-width">5</property> +- <property name="resizable">0</property> + <property name="type-hint">dialog</property> ++ <property name="default-width">420</property> + <child internal-child="headerbar"> + <object class="GtkHeaderBar" id="headerbar1"> + <property name="visible">1</property> + <property name="show-close-button">1</property> + <child type="title"> +- <object class="GtkStackSwitcher" id="stack_switcher"> ++ <object class="GtkHdyViewSwitcherTitle" id="stack_switcher"> ++ <property name="visible">1</property> + <property name="stack">stack</property> + <property name="no-show-all">1</property> ++ <property name="policy">wide</property> ++ <property name="title" bind-source="GtkAboutDialog" bind-property="title" bind-flags="sync-create"/> + </object> + </child> + </object> + </child> + <child internal-child="vbox"> + <object class="GtkBox" id="dialog-vbox1"> ++ <property name="border-width">0</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child> + <object class="GtkBox" id="box"> + <property name="visible">1</property> +- <property name="border-width">5</property> ++ <property name="border-width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <child> +@@ -57,12 +60,16 @@ + </child> + <child> + <object class="GtkStack" id="stack"> +- <property name="width-request">400</property> ++ <property name="width-request">300</property> + <property name="height-request">100</property> + <property name="visible">1</property> + <property name="transition-type">over-up-down</property> + <property name="transition-duration">600</property> + <signal name="notify::visible-child" handler="stack_visible_child_notify" swapped="no"/> ++ <child> ++ <object class="GtkScrolledWindow" id="scrolledwindow3"> ++ <property name="visible">1</property> ++ <property name="propagate-natural-height">1</property> + <child> + <object class="GtkBox" id="page_vbox"> + <property name="visible">1</property> +@@ -131,9 +138,12 @@ + <property name="fill">0</property> + </packing> + </child> ++ </object> ++ </child> + </object> + <packing> + <property name="name">main</property> ++ <property name="icon-name">help-about-symbolic</property> + <property name="title" translatable="yes">About</property> + </packing> + </child> +@@ -174,6 +184,7 @@ + </object> + <packing> + <property name="name">credits</property> ++ <property name="icon-name">system-users-symbolic</property> + <property name="title" translatable="yes">Credits</property> + </packing> + </child> +@@ -207,6 +218,7 @@ + </object> + <packing> + <property name="name">license</property> ++ <property name="icon-name">accessories-dictionary-symbolic</property> + <property name="title" translatable="yes">License</property> + </packing> + </child> +@@ -222,6 +234,14 @@ + <property name="position">1</property> + </packing> + </child> ++ <child> ++ <object class="GtkHdyViewSwitcherBar" id="stack_switcher_mobile"> ++ <property name="stack">stack</property> ++ <property name="no-show-all">1</property> ++ <property name="visible">1</property> ++ <property name="reveal" bind-source="stack_switcher" bind-property="title-visible" bind-flags="sync-create"/> ++ </object> ++ </child> + </object> + </child> + </template> diff --git a/gtk3-mobile/dialog-Maximize-resizable-dialogs-on-phones.patch b/gtk3-mobile/dialog-Maximize-resizable-dialogs-on-phones.patch new file mode 100644 index 0000000..81bc74b --- /dev/null +++ b/gtk3-mobile/dialog-Maximize-resizable-dialogs-on-phones.patch @@ -0,0 +1,23 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Thu, 11 Jul 2019 10:26:16 +0200 +Subject: dialog: Maximize resizable dialogs on phones + +This will make them look better on phone screens. +--- + gtk/gtkdialog.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c +index 0e58ac4..84e1413 100644 +--- a/gtk/gtkdialog.c ++++ b/gtk/gtkdialog.c +@@ -779,6 +779,9 @@ gtk_dialog_map (GtkWidget *widget) + + GTK_WIDGET_CLASS (gtk_dialog_parent_class)->map (widget); + ++ if (gtk_window_get_resizable (window) && _gtk_get_is_phone ()) ++ gtk_window_maximize (window); ++ + focus = gtk_window_get_focus (window); + if (!focus) + { diff --git a/gtk3-mobile/events-Compress-touch-update-events.patch b/gtk3-mobile/events-Compress-touch-update-events.patch new file mode 100644 index 0000000..9d66200 --- /dev/null +++ b/gtk3-mobile/events-Compress-touch-update-events.patch @@ -0,0 +1,67 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Thu, 3 Dec 2020 14:42:23 +0500 +Subject: events: Compress touch update events + +GTK3 often moves child windows around in response to touch gestures, such +as scrolling or swipes. This leads to a problem when a frame has multiple +events whose coordinates are relative to the window: the first event moves +the window, then the second event has wrong coordinates. This leads to a +severe jumping when scrolling or swiping when the system slows down. + +GTK4 fixes this by getting rid of child windows completely, but for GTK3 +we have to work around this by compressing touch update events. This isn't +really suitable for upstream, but wouldn't be the worst patch we have +downstream. + +See https://source.puri.sm/Librem5/debs/gtk/-/issues/8 +--- + gdk/gdkevents.c | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c +index 087178e..40ef45d 100644 +--- a/gdk/gdkevents.c ++++ b/gdk/gdkevents.c +@@ -268,30 +268,36 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display) + while (tmp_list) + { + GdkEventPrivate *event = tmp_list->data; ++ GdkWindow *window; ++ GdkDevice *device; + + if (event->flags & GDK_EVENT_PENDING) + break; + +- if (event->event.type != GDK_MOTION_NOTIFY) ++ if (event->event.type != GDK_MOTION_NOTIFY && ++ event->event.type != GDK_TOUCH_UPDATE) + break; + ++ window = gdk_event_get_window (&event->event); ++ device = gdk_event_get_device (&event->event); ++ + if (pending_motion_window != NULL && +- pending_motion_window != event->event.motion.window) ++ pending_motion_window != window) + break; + + if (pending_motion_device != NULL && +- pending_motion_device != event->event.motion.device) ++ pending_motion_device != device) + break; + +- pending_motion_window = event->event.motion.window; ++ pending_motion_window = window; + +- if (!event->event.motion.window->event_compression) ++ if (!window->event_compression) + { + uncompressed_motion = TRUE; + break; + } + +- pending_motion_device = event->event.motion.device; ++ pending_motion_device = device; + pending_motions = tmp_list; + + tmp_list = tmp_list->prev; diff --git a/gtk3-mobile/gdk-wayland-Track-last-touch-serial-on-seat.patch b/gtk3-mobile/gdk-wayland-Track-last-touch-serial-on-seat.patch new file mode 100644 index 0000000..dbee08d --- /dev/null +++ b/gtk3-mobile/gdk-wayland-Track-last-touch-serial-on-seat.patch @@ -0,0 +1,46 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= <agx@sigxcpu.org> +Date: Fri, 10 Mar 2023 12:25:13 +0100 +Subject: gdk/wayland: Track last touch serial on seat + +Since the touch data is released on touch up +_gdk_wayland_seat_get_last_implicit_grab_serial will return 0 serial +most of the time for touch only devices. This breaks xdg activation as +the compositor will reject tokens that have a 0 serial set via +xdg_activation_token_v1_set_serial. + +Avoid that by tracking touch serials on the seat itself too. +--- + gdk/wayland/gdkdevice-wayland.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c +index 9dc86a3..9570e82 100644 +--- a/gdk/wayland/gdkdevice-wayland.c ++++ b/gdk/wayland/gdkdevice-wayland.c +@@ -212,6 +212,7 @@ struct _GdkWaylandSeat + GdkKeymap *keymap; + + GHashTable *touches; ++ guint32 last_touch_down_serial; + GList *tablets; + GList *tablet_tools; + GList *tablet_pads; +@@ -2514,7 +2515,7 @@ touch_handle_down (void *data, + touch = gdk_wayland_seat_add_touch (seat, id, wl_surface); + touch->x = wl_fixed_to_double (x); + touch->y = wl_fixed_to_double (y); +- touch->touch_down_serial = serial; ++ seat->last_touch_down_serial = touch->touch_down_serial = serial; + + event = _create_touch_event (seat, touch, GDK_TOUCH_BEGIN, time); + +@@ -5398,6 +5399,9 @@ _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat, + } + } + ++ if (wayland_seat->last_touch_down_serial > serial) ++ serial = wayland_seat->last_touch_down_serial; ++ + return serial; + } + diff --git a/gtk3-mobile/gtk-query-immodules-3.0.hook b/gtk3-mobile/gtk-query-immodules-3.0.hook new file mode 100644 index 0000000..c7703cf --- /dev/null +++ b/gtk3-mobile/gtk-query-immodules-3.0.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = File +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/gtk-3.0/3.0.0/immodules/*.so + +[Action] +Description = Probing GTK3 input method modules... +When = PostTransaction +Exec = /usr/bin/gtk-query-immodules-3.0 --update-cache diff --git a/gtk3-mobile/gtk3.install b/gtk3-mobile/gtk3.install new file mode 100644 index 0000000..c0c4453 --- /dev/null +++ b/gtk3-mobile/gtk3.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib/gtk-3.0/3.0.0/immodules.cache +} diff --git a/gtk3-mobile/gtkprivate-Add-an-API-to-check-if-phone.patch b/gtk3-mobile/gtkprivate-Add-an-API-to-check-if-phone.patch new file mode 100644 index 0000000..3b937f7 --- /dev/null +++ b/gtk3-mobile/gtkprivate-Add-an-API-to-check-if-phone.patch @@ -0,0 +1,53 @@ +From: Mohammed Sadiq <sadiq@sadiqpk.org> +Date: Thu, 27 Aug 2020 14:48:11 +0530 +Subject: gtkprivate: Add an API to check if phone + +--- + gtk/gtkprivate.h | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h +index aca24fd..635b247 100644 +--- a/gtk/gtkprivate.h ++++ b/gtk/gtkprivate.h +@@ -127,6 +127,40 @@ GBytes *get_emoji_data (void); + + #endif /* G_ENABLE_DEBUG */ + ++static inline GSettings * ++_gtk_get_purism_settings (void) ++{ ++ GSettings *gsettings; ++ GSettingsSchema *schema; ++ ++ schema = g_settings_schema_source_lookup (g_settings_schema_source_get_default (), ++ "org.gtk.Settings.Purism", TRUE); ++ ++ if (!schema) ++ return NULL; ++ ++ gsettings = g_settings_new_full (schema, NULL, NULL); ++ ++ g_settings_schema_unref (schema); ++ ++ return gsettings; ++} ++ ++static inline gboolean ++_gtk_get_is_phone (void) ++{ ++ GSettings *gsettings = _gtk_get_purism_settings (); ++ gboolean is_phone; ++ ++ if (!gsettings) ++ return FALSE; ++ ++ is_phone = g_settings_get_boolean (gsettings, "is-phone"); ++ g_object_unref (gsettings); ++ ++ return is_phone; ++} ++ + G_END_DECLS + + #endif /* __GTK_PRIVATE_H__ */ diff --git a/gtk3-mobile/hdy-flap-Use-natural-size-for-folding-instead-of-minimum.patch b/gtk3-mobile/hdy-flap-Use-natural-size-for-folding-instead-of-minimum.patch new file mode 100644 index 0000000..61106e3 --- /dev/null +++ b/gtk3-mobile/hdy-flap-Use-natural-size-for-folding-instead-of-minimum.patch @@ -0,0 +1,51 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Wed, 23 Dec 2020 16:33:24 +0500 +Subject: hdy-flap: Use natural size for folding instead of minimum + +See https://gitlab.gnome.org/GNOME/libhandy/-/issues/390#note_991319 +--- + gtk/hdy-flap.c | 24 ++++++++++++++++-------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +diff --git a/gtk/hdy-flap.c b/gtk/hdy-flap.c +index 8735ad9..1b4504d 100644 +--- a/gtk/hdy-flap.c ++++ b/gtk/hdy-flap.c +@@ -962,21 +962,29 @@ gtk_hdy_flap_size_allocate (GtkWidget *widget, + alloc->x, alloc->y, alloc->width, alloc->height); + + if (self->fold_policy == GTK_HDY_FLAP_FOLD_POLICY_AUTO) { +- GtkRequisition flap_min = { 0, 0 }; +- GtkRequisition content_min = { 0, 0 }; +- GtkRequisition separator_min = { 0, 0 }; ++ GtkRequisition flap_size = { 0, 0 }; ++ GtkRequisition content_size = { 0, 0 }; ++ GtkRequisition separator_size = { 0, 0 }; ++ gboolean flap_expand, content_expand; ++ ++ flap_expand = gtk_widget_compute_expand (self->flap.widget, self->orientation); ++ content_expand = gtk_widget_compute_expand (self->content.widget, self->orientation); + + if (self->flap.widget) +- gtk_widget_get_preferred_size (self->flap.widget, &flap_min, NULL); ++ gtk_widget_get_preferred_size (self->flap.widget, ++ content_expand ? &flap_size : NULL, ++ content_expand ? NULL : &flap_size); + if (self->content.widget) +- gtk_widget_get_preferred_size (self->content.widget, &content_min, NULL); ++ gtk_widget_get_preferred_size (self->content.widget, ++ flap_expand ? &content_size : NULL, ++ flap_expand ? NULL : &content_size); + if (self->separator.widget) +- gtk_widget_get_preferred_size (self->separator.widget, &separator_min, NULL); ++ gtk_widget_get_preferred_size (self->separator.widget, &separator_size, NULL); + + if (self->orientation == GTK_ORIENTATION_HORIZONTAL) +- set_folded (self, alloc->width < content_min.width + flap_min.width + separator_min.width); ++ set_folded (self, alloc->width < content_size.width + flap_size.width + separator_size.width); + else +- set_folded (self, alloc->height < content_min.height + flap_min.height + separator_min.height); ++ set_folded (self, alloc->height < content_size.height + flap_size.height + separator_size.height); + } + + compute_allocation (self, diff --git a/gtk3-mobile/headerbar-Use-a-back-button-in-dialogs-on-mobile.patch b/gtk3-mobile/headerbar-Use-a-back-button-in-dialogs-on-mobile.patch new file mode 100644 index 0000000..709477a --- /dev/null +++ b/gtk3-mobile/headerbar-Use-a-back-button-in-dialogs-on-mobile.patch @@ -0,0 +1,101 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Thu, 11 Jul 2019 10:44:14 +0200 +Subject: headerbar: Use a back button in dialogs on mobile + +This will allow to drop the close buttons and make the dialogs and +transient windows look like proper mobile dialogs. +--- + gtk/gtkheaderbar.c | 38 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 37 insertions(+), 1 deletion(-) + +diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c +index 0ef94e3..9a4833a 100644 +--- a/gtk/gtkheaderbar.c ++++ b/gtk/gtkheaderbar.c +@@ -30,6 +30,7 @@ + #include "gtkwindowprivate.h" + #include "gtkwidgetprivate.h" + #include "gtkcontainerprivate.h" ++#include "gtkdialog.h" + #include "a11y/gtkheaderbaraccessible.h" + + #include <string.h> +@@ -88,6 +89,7 @@ struct _GtkHeaderBarPrivate + GtkWidget *titlebar_icon; + + GtkCssGadget *gadget; ++ GSettings *settings; + }; + + typedef struct _Child Child; +@@ -280,6 +282,7 @@ _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar) + GMenuModel *menu; + gboolean shown_by_shell; + gboolean is_sovereign_window; ++ gboolean is_mobile_dialog; + + toplevel = gtk_widget_get_toplevel (widget); + if (!gtk_widget_is_toplevel (toplevel)) +@@ -310,7 +313,15 @@ _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar) + "gtk-decoration-layout", &layout_desc, + NULL); + +- if (priv->decoration_layout_set) ++ is_mobile_dialog = GTK_IS_DIALOG (toplevel) || ++ (GTK_IS_WINDOW (toplevel) && !!gtk_window_get_transient_for (GTK_WINDOW (toplevel))); ++ ++ if (is_mobile_dialog && _gtk_get_is_phone ()) ++ { ++ g_free (layout_desc); ++ layout_desc = g_strdup ("back:"); ++ } ++ else if (priv->decoration_layout_set) + { + g_free (layout_desc); + layout_desc = g_strdup (priv->decoration_layout); +@@ -457,6 +468,23 @@ _gtk_header_bar_update_window_buttons (GtkHeaderBar *bar) + if (GTK_IS_ACCESSIBLE (accessible)) + atk_object_set_name (accessible, _("Close")); + } ++ else if (strcmp (t[j], "back") == 0 && ++ gtk_window_get_deletable (window)) ++ { ++ button = gtk_button_new (); ++ gtk_widget_set_valign (button, GTK_ALIGN_CENTER); ++ image = gtk_image_new_from_icon_name ("go-previous-symbolic", GTK_ICON_SIZE_BUTTON); ++ g_object_set (image, "use-fallback", TRUE, NULL); ++ gtk_container_add (GTK_CONTAINER (button), image); ++ gtk_widget_set_can_focus (button, TRUE); ++ gtk_widget_show_all (button); ++ g_signal_connect_swapped (button, "clicked", ++ G_CALLBACK (gtk_window_close), window); ++ ++ accessible = gtk_widget_get_accessible (button); ++ if (GTK_IS_ACCESSIBLE (accessible)) ++ atk_object_set_name (accessible, _("Back")); ++ } + + if (button) + { +@@ -1514,6 +1542,8 @@ gtk_header_bar_destroy (GtkWidget *widget) + priv->titlebar_end_separator = NULL; + } + ++ g_clear_object (&priv->settings); ++ + GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->destroy (widget); + } + +@@ -2154,6 +2184,12 @@ gtk_header_bar_init (GtkHeaderBar *bar) + NULL, + NULL); + ++ priv->settings = _gtk_get_purism_settings (); ++ ++ if (priv->settings) ++ g_signal_connect_object (priv->settings, "changed::is-phone", ++ G_CALLBACK (_gtk_header_bar_update_window_buttons), bar, ++ G_CONNECT_SWAPPED); + } + + static void diff --git a/gtk3-mobile/infobar-Move-the-action-area-below-on-the-phone.patch b/gtk3-mobile/infobar-Move-the-action-area-below-on-the-phone.patch new file mode 100644 index 0000000..f71af0f --- /dev/null +++ b/gtk3-mobile/infobar-Move-the-action-area-below-on-the-phone.patch @@ -0,0 +1,162 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Sat, 13 Jul 2019 10:39:21 +0200 +Subject: infobar: Move the action area below on the phone + +This will help the infobars fit on phone screens. + +Because of how GtkInfoBar API works, this cannot really be made adaptive +and will have to use the is-phone setting. +--- + gtk/gtkinfobar.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + gtk/ui/gtkinfobar.ui | 14 +++++--------- + 2 files changed, 59 insertions(+), 9 deletions(-) + +diff --git a/gtk/gtkinfobar.c b/gtk/gtkinfobar.c +index 8eb89ff..c6777c9 100644 +--- a/gtk/gtkinfobar.c ++++ b/gtk/gtkinfobar.c +@@ -141,6 +141,7 @@ enum + + struct _GtkInfoBarPrivate + { ++ GtkWidget *grid; + GtkWidget *content_area; + GtkWidget *action_area; + GtkWidget *close_button; +@@ -152,6 +153,7 @@ struct _GtkInfoBarPrivate + gboolean default_response_sensitive; + + GtkGesture *gesture; ++ GSettings *settings; + }; + + typedef struct _ResponseData ResponseData; +@@ -412,6 +414,8 @@ gtk_info_bar_finalize (GObject *object) + + g_object_unref (info_bar->priv->gesture); + ++ g_clear_object (&info_bar->priv->settings); ++ + G_OBJECT_CLASS (gtk_info_bar_parent_class)->finalize (object); + } + +@@ -595,6 +599,7 @@ gtk_info_bar_class_init (GtkInfoBarClass *klass) + gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkinfobar.ui"); + gtk_widget_class_bind_template_child_internal_private (widget_class, GtkInfoBar, content_area); + gtk_widget_class_bind_template_child_internal_private (widget_class, GtkInfoBar, action_area); ++ gtk_widget_class_bind_template_child_private (widget_class, GtkInfoBar, grid); + gtk_widget_class_bind_template_child_private (widget_class, GtkInfoBar, close_button); + gtk_widget_class_bind_template_child_private (widget_class, GtkInfoBar, revealer); + +@@ -622,6 +627,46 @@ click_pressed_cb (GtkGestureMultiPress *gesture, + gtk_info_bar_response (info_bar, priv->default_response); + } + ++static void ++update_layout (GtkInfoBar *info_bar) ++{ ++ GtkInfoBarPrivate *priv = info_bar->priv; ++ ++ if (_gtk_get_is_phone ()) { ++ gtk_container_child_set (GTK_CONTAINER (priv->grid), priv->action_area, ++ "left-attach", 0, ++ "top-attach", 1, ++ "width", 2, ++ NULL); ++ gtk_container_child_set (GTK_CONTAINER (priv->grid), priv->close_button, ++ "left-attach", 1, ++ NULL); ++ ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->action_area), ++ GTK_ORIENTATION_VERTICAL); ++ gtk_button_box_set_layout (GTK_BUTTON_BOX (priv->action_area), ++ GTK_BUTTONBOX_EXPAND); ++ gtk_style_context_remove_class (gtk_widget_get_style_context (priv->action_area), ++ "linked"); ++ } else { ++ gtk_container_child_set (GTK_CONTAINER (priv->grid), priv->action_area, ++ "left-attach", 1, ++ "top-attach", 0, ++ "width", 1, ++ NULL); ++ gtk_container_child_set (GTK_CONTAINER (priv->grid), priv->close_button, ++ "left-attach", 2, ++ NULL); ++ ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->action_area), ++ GTK_ORIENTATION_HORIZONTAL); ++ gtk_button_box_set_layout (GTK_BUTTON_BOX (priv->action_area), ++ GTK_BUTTONBOX_END); ++ } ++ ++ gtk_box_set_spacing (GTK_BOX (priv->action_area), 6); ++} ++ + static void + gtk_info_bar_init (GtkInfoBar *info_bar) + { +@@ -645,6 +690,15 @@ gtk_info_bar_init (GtkInfoBar *info_bar) + priv->gesture = gtk_gesture_multi_press_new (widget); + gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->gesture), GDK_BUTTON_PRIMARY); + g_signal_connect (priv->gesture, "pressed", G_CALLBACK (click_pressed_cb), widget); ++ ++ update_layout (info_bar); ++ ++ priv->settings = _gtk_get_purism_settings (); ++ ++ if (priv->settings) ++ g_signal_connect_object (priv->settings, "changed::is-phone", ++ G_CALLBACK (update_layout), info_bar, ++ G_CONNECT_SWAPPED); + } + + static GtkBuildableIface *parent_buildable_iface; +diff --git a/gtk/ui/gtkinfobar.ui b/gtk/ui/gtkinfobar.ui +index 0b0eaf1..e7a8068 100644 +--- a/gtk/ui/gtkinfobar.ui ++++ b/gtk/ui/gtkinfobar.ui +@@ -9,6 +9,9 @@ + <child> + <object class="GtkBox" id="content"> + <property name="visible">1</property> ++ <child> ++ <object class="GtkGrid" id="grid"> ++ <property name="visible">1</property> + <child> + <object class="GtkBox" id="content_area"> + <property name="visible">1</property> +@@ -16,9 +19,6 @@ + <property name="spacing">16</property> + <property name="hexpand">1</property> + </object> +- <packing> +- <property name="expand">1</property> +- </packing> + </child> + <child> + <object class="GtkButtonBox" id="action_area"> +@@ -27,9 +27,6 @@ + <property name="spacing">6</property> + <property name="layout-style">end</property> + </object> +- <packing> +- <property name="position">1</property> +- </packing> + </child> + <child> + <object class="GtkButton" id="close_button"> +@@ -47,12 +44,11 @@ + </object> + </child> + </object> +- <packing> +- <property name="position">2</property> +- </packing> + </child> + </object> + </child> ++ </object> ++ </child> + </object> + </child> + </template> diff --git a/gtk3-mobile/librem5-Make-GtkShortcutsWindow-adaptive.patch b/gtk3-mobile/librem5-Make-GtkShortcutsWindow-adaptive.patch new file mode 100644 index 0000000..08d4bb8 --- /dev/null +++ b/gtk3-mobile/librem5-Make-GtkShortcutsWindow-adaptive.patch @@ -0,0 +1,219 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Thu, 18 Mar 2021 17:42:00 +0500 +Subject: librem5: Make GtkShortcutsWindow adaptive + +Fixes https://source.puri.sm/Librem5/debs/gtk/-/issues/30 +--- + gtk/gtkshortcutssection.c | 65 +++++++++++++++++++++++++++++++++++++++++------ + gtk/gtkshortcutswindow.c | 5 ++-- + 2 files changed, 60 insertions(+), 10 deletions(-) + +diff --git a/gtk/gtkshortcutssection.c b/gtk/gtkshortcutssection.c +index 9a61765..a3d4e85 100644 +--- a/gtk/gtkshortcutssection.c ++++ b/gtk/gtkshortcutssection.c +@@ -27,6 +27,7 @@ + #include "gtkstackswitcher.h" + #include "gtkstylecontext.h" + #include "gtkorientable.h" ++#include "gtkscrolledwindow.h" + #include "gtksizegroup.h" + #include "gtkwidget.h" + #include "gtkbindings.h" +@@ -62,7 +63,8 @@ struct _GtkShortcutsSection + gchar *view_name; + guint max_height; + +- GtkStack *stack; ++ GtkWidget *column; ++ GtkWidget *stack; + GtkStackSwitcher *switcher; + GtkWidget *show_all; + GtkWidget *footer; +@@ -117,10 +119,12 @@ static void gtk_shortcuts_section_maybe_reflow (GtkShortcutsSection *self); + static gboolean gtk_shortcuts_section_change_current_page (GtkShortcutsSection *self, + gint offset); + ++/* + static void gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan *gesture, + GtkPanDirection direction, + gdouble offset, + GtkShortcutsSection *self); ++*/ + + static void + gtk_shortcuts_section_add (GtkContainer *container, +@@ -424,11 +428,14 @@ gtk_shortcuts_section_class_init (GtkShortcutsSectionClass *klass) + static void + gtk_shortcuts_section_init (GtkShortcutsSection *self) + { ++ GtkSizeGroup *group; ++ + self->max_height = 15; + + gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_VERTICAL); + gtk_box_set_homogeneous (GTK_BOX (self), FALSE); + gtk_box_set_spacing (GTK_BOX (self), 22); ++/* + gtk_container_set_border_width (GTK_CONTAINER (self), 24); + + self->stack = g_object_new (GTK_TYPE_STACK, +@@ -447,8 +454,38 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self) + NULL); + + gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (self->switcher)), GTK_STYLE_CLASS_LINKED); ++*/ ++ ++ self->stack = g_object_new (GTK_TYPE_SCROLLED_WINDOW, ++ "propagate-natural-width", TRUE, ++ "vexpand", TRUE, ++ "visible", TRUE, ++ NULL); ++ GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->stack)); ++ ++ self->column = g_object_new (GTK_TYPE_BOX, ++ "orientation", GTK_ORIENTATION_VERTICAL, ++ "spacing", 24, ++ "margin", 24, ++ "halign", GTK_ALIGN_CENTER, ++ "visible", TRUE, ++ NULL); ++ gtk_container_add (GTK_CONTAINER (self->stack), self->column); ++ ++ group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ gtk_size_group_set_ignore_hidden (group, TRUE); ++G_GNUC_END_IGNORE_DEPRECATIONS ++ g_object_set_data_full (G_OBJECT (self->column), "accel-size-group", group, g_object_unref); ++ ++ group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); ++G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ gtk_size_group_set_ignore_hidden (group, TRUE); ++G_GNUC_END_IGNORE_DEPRECATIONS ++ g_object_set_data_full (G_OBJECT (self->column), "title-size-group", group, g_object_unref); + + self->show_all = gtk_button_new_with_mnemonic (_("_Show All")); ++ g_object_set (self->show_all, "margin", 24, "margin-top", 0, NULL); + gtk_widget_set_no_show_all (self->show_all, TRUE); + g_signal_connect_swapped (self->show_all, "clicked", + G_CALLBACK (gtk_shortcuts_section_show_all), self); +@@ -456,13 +493,8 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self) + self->footer = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20); + GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), self->footer); + +- gtk_box_set_center_widget (GTK_BOX (self->footer), GTK_WIDGET (self->switcher)); + gtk_box_pack_end (GTK_BOX (self->footer), self->show_all, TRUE, TRUE, 0); + gtk_widget_set_halign (self->show_all, GTK_ALIGN_END); +- +- self->pan_gesture = gtk_gesture_pan_new (GTK_WIDGET (self->stack), GTK_ORIENTATION_HORIZONTAL); +- g_signal_connect (self->pan_gesture, "pan", +- G_CALLBACK (gtk_shortcuts_section_pan_gesture_pan), self); + } + + static void +@@ -499,6 +531,7 @@ static void + gtk_shortcuts_section_add_group (GtkShortcutsSection *self, + GtkShortcutsGroup *group) + { ++/* + GList *children; + GtkWidget *page, *column; + +@@ -523,6 +556,14 @@ gtk_shortcuts_section_add_group (GtkShortcutsSection *self, + g_list_free (children); + + gtk_container_add (GTK_CONTAINER (column), GTK_WIDGET (group)); ++*/ ++ gtk_container_add (GTK_CONTAINER (self->column), GTK_WIDGET (group)); ++ ++ g_object_set (group, ++ "accel-size-group", g_object_get_data (G_OBJECT (self->column), "accel-size-group"), ++ "title-size-group", g_object_get_data (G_OBJECT (self->column), "title-size-group"), ++ NULL); ++ + self->groups = g_list_append (self->groups, group); + + gtk_shortcuts_section_maybe_reflow (self); +@@ -570,7 +611,7 @@ gtk_shortcuts_section_filter_groups (GtkShortcutsSection *self) + gtk_widget_set_visible (GTK_WIDGET (self->show_all), self->has_filtered_group); + gtk_widget_set_visible (gtk_widget_get_parent (GTK_WIDGET (self->show_all)), + gtk_widget_get_visible (GTK_WIDGET (self->show_all)) || +- gtk_widget_get_visible (GTK_WIDGET (self->switcher))); ++ TRUE); + } + + static void +@@ -606,6 +647,9 @@ gtk_shortcuts_section_reflow_groups (GtkShortcutsSection *self) + guint n_pages; + GtkWidget *current_page, *current_column; + ++ self->need_reflow = FALSE; ++ return; ++ + /* collect all groups from the current pages */ + groups = NULL; + pages = gtk_container_get_children (GTK_CONTAINER (self->stack)); +@@ -768,7 +812,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS + gchar *title; + + title = g_strdup_printf ("_%u", n_pages + 1); +- gtk_stack_add_titled (self->stack, page, title, title); ++ gtk_stack_add_titled (GTK_STACK (self->stack), page, title, title); + g_free (title); + } + +@@ -790,6 +834,7 @@ static gboolean + gtk_shortcuts_section_change_current_page (GtkShortcutsSection *self, + gint offset) + { ++/* + GtkWidget *child; + GList *children, *l; + +@@ -812,8 +857,11 @@ gtk_shortcuts_section_change_current_page (GtkShortcutsSection *self, + g_list_free (children); + + return TRUE; ++*/ ++ return FALSE; + } + ++/* + static void + gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan *gesture, + GtkPanDirection direction, +@@ -832,3 +880,4 @@ gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan *gesture, + + gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); + } ++*/ +diff --git a/gtk/gtkshortcutswindow.c b/gtk/gtkshortcutswindow.c +index 36f55f6..803b5d3 100644 +--- a/gtk/gtkshortcutswindow.c ++++ b/gtk/gtkshortcutswindow.c +@@ -871,7 +871,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self) + GtkWidget *empty; + PangoAttrList *attributes; + +- gtk_window_set_resizable (GTK_WINDOW (self), FALSE); ++ gtk_window_set_default_size (GTK_WINDOW (self), -1, 600); + gtk_window_set_type_hint (GTK_WINDOW (self), GDK_WINDOW_TYPE_HINT_DIALOG); + + g_signal_connect (self, "key-press-event", +@@ -952,6 +952,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self) + + priv->menu_label = g_object_new (GTK_TYPE_LABEL, + "visible", TRUE, ++ "ellipsize", PANGO_ELLIPSIZE_END, + NULL); + gtk_container_add (GTK_CONTAINER (menu_box), GTK_WIDGET (priv->menu_label)); + +@@ -986,7 +987,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self) + gtk_container_add (GTK_CONTAINER (priv->search_bar), GTK_WIDGET (priv->search_entry)); + g_object_set (priv->search_entry, + "placeholder-text", _("Search Shortcuts"), +- "width-chars", 40, ++ "width-chars", 30, + NULL); + g_signal_connect_object (priv->search_entry, + "search-changed", diff --git a/gtk3-mobile/messagedialog-Set-orientation-based-on-device.patch b/gtk3-mobile/messagedialog-Set-orientation-based-on-device.patch new file mode 100644 index 0000000..d6ec600 --- /dev/null +++ b/gtk3-mobile/messagedialog-Set-orientation-based-on-device.patch @@ -0,0 +1,234 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 24 Jun 2019 14:49:07 +0200 +Subject: messagedialog: Set orientation based on device + +This makes the dialog work better with horizontally constrained screens. +--- + gtk/gtkmessagedialog.c | 39 ++++++++++++++++++++++++ + gtk/theme/Adwaita/_common.scss | 22 +++++++++++-- + gtk/theme/Adwaita/gtk-contained-dark.css | 12 ++++++-- + gtk/theme/Adwaita/gtk-contained.css | 12 ++++++-- + gtk/theme/HighContrast/gtk-contained-inverse.css | 12 ++++++-- + gtk/theme/HighContrast/gtk-contained.css | 12 ++++++-- + 6 files changed, 95 insertions(+), 14 deletions(-) + +diff --git a/gtk/gtkmessagedialog.c b/gtk/gtkmessagedialog.c +index e70c820..e3a6659 100644 +--- a/gtk/gtkmessagedialog.c ++++ b/gtk/gtkmessagedialog.c +@@ -36,6 +36,7 @@ + #include "gtkimage.h" + #include "gtkintl.h" + #include "gtkprivate.h" ++#include "gtkorientable.h" + #include "gtktypebuiltins.h" + + /** +@@ -108,6 +109,8 @@ struct _GtkMessageDialogPrivate + guint has_primary_markup : 1; + guint has_secondary_text : 1; + guint message_type : 3; ++ ++ GSettings *settings; + }; + + static void gtk_message_dialog_style_updated (GtkWidget *widget); +@@ -144,6 +147,31 @@ G_DEFINE_TYPE_WITH_CODE (GtkMessageDialog, gtk_message_dialog, GTK_TYPE_DIALOG, + + static GtkBuildableIface *parent_buildable_iface; + ++static void ++update_orientation (GtkMessageDialog *dialog) ++{ ++ GtkWidget *action_area; ++ ++ G_GNUC_BEGIN_IGNORE_DEPRECATIONS ++ action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); ++G_GNUC_END_IGNORE_DEPRECATIONS ++ ++ if (_gtk_get_is_phone ()) ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (action_area), GTK_ORIENTATION_VERTICAL); ++ else ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (action_area), GTK_ORIENTATION_HORIZONTAL); ++} ++ ++static void ++gtk_message_dialog_destroy (GtkWidget *widget) ++{ ++ GtkMessageDialog *dialog = GTK_MESSAGE_DIALOG (widget); ++ ++ g_clear_object (&dialog->priv->settings); ++ ++ GTK_WIDGET_CLASS (gtk_message_dialog_parent_class)->destroy (widget); ++} ++ + static void + gtk_message_dialog_buildable_interface_init (GtkBuildableIface *iface) + { +@@ -162,6 +190,7 @@ gtk_message_dialog_class_init (GtkMessageDialogClass *class) + gobject_class = G_OBJECT_CLASS (class); + + widget_class->style_updated = gtk_message_dialog_style_updated; ++ widget_class->destroy = gtk_message_dialog_destroy; + + gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ALERT); + +@@ -327,6 +356,16 @@ gtk_message_dialog_init (GtkMessageDialog *dialog) + G_GNUC_BEGIN_IGNORE_DEPRECATIONS + action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); + G_GNUC_END_IGNORE_DEPRECATIONS ++ ++ priv->settings = _gtk_get_purism_settings (); ++ ++ if (priv->settings) ++ g_signal_connect_object (priv->settings, "changed::is-phone", ++ G_CALLBACK (update_orientation), dialog, ++ G_CONNECT_SWAPPED); ++ ++ update_orientation (dialog); ++ + gtk_button_box_set_layout (GTK_BUTTON_BOX (action_area), GTK_BUTTONBOX_EXPAND); + + settings = gtk_widget_get_settings (GTK_WIDGET (dialog)); +diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss +index e40e429..b6609f9 100644 +--- a/gtk/theme/Adwaita/_common.scss ++++ b/gtk/theme/Adwaita/_common.scss +@@ -3987,10 +3987,13 @@ messagedialog { // Message Dialog styling + + .dialog-action-area button { + padding: 10px 14px; // labels are not vertically centered on message dialog, this is a workaround +- border-right-style: none; +- border-bottom-style: none; + border-radius: 0; + -gtk-outline-radius: 0; ++ } ++ ++ .dialog-action-area.horizontal button { ++ border-right-style: none; ++ border-bottom-style: none; + + &:first-child { + border-left-style: none; +@@ -4003,6 +4006,21 @@ messagedialog { // Message Dialog styling + -gtk-outline-bottom-right-radius: $button_radius + 2; + } + } ++ ++ .dialog-action-area.vertical button { ++ border-right-style: none; ++ border-left-style: none; ++ border-radius: 0; ++ -gtk-outline-radius: 0; ++ ++ &:last-child { ++ border-bottom-style: none; ++ border-bottom-left-radius: $button_radius + 2; ++ border-bottom-right-radius: $button_radius + 2; ++ -gtk-outline-bottom-left-radius: $button_radius + 2; ++ -gtk-outline-bottom-right-radius: $button_radius + 2; ++ } ++ } + } + } + +diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css +index 3cd917d..76e816b 100644 +--- a/gtk/theme/Adwaita/gtk-contained-dark.css ++++ b/gtk/theme/Adwaita/gtk-contained-dark.css +@@ -1602,11 +1602,17 @@ messagedialog .titlebar { min-height: 20px; background-image: none; background-c + + messagedialog.csd.background { border-bottom-left-radius: 9px; border-bottom-right-radius: 9px; } + +-messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-right-style: none; border-bottom-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-radius: 0; -gtk-outline-radius: 0; } + +-messagedialog.csd .dialog-action-area button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button { border-right-style: none; border-bottom-style: none; } + +-messagedialog.csd .dialog-action-area button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.horizontal button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.vertical button { border-right-style: none; border-left-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++ ++messagedialog.csd .dialog-action-area.vertical button:last-child { border-bottom-style: none; border-bottom-left-radius: 7px; border-bottom-right-radius: 7px; -gtk-outline-bottom-left-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } + + filechooser .dialog-action-box { border-top: 1px solid #1b1b1b; } + +diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css +index 4eff74f..ffbd2ae 100644 +--- a/gtk/theme/Adwaita/gtk-contained.css ++++ b/gtk/theme/Adwaita/gtk-contained.css +@@ -1618,11 +1618,17 @@ messagedialog .titlebar { min-height: 20px; background-image: none; background-c + + messagedialog.csd.background { border-bottom-left-radius: 9px; border-bottom-right-radius: 9px; } + +-messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-right-style: none; border-bottom-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-radius: 0; -gtk-outline-radius: 0; } + +-messagedialog.csd .dialog-action-area button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button { border-right-style: none; border-bottom-style: none; } + +-messagedialog.csd .dialog-action-area button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.horizontal button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.vertical button { border-right-style: none; border-left-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++ ++messagedialog.csd .dialog-action-area.vertical button:last-child { border-bottom-style: none; border-bottom-left-radius: 7px; border-bottom-right-radius: 7px; -gtk-outline-bottom-left-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } + + filechooser .dialog-action-box { border-top: 1px solid #cdc7c2; } + +diff --git a/gtk/theme/HighContrast/gtk-contained-inverse.css b/gtk/theme/HighContrast/gtk-contained-inverse.css +index 5a2cf09..7e9f8ec 100644 +--- a/gtk/theme/HighContrast/gtk-contained-inverse.css ++++ b/gtk/theme/HighContrast/gtk-contained-inverse.css +@@ -1682,11 +1682,17 @@ messagedialog .titlebar { min-height: 20px; background-image: none; background-c + + messagedialog.csd.background { border-bottom-left-radius: 9px; border-bottom-right-radius: 9px; } + +-messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-right-style: none; border-bottom-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-radius: 0; -gtk-outline-radius: 0; } + +-messagedialog.csd .dialog-action-area button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button { border-right-style: none; border-bottom-style: none; } + +-messagedialog.csd .dialog-action-area button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.horizontal button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.vertical button { border-right-style: none; border-left-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++ ++messagedialog.csd .dialog-action-area.vertical button:last-child { border-bottom-style: none; border-bottom-left-radius: 7px; border-bottom-right-radius: 7px; -gtk-outline-bottom-left-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } + + filechooser .dialog-action-box { border-top: 1px solid #686868; } + +diff --git a/gtk/theme/HighContrast/gtk-contained.css b/gtk/theme/HighContrast/gtk-contained.css +index ba598cc..20fbd2c 100644 +--- a/gtk/theme/HighContrast/gtk-contained.css ++++ b/gtk/theme/HighContrast/gtk-contained.css +@@ -1698,11 +1698,17 @@ messagedialog .titlebar { min-height: 20px; background-image: none; background-c + + messagedialog.csd.background { border-bottom-left-radius: 9px; border-bottom-right-radius: 9px; } + +-messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-right-style: none; border-bottom-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++messagedialog.csd .dialog-action-area button { padding: 10px 14px; border-radius: 0; -gtk-outline-radius: 0; } + +-messagedialog.csd .dialog-action-area button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button { border-right-style: none; border-bottom-style: none; } + +-messagedialog.csd .dialog-action-area button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++messagedialog.csd .dialog-action-area.horizontal button:first-child { border-left-style: none; border-bottom-left-radius: 7px; -gtk-outline-bottom-left-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.horizontal button:last-child { border-bottom-right-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } ++ ++messagedialog.csd .dialog-action-area.vertical button { border-right-style: none; border-left-style: none; border-radius: 0; -gtk-outline-radius: 0; } ++ ++messagedialog.csd .dialog-action-area.vertical button:last-child { border-bottom-style: none; border-bottom-left-radius: 7px; border-bottom-right-radius: 7px; -gtk-outline-bottom-left-radius: 7px; -gtk-outline-bottom-right-radius: 7px; } + + filechooser .dialog-action-box { border-top: 1px solid #877b6e; } + diff --git a/gtk3-mobile/printunixdialog-Adapt-for-phones.patch b/gtk3-mobile/printunixdialog-Adapt-for-phones.patch new file mode 100644 index 0000000..4227125 --- /dev/null +++ b/gtk3-mobile/printunixdialog-Adapt-for-phones.patch @@ -0,0 +1,492 @@ +From: Alexander Mikhaylenko <alexm@gnome.org> +Date: Mon, 12 Oct 2020 18:07:07 +0500 +Subject: printunixdialog: Adapt for phones + +This makes the dialog work better with horizontally constrained screens. +--- + gtk/gtkprinteroptionwidget.c | 40 ++++++++++++++++ + gtk/gtkprintunixdialog.c | 76 +++++++++++++++++++++++++++-- + gtk/ui/gtkprintunixdialog.ui | 111 +++++++++++++++++++++++++++++-------------- + 3 files changed, 186 insertions(+), 41 deletions(-) + +diff --git a/gtk/gtkprinteroptionwidget.c b/gtk/gtkprinteroptionwidget.c +index e4bf137..2465581 100644 +--- a/gtk/gtkprinteroptionwidget.c ++++ b/gtk/gtkprinteroptionwidget.c +@@ -69,6 +69,8 @@ struct GtkPrinterOptionWidgetPrivate + + /* the last location for save to file, that the user selected */ + gchar *last_location; ++ ++ GSettings *settings; + }; + + enum { +@@ -96,6 +98,17 @@ static void gtk_printer_option_widget_get_property (GObject *object, + static gboolean gtk_printer_option_widget_mnemonic_activate (GtkWidget *widget, + gboolean group_cycling); + ++static void ++gtk_printer_option_widget_destroy (GtkWidget *widget) ++{ ++ GtkPrinterOptionWidget *powidget = GTK_PRINTER_OPTION_WIDGET (widget); ++ GtkPrinterOptionWidgetPrivate *priv = powidget->priv; ++ ++ g_clear_object (&priv->settings); ++ ++ GTK_WIDGET_CLASS (gtk_printer_option_widget_parent_class)->destroy (widget); ++} ++ + static void + gtk_printer_option_widget_class_init (GtkPrinterOptionWidgetClass *class) + { +@@ -109,6 +122,7 @@ gtk_printer_option_widget_class_init (GtkPrinterOptionWidgetClass *class) + object_class->set_property = gtk_printer_option_widget_set_property; + object_class->get_property = gtk_printer_option_widget_get_property; + ++ widget_class->destroy = gtk_printer_option_widget_destroy; + widget_class->mnemonic_activate = gtk_printer_option_widget_mnemonic_activate; + + signals[CHANGED] = +@@ -748,6 +762,22 @@ alternative_append (GtkWidget *box, + return gtk_radio_button_get_group (GTK_RADIO_BUTTON (button)); + } + ++static void ++update_is_phone (GtkPrinterOptionWidget *widget) ++{ ++ GtkPrinterOptionWidgetPrivate *priv = widget->priv; ++ gboolean is_phone; ++ ++ if (!priv->box) ++ return; ++ ++ is_phone = _gtk_get_is_phone (); ++ ++ gtk_box_set_spacing (GTK_BOX (priv->box), is_phone ? 6 : 12); ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->box), ++ is_phone ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL); ++} ++ + static void + construct_widgets (GtkPrinterOptionWidget *widget) + { +@@ -822,6 +852,16 @@ construct_widgets (GtkPrinterOptionWidget *widget) + case GTK_PRINTER_OPTION_TYPE_ALTERNATIVE: + group = NULL; + priv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); ++ ++ priv->settings = _gtk_get_purism_settings (); ++ ++ if (priv->settings) ++ g_signal_connect_object (priv->settings, "changed::is-phone", ++ G_CALLBACK (update_is_phone), widget, ++ G_CONNECT_SWAPPED); ++ ++ update_is_phone (widget); ++ + gtk_widget_set_valign (priv->box, GTK_ALIGN_BASELINE); + gtk_widget_show (priv->box); + gtk_box_pack_start (GTK_BOX (widget), priv->box, TRUE, TRUE, 0); +diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c +index 936bbef..f2eaec4 100644 +--- a/gtk/gtkprintunixdialog.c ++++ b/gtk/gtkprintunixdialog.c +@@ -263,6 +263,7 @@ struct GtkPrintUnixDialogPrivate + { + GtkWidget *notebook; + ++ GtkWidget *printer_swin; + GtkWidget *printer_treeview; + GtkTreeViewColumn *printer_icon_column; + GtkTreeViewColumn *printer_name_column; +@@ -368,6 +369,8 @@ struct GtkPrintUnixDialogPrivate + gchar *format_for_printer; + + gint current_page; ++ ++ GSettings *settings; + }; + + G_DEFINE_TYPE_WITH_CODE (GtkPrintUnixDialog, gtk_print_unix_dialog, GTK_TYPE_DIALOG, +@@ -480,6 +483,7 @@ gtk_print_unix_dialog_class_init (GtkPrintUnixDialogClass *class) + "/org/gtk/libgtk/ui/gtkprintunixdialog.ui"); + + /* GtkTreeView / GtkTreeModel */ ++ gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, printer_swin); + gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, printer_treeview); + gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, printer_list); + gtk_widget_class_bind_template_child_private (widget_class, GtkPrintUnixDialog, printer_list_filter); +@@ -712,6 +716,44 @@ G_GNUC_END_IGNORE_DEPRECATIONS + return FALSE; + } + ++static void ++update_is_phone (GtkPrintUnixDialog *dialog) ++{ ++ GtkPrintUnixDialogPrivate *priv = gtk_print_unix_dialog_get_instance_private (dialog); ++ gboolean is_phone = _gtk_get_is_phone (); ++ GtkPrintCapabilities caps; ++ GtkWidget *button; ++ GList *children, *l; ++ ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->extension_point), ++ is_phone ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL); ++ ++ caps = priv->manual_capabilities | priv->printer_capabilities; ++ button = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_APPLY); ++ gtk_widget_set_visible (button, (caps & GTK_PRINT_CAPABILITY_PREVIEW) != 0 && !is_phone); ++ ++ children = gtk_container_get_children (GTK_CONTAINER (priv->extension_point)); ++ l = g_list_last (children); ++ if (l && l != children) ++ gtk_widget_set_halign (GTK_WIDGET (l->data), ++ is_phone ? GTK_ALIGN_FILL : GTK_ALIGN_END); ++ ++ for (l = children; l && l->data; l = l->next) ++ { ++ GtkWidget *hbox = l->data; ++ GtkWidget *widget = g_object_get_data (G_OBJECT (l->data), "gtk-external-label"); ++ ++ if (!widget) ++ continue; ++ ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), ++ is_phone ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL); ++ gtk_widget_set_margin_start (widget, is_phone ? 12 : 0); ++ } ++ ++ g_list_free (children); ++} ++ + static void + gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog) + { +@@ -805,6 +847,15 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog) + + gtk_css_node_set_name (gtk_widget_get_css_node (priv->collate_image), I_("paper")); + gtk_css_node_set_name (gtk_widget_get_css_node (priv->page_layout_preview), I_("paper")); ++ ++ priv->settings = _gtk_get_purism_settings (); ++ ++ if (priv->settings) ++ g_signal_connect_object (priv->settings, "changed::is-phone", ++ G_CALLBACK (update_is_phone), dialog, ++ G_CONNECT_SWAPPED); ++ ++ update_is_phone (dialog); + } + + static void +@@ -838,6 +889,8 @@ gtk_print_unix_dialog_destroy (GtkWidget *widget) + /* Make sure we don't destroy custom widgets owned by the backends */ + clear_per_printer_ui (dialog); + ++ g_clear_object (&dialog->priv->settings); ++ + GTK_WIDGET_CLASS (gtk_print_unix_dialog_parent_class)->destroy (widget); + } + +@@ -1359,6 +1412,15 @@ add_option_to_extension_point (GtkPrinterOption *option, + gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); + gtk_widget_show (hbox); + ++ g_object_set_data (G_OBJECT (hbox), "gtk-external-label", widget); ++ ++ if (_gtk_get_is_phone ()) ++ { ++ gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox), ++ GTK_ORIENTATION_VERTICAL); ++ gtk_widget_set_margin_start (widget, 12); ++ } ++ + gtk_box_pack_start (GTK_BOX (extension_point), hbox, TRUE, TRUE, 0); + } + else +@@ -1600,7 +1662,7 @@ update_dialog_from_settings (GtkPrintUnixDialog *dialog) + */ + children = gtk_container_get_children (GTK_CONTAINER (priv->extension_point)); + l = g_list_last (children); +- if (l && l != children) ++ if (l && l != children && !_gtk_get_is_phone ()) + gtk_widget_set_halign (GTK_WIDGET (l->data), GTK_ALIGN_END); + g_list_free (children); + +@@ -1660,7 +1722,6 @@ update_dialog_from_capabilities (GtkPrintUnixDialog *dialog) + GtkPrintUnixDialogPrivate *priv = dialog->priv; + gboolean can_collate; + const gchar *copies; +- GtkWidget *button; + + copies = gtk_entry_get_text (GTK_ENTRY (priv->copies_spin)); + can_collate = (*copies != '\0' && atoi (copies) > 1); +@@ -1681,9 +1742,7 @@ update_dialog_from_capabilities (GtkPrintUnixDialog *dialog) + gtk_widget_set_sensitive (GTK_WIDGET (priv->pages_per_sheet), + caps & GTK_PRINT_CAPABILITY_NUMBER_UP); + +- button = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_APPLY); +- gtk_widget_set_visible (button, (caps & GTK_PRINT_CAPABILITY_PREVIEW) != 0); +- ++ update_is_phone (dialog); + update_collate_icon (NULL, dialog); + + gtk_tree_model_filter_refilter (priv->printer_list_filter); +@@ -3749,6 +3808,13 @@ gtk_print_unix_dialog_add_custom_tab (GtkPrintUnixDialog *dialog, + GtkWidget *child, + GtkWidget *tab_label) + { ++ GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL); ++ ++ gtk_container_add (GTK_CONTAINER (scrolled_window), child); ++ gtk_widget_show (child); ++ ++ child = scrolled_window; ++ + gtk_notebook_insert_page (GTK_NOTEBOOK (dialog->priv->notebook), + child, tab_label, 2); + gtk_widget_show (child); +diff --git a/gtk/ui/gtkprintunixdialog.ui b/gtk/ui/gtkprintunixdialog.ui +index e4e552a..e2ba70b 100644 +--- a/gtk/ui/gtkprintunixdialog.ui ++++ b/gtk/ui/gtkprintunixdialog.ui +@@ -50,6 +50,8 @@ + <template class="GtkPrintUnixDialog" parent="GtkDialog"> + <property name="can-focus">False</property> + <property name="type-hint">dialog</property> ++ <property name="default-width">660</property> ++ <property name="default-height">480</property> + <signal name="notify::page-setup" handler="redraw_page_layout_preview" swapped="no"/> + <signal name="response" handler="error_dialogs" swapped="no"/> + <child internal-child="vbox"> +@@ -69,6 +71,11 @@ + <property name="visible">1</property> + <property name="can-focus">1</property> + <property name="show-border">0</property> ++ <property name="scrollable">1</property> ++ <child> ++ <object class="GtkScrolledWindow"> ++ <property name="visible">1</property> ++ <property name="hscrollbar-policy">never</property> + <child> + <object class="GtkBox" id="general_main_box"> + <property name="visible">1</property> +@@ -85,6 +92,7 @@ + <property name="visible">1</property> + <property name="can-focus">1</property> + <property name="shadow-type">in</property> ++ <property name="vscrollbar-policy">never</property> + <child> + <object class="GtkTreeView" id="printer_treeview"> + <property name="visible">1</property> +@@ -165,9 +173,16 @@ + </packing> + </child> + <child> +- <object class="GtkBox" id="box3"> ++ <object class="GtkFlowBox"> + <property name="visible">1</property> +- <property name="spacing">18</property> ++ <property name="row-spacing">18</property> ++ <property name="column-spacing">18</property> ++ <property name="max-children-per-line">2</property> ++ <property name="selection-mode">none</property> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">1</property> ++ <property name="can-focus">0</property> + <child> + <object class="GtkBox" id="frame_template1"> + <property name="visible">1</property> +@@ -294,10 +309,13 @@ + </packing> + </child> + </object> +- <packing> +- <property name="expand">1</property> +- </packing> + </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">1</property> ++ <property name="can-focus">0</property> + <child> + <object class="GtkBox" id="frame_template2"> + <property name="visible">1</property> +@@ -407,10 +425,8 @@ + </packing> + </child> + </object> +- <packing> +- <property name="expand">1</property> +- <property name="position">1</property> +- </packing> ++ </child> ++ </object> + </child> + </object> + <packing> +@@ -419,6 +435,8 @@ + </packing> + </child> + </object> ++ </child> ++ </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label1"> +@@ -429,6 +447,10 @@ + <property name="tab-fill">0</property> + </packing> + </child> ++ <child> ++ <object class="GtkScrolledWindow"> ++ <property name="visible">1</property> ++ <property name="hscrollbar-policy">never</property> + <child> + <object class="GtkBox" id="page_setup_main_box"> + <property name="visible">1</property> +@@ -436,9 +458,16 @@ + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> +- <object class="GtkBox" id="box4"> ++ <object class="GtkFlowBox"> + <property name="visible">1</property> +- <property name="spacing">18</property> ++ <property name="row-spacing">18</property> ++ <property name="column-spacing">18</property> ++ <property name="max-children-per-line">2</property> ++ <property name="selection-mode">none</property> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">1</property> ++ <property name="can-focus">0</property> + <child> + <object class="GtkBox" id="frame_template3"> + <property name="visible">1</property> +@@ -632,10 +661,13 @@ + </packing> + </child> + </object> +- <packing> +- <property name="expand">1</property> +- </packing> ++ </child> ++ </object> + </child> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">1</property> ++ <property name="can-focus">0</property> + <child> + <object class="GtkBox" id="frame_template4"> + <property name="visible">1</property> +@@ -760,7 +792,9 @@ + <property name="model">page_setup_list</property> + <property name="valign">baseline</property> + <child> +- <object class="GtkCellRendererText" id="paper_size_renderer"/> ++ <object class="GtkCellRendererText" id="paper_size_renderer"> ++ <property name="ellipsize">end</property> ++ </object> + </child> + </object> + <packing> +@@ -812,16 +846,10 @@ + </packing> + </child> + </object> +- <packing> +- <property name="expand">1</property> +- <property name="padding">6</property> +- <property name="position">1</property> +- </packing> + </child> + </object> +- <packing> +- <property name="fill">0</property> +- </packing> ++ </child> ++ </object> + </child> + <child> + <object class="GtkBox" id="box6"> +@@ -847,6 +875,8 @@ + <packing> + <property name="position">1</property> + </packing> ++ </child> ++ </object> + </child> + <child type="tab"> + <object class="GtkLabel" id="label2"> +@@ -859,10 +889,17 @@ + </packing> + </child> + <child> +- <object class="GtkGrid" id="job_page"> ++ <object class="GtkFlowBox" id="job_page"> + <property name="border-width">12</property> + <property name="row-spacing">18</property> + <property name="column-spacing">18</property> ++ <property name="max-children-per-line">2</property> ++ <property name="selection-mode">none</property> ++ <property name="valign">start</property> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">True</property> ++ <property name="can-focus">False</property> + <child> + <object class="GtkBox" id="frame_template5"> + <property name="visible">1</property> +@@ -949,11 +986,13 @@ + </packing> + </child> + </object> +- <packing> +- <property name="left-attach">0</property> +- <property name="top-attach">0</property> +- </packing> + </child> ++ </object> ++ </child> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">True</property> ++ <property name="can-focus">False</property> + <child> + <object class="GtkBox" id="frame_template6"> + <property name="visible">1</property> +@@ -1074,11 +1113,13 @@ + </packing> + </child> + </object> +- <packing> +- <property name="left-attach">0</property> +- <property name="top-attach">1</property> +- </packing> ++ </child> ++ </object> + </child> ++ <child> ++ <object class="GtkFlowBoxChild"> ++ <property name="visible">True</property> ++ <property name="can-focus">False</property> + <child> + <object class="GtkBox" id="frame_template7"> + <property name="visible">1</property> +@@ -1165,10 +1206,8 @@ + </packing> + </child> + </object> +- <packing> +- <property name="left-attach">1</property> +- <property name="top-attach">0</property> +- </packing> ++ </child> ++ </object> + </child> + </object> + <packing> diff --git a/gtk3-mobile/scrolledwindow-Set-deceleration-value-based-on-the-device.patch b/gtk3-mobile/scrolledwindow-Set-deceleration-value-based-on-the-device.patch new file mode 100644 index 0000000..1eb818c --- /dev/null +++ b/gtk3-mobile/scrolledwindow-Set-deceleration-value-based-on-the-device.patch @@ -0,0 +1,122 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Sat, 6 Jul 2019 11:05:24 +0200 +Subject: scrolledwindow: Set deceleration value based on the device + +This makes it nicer on phones by avoiding having to scroll too much on a +touch screen and it makes it match the changes we applied to WebKitGTK +for the same reasons. +--- + gtk/gtkscrolledwindow.c | 25 +++++++++++++++---------- + 1 file changed, 15 insertions(+), 10 deletions(-) + +diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c +index a931d2b..e173e57 100644 +--- a/gtk/gtkscrolledwindow.c ++++ b/gtk/gtkscrolledwindow.c +@@ -177,6 +177,7 @@ + /* Kinetic scrolling */ + #define MAX_OVERSHOOT_DISTANCE 100 + #define DECELERATION_FRICTION 4 ++#define DECELERATION_FRICTION_TOUCH 1 + #define OVERSHOOT_FRICTION 20 + #define SCROLL_CAPTURE_THRESHOLD_MS 150 + #define VELOCITY_ACCUMULATION_FLOOR 0.33 +@@ -396,7 +397,8 @@ static gboolean _gtk_scrolled_window_get_overshoot (GtkScrolledWindow *scrolled_ + gint *overshoot_x, + gint *overshoot_y); + +-static void gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window); ++static void gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window, ++ gboolean is_dragging); + static gint _gtk_scrolled_window_get_scrollbar_spacing (GtkScrolledWindow *scrolled_window); + + static void gtk_scrolled_window_update_use_indicators (GtkScrolledWindow *scrolled_window); +@@ -1051,7 +1053,8 @@ scrolled_window_drag_end_cb (GtkScrolledWindow *scrolled_window, + static void + gtk_scrolled_window_decelerate (GtkScrolledWindow *scrolled_window, + gdouble x_velocity, +- gdouble y_velocity) ++ gdouble y_velocity, ++ gboolean is_dragging) + { + GtkScrolledWindowPrivate *priv = scrolled_window->priv; + gboolean overshoot; +@@ -1068,7 +1071,7 @@ gtk_scrolled_window_decelerate (GtkScrolledWindow *scrolled_window, + + if (priv->x_velocity != 0 || priv->y_velocity != 0 || overshoot) + { +- gtk_scrolled_window_start_deceleration (scrolled_window); ++ gtk_scrolled_window_start_deceleration (scrolled_window, is_dragging); + priv->x_velocity = priv->y_velocity = 0; + } + } +@@ -1078,7 +1081,7 @@ scrolled_window_swipe_cb (GtkScrolledWindow *scrolled_window, + gdouble x_velocity, + gdouble y_velocity) + { +- gtk_scrolled_window_decelerate (scrolled_window, -x_velocity, -y_velocity); ++ gtk_scrolled_window_decelerate (scrolled_window, -x_velocity, -y_velocity, TRUE); + } + + static void +@@ -3490,7 +3493,7 @@ start_scroll_deceleration_cb (gpointer user_data) + if (!priv->deceleration_id) + { + uninstall_scroll_cursor (scrolled_window); +- gtk_scrolled_window_start_deceleration (scrolled_window); ++ gtk_scrolled_window_start_deceleration (scrolled_window, FALSE); + } + + return FALSE; +@@ -3638,7 +3641,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, + + if (start_deceleration && + scroll_history_finish (scrolled_window, &vel_x, &vel_y)) +- gtk_scrolled_window_decelerate (scrolled_window, vel_x, vel_y); ++ gtk_scrolled_window_decelerate (scrolled_window, vel_x, vel_y, FALSE); + else if (_gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL)) + { + priv->scroll_events_overshoot_id = +@@ -3790,12 +3793,14 @@ gtk_scrolled_window_accumulate_velocity (GtkKineticScrolling **scrolling, double + } + + static void +-gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window) ++gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window, ++ gboolean is_deceleration) + { + GtkScrolledWindowPrivate *priv = scrolled_window->priv; + GdkFrameClock *frame_clock; + gint64 current_time; + double elapsed; ++ gdouble friction = is_deceleration ? DECELERATION_FRICTION_TOUCH : DECELERATION_FRICTION; + + g_return_if_fail (priv->deceleration_id == 0); + +@@ -3820,7 +3825,7 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window) + gtk_kinetic_scrolling_new (lower, + upper, + MAX_OVERSHOOT_DISTANCE, +- DECELERATION_FRICTION, ++ friction, + OVERSHOOT_FRICTION, + priv->unclamped_hadj_value, + priv->x_velocity); +@@ -3843,7 +3848,7 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window) + gtk_kinetic_scrolling_new (lower, + upper, + MAX_OVERSHOOT_DISTANCE, +- DECELERATION_FRICTION, ++ friction, + OVERSHOOT_FRICTION, + priv->unclamped_vadj_value, + priv->y_velocity); +@@ -4666,7 +4671,7 @@ gtk_scrolled_window_grab_notify (GtkWidget *widget, + priv->drag_device)) + { + if (_gtk_scrolled_window_get_overshoot (scrolled_window, NULL, NULL)) +- gtk_scrolled_window_start_deceleration (scrolled_window); ++ gtk_scrolled_window_start_deceleration (scrolled_window, FALSE); + else + gtk_scrolled_window_cancel_deceleration (scrolled_window); + } diff --git a/gtk3-mobile/theme-Add-libhandy-styles.patch b/gtk3-mobile/theme-Add-libhandy-styles.patch new file mode 100644 index 0000000..76018a1 --- /dev/null +++ b/gtk3-mobile/theme-Add-libhandy-styles.patch @@ -0,0 +1,543 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Mon, 31 Aug 2020 10:40:20 +0200 +Subject: theme: Add libhandy styles + +This is imported from libhandy 1.0.0. +--- + gtk/theme/Adwaita/_colors.scss | 6 + + gtk/theme/Adwaita/_common.scss | 187 +++++++++++++++++++++++ + gtk/theme/Adwaita/gtk-contained-dark.css | 67 ++++++++ + gtk/theme/Adwaita/gtk-contained.css | 67 ++++++++ + gtk/theme/HighContrast/_colors-hc.scss | 5 + + gtk/theme/HighContrast/gtk-contained-inverse.css | 67 ++++++++ + gtk/theme/HighContrast/gtk-contained.css | 67 ++++++++ + 7 files changed, 466 insertions(+) + +diff --git a/gtk/theme/Adwaita/_colors.scss b/gtk/theme/Adwaita/_colors.scss +index 32dd762..79ef3ca 100644 +--- a/gtk/theme/Adwaita/_colors.scss ++++ b/gtk/theme/Adwaita/_colors.scss +@@ -75,3 +75,9 @@ $progress_border_color: $selected_borders_color; + $checkradio_bg_color: if($variant == 'light', $selected_bg_color, lighten($selected_bg_color,10%)); + $checkradio_fg_color: $selected_fg_color; + $checkradio_borders_color: if($variant == 'light', darken($checkradio_bg_color,20%), darken($checkradio_bg_color,40%)); ++ ++// HdyFlap ++ ++$flap_dimming: rgba(0, 0, 0, if($variant == 'light', 0.12, 0.24)); ++$flap_border: rgba(0, 0, 0, if($variant == 'light', 0.05, 0.2)); ++$flap_outline: rgba(255, 255, 255, if($variant == 'light', 0.2, 0.05)); +diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss +index dc02b49..19b6f38 100644 +--- a/gtk/theme/Adwaita/_common.scss ++++ b/gtk/theme/Adwaita/_common.scss +@@ -4855,3 +4855,190 @@ popover.emoji-completion contents row box { + popover.emoji-completion .emoji:hover { + background: $popover_hover_color; + } ++ ++/************ ++ * libhandy * ++ ************/ ++ ++// HdyViewSwitcher ++ ++viewswitcher { ++ &, & button { ++ margin: 0; ++ padding: 0; ++ } ++ ++ button { ++ border-radius: 0; ++ border-top: 0; ++ border-bottom: 0; ++ box-shadow: none; ++ font-size: 1rem; ++ ++ &:not(:checked):not(:hover) { ++ background: transparent; ++ } ++ ++ &:not(:only-child):not(:last-child) { ++ border-right-width: 0px; ++ } ++ ++ &:not(only-child):first-child:not(:checked):not(:hover), ++ &:not(:checked):not(:hover) + button:not(:checked):not(:hover) { ++ border-left-color: transparent; ++ } ++ ++ &:not(only-child):last-child:not(:checked):not(:hover) { ++ border-right-color: transparent; ++ } ++ ++ &:not(:checked):hover:not(:backdrop) { ++ background-image: image(lighter($bg_color)); ++ } ++ ++ &:not(only-child):first-child:not(:checked):hover, ++ &:not(:checked):hover + button:not(:checked):not(:hover), ++ &:not(:checked):not(:hover) + button:not(:checked):hover { ++ border-left-color: shade($borders_color, 1.15); ++ } ++ ++ &:not(only-child):last-child:not(:checked):hover { ++ border-right-color: shade($borders_color, 1.15); ++ } ++ ++ &:not(:checked):hover:backdrop { ++ background-image: image($bg_color); ++ } ++ ++ // View switcher in a header bar ++ headerbar &:not(:checked) { ++ &:hover:not(:backdrop) { ++ // Reimplementation of $button_fill from Adwaita. The colors are made ++ // only 70% visible to avoid the highlight to be too strong. ++ $c: gtkalpha($bg_color, 0.7); ++ $button_fill: if($variant == 'light', linear-gradient(to top, shade($c, 0.96) 2px, $c), ++ linear-gradient(to top, shade($c, 0.99) 2px, $c)) !global; ++ background-image: $button_fill; ++ } ++ ++ &:not(only-child):first-child:hover, ++ &:hover + button:not(:checked):not(:hover), ++ &:not(:hover) + button:not(:checked):hover { ++ border-left-color: $borders_color; ++ } ++ ++ &:not(only-child):last-child:hover { ++ border-right-color: $borders_color; ++ } ++ ++ &:hover:backdrop { ++ background-image: image($bg_color); ++ } ++ } ++ ++ // View switcher button ++ > stack > box { ++ &.narrow { ++ font-size: 0.75rem; ++ padding-top: 7px; ++ padding-bottom: 5px; ++ ++ image, ++ label { ++ padding-left: 8px; ++ padding-right: 8px; ++ } ++ } ++ ++ &.wide { ++ padding: 8px 12px; ++ ++ label { ++ &:dir(ltr) { ++ padding-right: 7px; ++ } ++ ++ &:dir(rtl) { ++ padding-left: 7px; ++ } ++ } ++ } ++ ++ label.active { ++ font-weight: bold; ++ } ++ } ++ ++ &.needs-attention { ++ &:active > stack > box label, ++ &:checked > stack > box label { ++ animation: none; ++ background-image: none; ++ } ++ ++ > stack > box label { ++ animation: needs_attention 150ms ease-in; ++ background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#3584e4), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); ++ background-size: 6px 6px, 6px 6px; ++ background-repeat: no-repeat; ++ background-position: right 0px, right 1px; ++ ++ &:backdrop { ++ background-size: 6px 6px, 0 0; ++ } ++ ++ &:dir(rtl) { ++ background-position: left 0px, left 1px; ++ } ++ } ++ } ++ } ++} ++ ++// HdyViewSwitcherBar ++ ++viewswitcherbar actionbar > revealer > box { ++ padding: 0; ++} ++ ++// HdyFlap ++ ++@mixin background-shadow($direction) { ++ background-image: ++ linear-gradient($direction, ++ rgba(0, 0, 0, if($variant == 'light', 0.05, 0.1)), ++ rgba(0, 0, 0, if($variant == 'light', 0.01, 0.02)) 40px, ++ rgba(0, 0, 0, 0) 56px), ++ linear-gradient($direction, ++ rgba(0, 0, 0, if($variant == 'light', 0.03, 0.06)), ++ rgba(0, 0, 0, if($variant == 'light', 0.01, 0.02)) 7px, ++ rgba(0, 0, 0, 0) 24px); ++} ++ ++flap { ++ > dimming { ++ background: $flap_dimming; ++ } ++ ++ > border { ++ min-width: 1px; ++ min-height: 1px; ++ background: $flap_border; ++ } ++ ++ > shadow { ++ min-width: 56px; ++ min-height: 56px; ++ ++ &.left { @include background-shadow(to right); } ++ &.right { @include background-shadow(to left); } ++ &.up { @include background-shadow(to bottom); } ++ &.down { @include background-shadow(to top); } ++ } ++ ++ > outline { ++ min-width: 1px; ++ min-height: 1px; ++ background: $flap_outline; ++ } ++} +diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css +index 32b7fb9..9797b3a 100644 +--- a/gtk/theme/Adwaita/gtk-contained-dark.css ++++ b/gtk/theme/Adwaita/gtk-contained-dark.css +@@ -1955,6 +1955,73 @@ popover.emoji-completion contents row box { padding: 2px 10px; } + + popover.emoji-completion .emoji:hover { background: #424242; } + ++/************ libhandy * */ ++viewswitcher, viewswitcher button { margin: 0; padding: 0; } ++ ++viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } ++ ++viewswitcher button:not(:checked):not(:hover) { background: transparent; } ++ ++viewswitcher button:not(:only-child):not(:last-child) { border-right-width: 0px; } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):not(:hover) { border-left-color: transparent; } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):not(:hover) { border-right-color: transparent; } ++ ++viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: image(lighter(#353535)); } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):hover, viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: shade(#1b1b1b, 1.15); } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):hover { border-right-color: shade(#1b1b1b, 1.15); } ++ ++viewswitcher button:not(:checked):hover:backdrop { background-image: image(#353535); } ++ ++headerbar viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: linear-gradient(to top, shade(alpha(#353535,0.7), 0.99) 2px, alpha(#353535,0.7)); } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):first-child:hover, headerbar viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), headerbar viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: #1b1b1b; } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):last-child:hover { border-right-color: #1b1b1b; } ++ ++headerbar viewswitcher button:not(:checked):hover:backdrop { background-image: image(#353535); } ++ ++viewswitcher button > stack > box.narrow { font-size: 0.75rem; padding-top: 7px; padding-bottom: 5px; } ++ ++viewswitcher button > stack > box.narrow image, viewswitcher button > stack > box.narrow label { padding-left: 8px; padding-right: 8px; } ++ ++viewswitcher button > stack > box.wide { padding: 8px 12px; } ++ ++viewswitcher button > stack > box.wide label:dir(ltr) { padding-right: 7px; } ++ ++viewswitcher button > stack > box.wide label:dir(rtl) { padding-left: 7px; } ++ ++viewswitcher button > stack > box label.active { font-weight: bold; } ++ ++viewswitcher button.needs-attention:active > stack > box label, viewswitcher button.needs-attention:checked > stack > box label { animation: none; background-image: none; } ++ ++viewswitcher button.needs-attention > stack > box label { animation: needs_attention 150ms ease-in; background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#3584e4), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; background-position: right 0px, right 1px; } ++ ++viewswitcher button.needs-attention > stack > box label:backdrop { background-size: 6px 6px, 0 0; } ++ ++viewswitcher button.needs-attention > stack > box label:dir(rtl) { background-position: left 0px, left 1px; } ++ ++viewswitcherbar actionbar > revealer > box { padding: 0; } ++ ++flap > dimming { background: rgba(0, 0, 0, 0.24); } ++ ++flap > border { min-width: 1px; min-height: 1px; background: rgba(0, 0, 0, 0.2); } ++ ++flap > shadow { min-width: 56px; min-height: 56px; } ++ ++flap > shadow.left { background-image: linear-gradient(to right, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to right, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.right { background-image: linear-gradient(to left, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to left, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.up { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to bottom, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.down { background-image: linear-gradient(to top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to top, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > outline { min-width: 1px; min-height: 1px; background: rgba(255, 255, 255, 0.05); } ++ + /* GTK NAMED COLORS ---------------- use responsibly! */ + /* + widget text/foreground color */ +diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css +index 729b1fc..72946ec 100644 +--- a/gtk/theme/Adwaita/gtk-contained.css ++++ b/gtk/theme/Adwaita/gtk-contained.css +@@ -1971,6 +1971,73 @@ popover.emoji-completion contents row box { padding: 2px 10px; } + + popover.emoji-completion .emoji:hover { background: white; } + ++/************ libhandy * */ ++viewswitcher, viewswitcher button { margin: 0; padding: 0; } ++ ++viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } ++ ++viewswitcher button:not(:checked):not(:hover) { background: transparent; } ++ ++viewswitcher button:not(:only-child):not(:last-child) { border-right-width: 0px; } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):not(:hover) { border-left-color: transparent; } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):not(:hover) { border-right-color: transparent; } ++ ++viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: image(lighter(#f6f5f4)); } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):hover, viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: shade(#cdc7c2, 1.15); } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):hover { border-right-color: shade(#cdc7c2, 1.15); } ++ ++viewswitcher button:not(:checked):hover:backdrop { background-image: image(#f6f5f4); } ++ ++headerbar viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: linear-gradient(to top, shade(alpha(#f6f5f4,0.7), 0.96) 2px, alpha(#f6f5f4,0.7)); } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):first-child:hover, headerbar viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), headerbar viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: #cdc7c2; } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):last-child:hover { border-right-color: #cdc7c2; } ++ ++headerbar viewswitcher button:not(:checked):hover:backdrop { background-image: image(#f6f5f4); } ++ ++viewswitcher button > stack > box.narrow { font-size: 0.75rem; padding-top: 7px; padding-bottom: 5px; } ++ ++viewswitcher button > stack > box.narrow image, viewswitcher button > stack > box.narrow label { padding-left: 8px; padding-right: 8px; } ++ ++viewswitcher button > stack > box.wide { padding: 8px 12px; } ++ ++viewswitcher button > stack > box.wide label:dir(ltr) { padding-right: 7px; } ++ ++viewswitcher button > stack > box.wide label:dir(rtl) { padding-left: 7px; } ++ ++viewswitcher button > stack > box label.active { font-weight: bold; } ++ ++viewswitcher button.needs-attention:active > stack > box label, viewswitcher button.needs-attention:checked > stack > box label { animation: none; background-image: none; } ++ ++viewswitcher button.needs-attention > stack > box label { animation: needs_attention 150ms ease-in; background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#3584e4), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; background-position: right 0px, right 1px; } ++ ++viewswitcher button.needs-attention > stack > box label:backdrop { background-size: 6px 6px, 0 0; } ++ ++viewswitcher button.needs-attention > stack > box label:dir(rtl) { background-position: left 0px, left 1px; } ++ ++viewswitcherbar actionbar > revealer > box { padding: 0; } ++ ++flap > dimming { background: rgba(0, 0, 0, 0.12); } ++ ++flap > border { min-width: 1px; min-height: 1px; background: rgba(0, 0, 0, 0.05); } ++ ++flap > shadow { min-width: 56px; min-height: 56px; } ++ ++flap > shadow.left { background-image: linear-gradient(to right, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to right, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.right { background-image: linear-gradient(to left, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to left, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.up { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to bottom, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.down { background-image: linear-gradient(to top, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to top, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > outline { min-width: 1px; min-height: 1px; background: rgba(255, 255, 255, 0.2); } ++ + /* GTK NAMED COLORS ---------------- use responsibly! */ + /* + widget text/foreground color */ +diff --git a/gtk/theme/HighContrast/_colors-hc.scss b/gtk/theme/HighContrast/_colors-hc.scss +index f9c038b..1ce6f24 100644 +--- a/gtk/theme/HighContrast/_colors-hc.scss ++++ b/gtk/theme/HighContrast/_colors-hc.scss +@@ -14,3 +14,8 @@ $alt_borders_color: if($variant == 'light', darken($alt_borders_color, 33%), lig + $insensitive_fg_color: mix($fg_color, $bg_color, 50%); + $insensitive_bg_color: mix($bg_color, $base_color, 60%); + $insensitive_borders_color: mix($borders_color, $bg_color, 80%); ++ ++// HdyFlap ++ ++$flap_border: $borders_color; ++$flap_outline: transparent; +diff --git a/gtk/theme/HighContrast/gtk-contained-inverse.css b/gtk/theme/HighContrast/gtk-contained-inverse.css +index e35c276..eb633dc 100644 +--- a/gtk/theme/HighContrast/gtk-contained-inverse.css ++++ b/gtk/theme/HighContrast/gtk-contained-inverse.css +@@ -2034,3 +2034,70 @@ popover.emoji-completion arrow { border: none; background: none; } + popover.emoji-completion contents row box { padding: 2px 10px; } + + popover.emoji-completion .emoji:hover { background: #424242; } ++ ++/************ libhandy * */ ++viewswitcher, viewswitcher button { margin: 0; padding: 0; } ++ ++viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } ++ ++viewswitcher button:not(:checked):not(:hover) { background: transparent; } ++ ++viewswitcher button:not(:only-child):not(:last-child) { border-right-width: 0px; } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):not(:hover) { border-left-color: transparent; } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):not(:hover) { border-right-color: transparent; } ++ ++viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: image(lighter(#303030)); } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):hover, viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: shade(#686868, 1.15); } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):hover { border-right-color: shade(#686868, 1.15); } ++ ++viewswitcher button:not(:checked):hover:backdrop { background-image: image(#303030); } ++ ++headerbar viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: linear-gradient(to top, shade(alpha(#303030,0.7), 0.99) 2px, alpha(#303030,0.7)); } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):first-child:hover, headerbar viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), headerbar viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: #686868; } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):last-child:hover { border-right-color: #686868; } ++ ++headerbar viewswitcher button:not(:checked):hover:backdrop { background-image: image(#303030); } ++ ++viewswitcher button > stack > box.narrow { font-size: 0.75rem; padding-top: 7px; padding-bottom: 5px; } ++ ++viewswitcher button > stack > box.narrow image, viewswitcher button > stack > box.narrow label { padding-left: 8px; padding-right: 8px; } ++ ++viewswitcher button > stack > box.wide { padding: 8px 12px; } ++ ++viewswitcher button > stack > box.wide label:dir(ltr) { padding-right: 7px; } ++ ++viewswitcher button > stack > box.wide label:dir(rtl) { padding-left: 7px; } ++ ++viewswitcher button > stack > box label.active { font-weight: bold; } ++ ++viewswitcher button.needs-attention:active > stack > box label, viewswitcher button.needs-attention:checked > stack > box label { animation: none; background-image: none; } ++ ++viewswitcher button.needs-attention > stack > box label { animation: needs_attention 150ms ease-in; background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#3584e4), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; background-position: right 0px, right 1px; } ++ ++viewswitcher button.needs-attention > stack > box label:backdrop { background-size: 6px 6px, 0 0; } ++ ++viewswitcher button.needs-attention > stack > box label:dir(rtl) { background-position: left 0px, left 1px; } ++ ++viewswitcherbar actionbar > revealer > box { padding: 0; } ++ ++flap > dimming { background: rgba(0, 0, 0, 0.24); } ++ ++flap > border { min-width: 1px; min-height: 1px; background: #686868; } ++ ++flap > shadow { min-width: 56px; min-height: 56px; } ++ ++flap > shadow.left { background-image: linear-gradient(to right, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to right, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.right { background-image: linear-gradient(to left, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to left, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.up { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to bottom, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.down { background-image: linear-gradient(to top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.02) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to top, rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.02) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > outline { min-width: 1px; min-height: 1px; background: transparent; } +diff --git a/gtk/theme/HighContrast/gtk-contained.css b/gtk/theme/HighContrast/gtk-contained.css +index e0c37f5..95d09e5 100644 +--- a/gtk/theme/HighContrast/gtk-contained.css ++++ b/gtk/theme/HighContrast/gtk-contained.css +@@ -2050,3 +2050,70 @@ popover.emoji-completion arrow { border: none; background: none; } + popover.emoji-completion contents row box { padding: 2px 10px; } + + popover.emoji-completion .emoji:hover { background: white; } ++ ++/************ libhandy * */ ++viewswitcher, viewswitcher button { margin: 0; padding: 0; } ++ ++viewswitcher button { border-radius: 0; border-top: 0; border-bottom: 0; box-shadow: none; font-size: 1rem; } ++ ++viewswitcher button:not(:checked):not(:hover) { background: transparent; } ++ ++viewswitcher button:not(:only-child):not(:last-child) { border-right-width: 0px; } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):not(:hover) { border-left-color: transparent; } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):not(:hover) { border-right-color: transparent; } ++ ++viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: image(lighter(#fdfdfc)); } ++ ++viewswitcher button:not(only-child):first-child:not(:checked):hover, viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: shade(#877b6e, 1.15); } ++ ++viewswitcher button:not(only-child):last-child:not(:checked):hover { border-right-color: shade(#877b6e, 1.15); } ++ ++viewswitcher button:not(:checked):hover:backdrop { background-image: image(#fdfdfc); } ++ ++headerbar viewswitcher button:not(:checked):hover:not(:backdrop) { background-image: linear-gradient(to top, shade(alpha(#fdfdfc,0.7), 0.96) 2px, alpha(#fdfdfc,0.7)); } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):first-child:hover, headerbar viewswitcher button:not(:checked):hover + button:not(:checked):not(:hover), headerbar viewswitcher button:not(:checked):not(:hover) + button:not(:checked):hover { border-left-color: #877b6e; } ++ ++headerbar viewswitcher button:not(:checked):not(only-child):last-child:hover { border-right-color: #877b6e; } ++ ++headerbar viewswitcher button:not(:checked):hover:backdrop { background-image: image(#fdfdfc); } ++ ++viewswitcher button > stack > box.narrow { font-size: 0.75rem; padding-top: 7px; padding-bottom: 5px; } ++ ++viewswitcher button > stack > box.narrow image, viewswitcher button > stack > box.narrow label { padding-left: 8px; padding-right: 8px; } ++ ++viewswitcher button > stack > box.wide { padding: 8px 12px; } ++ ++viewswitcher button > stack > box.wide label:dir(ltr) { padding-right: 7px; } ++ ++viewswitcher button > stack > box.wide label:dir(rtl) { padding-left: 7px; } ++ ++viewswitcher button > stack > box label.active { font-weight: bold; } ++ ++viewswitcher button.needs-attention:active > stack > box label, viewswitcher button.needs-attention:checked > stack > box label { animation: none; background-image: none; } ++ ++viewswitcher button.needs-attention > stack > box label { animation: needs_attention 150ms ease-in; background-image: -gtk-gradient(radial, center center, 0, center center, 0.5, to(#3584e4), to(transparent)), -gtk-gradient(radial, center center, 0, center center, 0.5, to(rgba(255, 255, 255, 0.769231)), to(transparent)); background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; background-position: right 0px, right 1px; } ++ ++viewswitcher button.needs-attention > stack > box label:backdrop { background-size: 6px 6px, 0 0; } ++ ++viewswitcher button.needs-attention > stack > box label:dir(rtl) { background-position: left 0px, left 1px; } ++ ++viewswitcherbar actionbar > revealer > box { padding: 0; } ++ ++flap > dimming { background: rgba(0, 0, 0, 0.12); } ++ ++flap > border { min-width: 1px; min-height: 1px; background: #877b6e; } ++ ++flap > shadow { min-width: 56px; min-height: 56px; } ++ ++flap > shadow.left { background-image: linear-gradient(to right, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to right, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.right { background-image: linear-gradient(to left, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to left, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.up { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to bottom, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > shadow.down { background-image: linear-gradient(to top, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.01) 40px, rgba(0, 0, 0, 0) 56px), linear-gradient(to top, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.01) 7px, rgba(0, 0, 0, 0) 24px); } ++ ++flap > outline { min-width: 1px; min-height: 1px; background: transparent; } diff --git a/gtk3-mobile/window-Disable-window-dragging-on-phones.patch b/gtk3-mobile/window-Disable-window-dragging-on-phones.patch new file mode 100644 index 0000000..9559f42 --- /dev/null +++ b/gtk3-mobile/window-Disable-window-dragging-on-phones.patch @@ -0,0 +1,32 @@ +From: Alexander Mikhaylenko <alexander.mikhaylenko@puri.sm> +Date: Wed, 4 Nov 2020 19:22:32 +0500 +Subject: window: Disable window dragging on phones + +See https://gitlab.gnome.org/GNOME/gtk/-/issues/3321 + +The issue does not seem to be fixable in GTK3 without breaking the API in +process, so do the minimum we can. + +Fixes https://source.puri.sm/Librem5/debs/gtk/-/issues/19 +Fixes https://source.puri.sm/Librem5/debs/gtk/-/issues/21 +--- + gtk/gtkwindow.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c +index d7f8e26..6025385 100644 +--- a/gtk/gtkwindow.c ++++ b/gtk/gtkwindow.c +@@ -1589,6 +1589,12 @@ drag_gesture_begin_cb (GtkGestureDrag *gesture, + + region = get_active_region_type (window, (GdkEventAny*) event, x, y); + ++ if (_gtk_get_is_phone ()) ++ { ++ gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED); ++ return; ++ } ++ + switch (region) + { + case GTK_WINDOW_REGION_TITLE: diff --git a/gtk3-mobile/window-Maximize-resizable-pseudo-dialogs-on-mobile.patch b/gtk3-mobile/window-Maximize-resizable-pseudo-dialogs-on-mobile.patch new file mode 100644 index 0000000..39f451d --- /dev/null +++ b/gtk3-mobile/window-Maximize-resizable-pseudo-dialogs-on-mobile.patch @@ -0,0 +1,41 @@ +From: Adrien Plazas <kekun.plazas@laposte.net> +Date: Thu, 11 Jul 2019 14:18:39 +0200 +Subject: window: Maximize resizable pseudo-dialogs on mobile + +This will make them look better on phone screens. +--- + gtk/gtkwindow.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c +index 39b01ee..d7f8e26 100644 +--- a/gtk/gtkwindow.c ++++ b/gtk/gtkwindow.c +@@ -39,6 +39,7 @@ + #include "gtkcssiconthemevalueprivate.h" + #include "gtkcssrgbavalueprivate.h" + #include "gtkcssshadowsvalueprivate.h" ++#include "gtkdialog.h" + #include "gtkkeyhash.h" + #include "gtkmain.h" + #include "gtkmnemonichash.h" +@@ -6317,6 +6318,7 @@ gtk_window_map (GtkWidget *widget) + GdkWindow *gdk_window; + GList *link; + GdkDisplay *display; ++ gboolean is_dialog; + + if (!_gtk_widget_is_toplevel (widget)) + { +@@ -6341,7 +6343,10 @@ gtk_window_map (GtkWidget *widget) + + gdk_window = _gtk_widget_get_window (widget); + +- if (priv->maximize_initially) ++ /* Transient windows can be considered pseudo-dialogs. */ ++ is_dialog = GTK_IS_DIALOG (widget) || !!gtk_window_get_transient_for (window); ++ if (priv->maximize_initially || ++ (is_dialog && gtk_window_get_resizable (window) && _gtk_get_is_phone ())) + gdk_window_maximize (gdk_window); + else + gdk_window_unmaximize (gdk_window); diff --git a/livi/PKGBUILD b/livi/PKGBUILD new file mode 100644 index 0000000..a4468d1 --- /dev/null +++ b/livi/PKGBUILD @@ -0,0 +1,48 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=livi +pkgver=0.1.0 +pkgrel=1 +pkgdesc="GTK4 video player using GStreamer as backend" +arch=('x86_64' 'armv7h' 'aarch64') +url="https://gitlab.gnome.org/guidog/livi" +license=('GPL-3.0-or-later') +depends=( + 'gstreamer' + 'gst-plugins-bad' + 'gst-plugins-base' + 'gtk4' + 'libadwaita' +) +makedepends=( + 'git' + 'meson' + 'python-packaging' +) +checkdepends=('xorg-server-xvfb') +_commit="2995b99d079b9310d794eaeee8c2e849ed69f31f" # tags/v0.1.0 +source=("livi::git+https://gitlab.gnome.org/guidog/livi.git#commit=${_commit}") + +pkgver() { + cd $pkgname + git describe --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' +} + +prepare() { + cd livi + git submodule update --init +} + +build() { + arch-meson livi output + meson compile -C output +} + +check() { + xvfb-run meson test -C output +} + +package() { + meson install -C output --destdir "$pkgdir" +} + +md5sums=('SKIP') diff --git a/phoc/PKGBUILD b/phoc/PKGBUILD new file mode 100644 index 0000000..775c302 --- /dev/null +++ b/phoc/PKGBUILD @@ -0,0 +1,69 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=phoc +pkgver=0.40.1 +pkgrel=1 +pkgdesc="wlroots based Wayland compositor for mobile phones" +arch=('x86_64' 'armv7h' 'aarch64') +url="https://phosh.mobi" +license=('LGPL-2.1-or-later AND GPL-3.0-or-later AND MIT AND (GPL-3.0-or-later or MIT)') +depends=( + 'gobject-introspection' + 'gnome-desktop' + 'libglvnd' + 'libgmobile' + 'libinput' + 'libliftoff' + 'libxcb' + 'mutter' + 'seatd' + 'xcb-util-errors' + 'xcb-util-renderutil' + 'xcb-util-wm' + 'wayland-protocols' +) +makedepends=( + 'gi-docgen' + 'glib2-devel' + 'glslang' + 'meson' + 'python-docutils' + 'vulkan-headers' +) +checkdepends=('xorg-server-xvfb') +source=(https://sources.phosh.mobi/releases/$pkgname/$pkgname-$pkgver.tar.xz{,.asc}) +sha256sums=('cbc65258a00dcb9f24a86ed8216a363a1d0d11b977f47987048ccf7874ca3eb9' + 'SKIP') +validpgpkeys=('0DB3932762F78E592F6522AFBB5A2C77584122D3') + +prepare() { + cd $pkgname-$pkgver/subprojects/wlroots + patch -p1 -i "../packagefiles/wlroots/0001-Revert-layer-shell-error-on-0-dimension-without-anch.patch" +} + +build() { + local meson_options=( + --wrap-mode default + -D embed-wlroots=enabled + -D gtk_doc=true + -D man=true + --default-library=static + ) + + arch-meson $pkgname-$pkgver build "${meson_options[@]}" + meson compile -C build +} + +check() { + WLR_RENDERER=pixman xvfb-run meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" + + # Install scale-to-fit helper + install -Dm755 "$pkgname-$pkgver"/helpers/scale-to-fit "$pkgdir"/usr/bin/scale-to-fit + + # Remove unnecessary files + rm -r "$pkgdir"/usr/lib + rm -r "$pkgdir"/usr/include +} diff --git a/phosh-antispam/PKGBUILD b/phosh-antispam/PKGBUILD new file mode 100644 index 0000000..44289ed --- /dev/null +++ b/phosh-antispam/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Danct12 <danct12@disroot.org> +# Contributor: Francisco Carpio <carpiofj@gmail.com> + +pkgname=phosh-antispam +pkgver=3.5 +pkgrel=1 +pkgdesc='An anti-spam program designed to work with Phosh' +arch=('x86_64' 'armv7h' 'aarch64') +url="https://gitlab.com/kop316/phosh-antispam" +license=('GPL-3.0-or-later') +depends=( + 'gnome-calls' + 'libadwaita' +) +makedepends=(meson) +_commit=${pkgver} +source=("${url}/-/archive/${_commit}/${pkgname}-${_commit}.tar.gz") +sha256sums=('62b5e63727da62c2574d4ddf10a02f6db25a2aa8d43db8d84651bc6a3e512702') + +prepare() { + cd $pkgname-$pkgver +} + +build() { + arch-meson $pkgname-$pkgver build + meson compile -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + meson install -C build --destdir "$pkgdir" +} diff --git a/phosh-mobile-settings/PKGBUILD b/phosh-mobile-settings/PKGBUILD new file mode 100644 index 0000000..6a3da4b --- /dev/null +++ b/phosh-mobile-settings/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=phosh-mobile-settings +pkgver=0.40.0 +pkgrel=1 +pkgdesc="A (Phosh-specific) settings app for mobile" +arch=('x86_64' 'armv7h' 'aarch64') +url="https://phosh.mobi" +license=('GPL-3.0-or-later') +depends=( + 'gtk4' + 'gsound' + 'libadwaita' + 'libgmobile' + 'lm_sensors' + 'phosh' + 'wayland' +) +makedepends=( + 'git' + 'glib2-devel' + 'meson' + 'python-packaging' + 'wayland-protocols' +) +source=(https://sources.phosh.mobi/releases/$pkgname/$pkgname-$pkgver.tar.xz{,.asc}) +sha256sums=('484880729782a464355ac8a9308b6956ec3080b981e83f1d7c573e02f93d6110' + 'SKIP') +validpgpkeys=('0DB3932762F78E592F6522AFBB5A2C77584122D3') + +build() { + arch-meson $pkgname-$pkgver output + meson compile -C output +} + +package() { + meson install -C output --skip-subprojects --destdir "$pkgdir" +} diff --git a/phosh-wallpapers/PKGBUILD b/phosh-wallpapers/PKGBUILD new file mode 100644 index 0000000..8a8651f --- /dev/null +++ b/phosh-wallpapers/PKGBUILD @@ -0,0 +1,39 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgbase=phosh-wallpapers +pkgname=('phosh-wallpapers' 'plymouth-theme-phosh' 'sound-theme-phosh') +pkgver=0.40.0 +pkgrel=1 +pkgdesc="Wallpapers for Phosh UI" +arch=(any) +url="https://gitlab.gnome.org/guidog/phosh-wallpapers" +makedepends=('meson' 'plymouth') +source=($url/-/archive/v$pkgver/$pkgname-v$pkgver.tar.gz) +sha256sums=('d05609b4df8938966d4c68133aff0b6626b1bdf1263f77e3fde46abaa573bc7d') + +build() { + arch-meson $pkgname-v$pkgver output + meson compile -C output +} + +package_phosh-wallpapers() { + pkgdesc="Wallpapers for Phosh UI" + license=('CC-BY-SA-4.0 AND GPL-3.0-or-later') + meson install -C output --destdir "$pkgdir" + mv "$pkgdir"/usr/share/plymouth "$srcdir"/usr_share_plymouth + mv "$pkgdir"/usr/share/sounds "$srcdir"/usr_share_sounds +} + +package_plymouth-theme-phosh() { + pkgdesc="Plymouth theme for Phosh UI" + license=('CC-BY-SA-4.0 AND GPL-3.0-or-later') + depends=('plymouth') + mkdir -p "$pkgdir"/usr/share + mv "$srcdir"/usr_share_plymouth "$pkgdir"/usr/share/plymouth +} + +package_sound-theme-phosh() { + pkgdesc="Sound theme for Phosh UI" + license=('CC0 AND CC-BY-SA-4.0') + mkdir -p "$pkgdir"/usr/share + mv "$srcdir"/usr_share_sounds "$pkgdir"/usr/share/sounds +} diff --git a/phosh/PKGBUILD b/phosh/PKGBUILD new file mode 100644 index 0000000..5ad10a8 --- /dev/null +++ b/phosh/PKGBUILD @@ -0,0 +1,76 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=phosh +pkgver=0.40.0 +pkgrel=1 +pkgdesc="A Wayland shell for GNOME on mobile devices." +arch=('x86_64' 'armv7h' 'aarch64') +url="https://gitlab.gnome.org/World/Phosh/phosh" +license=('GPL-3.0-or-later') +depends=( + 'callaudiod' + 'evince' + 'evolution-data-server' + 'feedbackd' + 'gcr' + 'gtk3' + 'libadwaita' + 'libcap' + 'libgmobile' + 'libhandy' + 'libnm' + 'libpulse' + 'gnome-desktop' + 'gnome-session' + 'gnome-shell' + 'phoc' + 'squeekboard' + 'upower' +) +makedepends=( + 'gi-docgen' + 'glib2-devel' + 'meson' + 'python-docutils' + 'python-packaging' + 'wayland-protocols' +) +checkdepends=('xorg-server-xvfb') +install="$pkgname.install" +source=(https://sources.phosh.mobi/releases/$pkgname/$pkgname-$pkgver.tar.xz{,.asc} + 'pam_phosh' + 'phosh.service') +sha256sums=('d08895b19095a4a9fbe824700304973615936c55c0b04877f20269254d7dd640' + 'SKIP' + '43b94d0d9f4d083f028c77d18cb0d0f8037d160c41f333878c7cae3df0163c3d' + '48dfe40c42218c92eec59969c06f203dc8a3928b21ca9ee2b92b0987de874a66') +validpgpkeys=('0DB3932762F78E592F6522AFBB5A2C77584122D3') + +prepare() { + cd $pkgname-$pkgver +} + +build() { + local meson_options=( + --libexecdir=/usr/lib/$pkgname + -D gtk_doc=true + -D man=true + -D phoc_tests=disabled + ) + arch-meson $pkgname-$pkgver output "${meson_options[@]}" + meson compile -C output +} + +check() { + xvfb-run meson test -C output --print-errorlogs +} + +package() { + meson install -C output --destdir "$pkgdir" + + install -Dm644 "$srcdir"/phosh.service \ + "$pkgdir"/usr/lib/systemd/system/phosh.service + install -Dm644 "$srcdir"/pam_phosh \ + "$pkgdir"/etc/pam.d/phosh + mkdir -p "$pkgdir"/usr/share/applications + ln -s sm.puri.Squeekboard.desktop "$pkgdir"/usr/share/applications/sm.puri.OSK0.desktop +} diff --git a/phosh/pam_phosh b/phosh/pam_phosh new file mode 100644 index 0000000..075cfa4 --- /dev/null +++ b/phosh/pam_phosh @@ -0,0 +1,5 @@ +#%PAM-1.0 + +auth include system-local-login +account include system-local-login +session include system-local-login diff --git a/phosh/phosh.install b/phosh/phosh.install new file mode 100644 index 0000000..4e3acfb --- /dev/null +++ b/phosh/phosh.install @@ -0,0 +1,8 @@ +post_install() { + gio-querymodules /usr/lib/phosh/plugins + gio-querymodules /usr/lib/phosh/plugins/prefs +} + +post_upgrade() { + post_install +} diff --git a/phosh/phosh.service b/phosh/phosh.service new file mode 100644 index 0000000..f302d67 --- /dev/null +++ b/phosh/phosh.service @@ -0,0 +1,60 @@ +[Unit] +Description=Phosh, a shell for mobile phones +Documentation=https://gitlab.gnome.org/World/Phosh/phosh + +# replaces the getty +Conflicts=getty@tty1.service +After=getty@tty1.service + +# Needs all the dependencies of the services it's replacing +# (currently getty@tty1.service): +After=rc-local.service plymouth-quit-wait.service systemd-user-sessions.service + +OnFailure=getty@tty1.service + +# D-Bus is necessary for contacting logind. Logind is required. +Wants=dbus.socket +After=dbus.socket + +# This scope is created by pam_systemd when logging in as the user. +# This directive is a workaround to a systemd bug, where the setup of the +# user session by PAM has some race condition, possibly leading to a failure. +# See README for more details. +After=session-c1.scope + +# Since we are part of the graphical session, make sure we are started before +# it is complete. +Before=graphical.target + +# Prevent starting on systems without virtual consoles +ConditionPathExists=/dev/tty0 + +[Service] +Environment=XDG_CURRENT_DESKTOP=Phosh:GNOME +Environment=XDG_SESSION_DESKTOP=phosh +Environment=XDG_SESSION_TYPE=wayland +ExecStart=capsh --noamb -- -c "exec /usr/bin/phosh-session" +TimeoutStartSec=30 +User=1000 +PAMName=login +WorkingDirectory=~ +Restart=always +RestartSec=5s + +# A virtual terminal is needed. +TTYPath=/dev/tty7 +TTYReset=yes +TTYVHangup=yes +TTYVTDisallocate=yes + +# Fail to start if not controlling the tty. +StandardInput=tty-fail +StandardOutput=journal +StandardError=journal + +# Log this user with utmp, letting it show up with commands 'w' and 'who'. +UtmpIdentifier=tty7 +UtmpMode=user + +[Install] +WantedBy=graphical.target diff --git a/portfolio-file-manager/PKGBUILD b/portfolio-file-manager/PKGBUILD new file mode 100644 index 0000000..9d2f405 --- /dev/null +++ b/portfolio-file-manager/PKGBUILD @@ -0,0 +1,30 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=portfolio-file-manager +pkgver=1.0.1 +pkgrel=1 +pkgdesc="A minimalist file manager for those who want to use Linux mobile devices." +url="https://github.com/tchx84/Portfolio" +license=('GPL3') +arch=('any') +depends=('python' 'gtk4' 'libadwaita' 'python-gobject') +makedepends=('meson') +checkdepends=('python-pytest' 'xorg-server-xvfb') +replaces=('portfolio-fm') +source=(Portfolio-${pkgver}.tar.gz::https://github.com/tchx84/Portfolio/archive/v${pkgver}.tar.gz) +sha512sums=('ef297550bee61862bf17b8ffd4170dc4d7a1205a2006783ff27bb96f22427f2da322b1e4633472084b05365bb1d2201bd554cfb385412e535a58000a8c062c03') + +build() { + arch-meson Portfolio-${pkgver} output + ninja -C output +} + +# python tests are broken +#check() { +# xvfb-run ninja test -C output +#} + +package() { + DESTDIR="${pkgdir}" ninja -C output install +} + + diff --git a/purism-chatty/PKGBUILD b/purism-chatty/PKGBUILD new file mode 100644 index 0000000..4591a78 --- /dev/null +++ b/purism-chatty/PKGBUILD @@ -0,0 +1,58 @@ +# Maintainer: Danct12 <danct12@disroot.org> +_pkgname=chatty +pkgname=purism-chatty +pkgver=0.8.4 +pkgrel=1 +pkgdesc="SMS/MMS, Matrix and (optionally) XMPP messaging app" +url="https://gitlab.gnome.org/World/Chatty" +license=('GPL') +arch=('x86_64' 'armv7h' 'aarch64') +depends=( + 'evolution-data-server' + 'feedbackd' + 'gnome-desktop-4' + 'gtksourceview5' + 'gtk4' + 'libadwaita' + 'libmm-glib' + 'libolm' + 'libpurple' + 'libspelling' +) +replaces=('chatty<=0.7.3') +makedepends=('git' 'itstool' 'meson' 'ninja') +checkdepends=('xorg-server-xvfb') +optdepends=( + 'libpurple-carbons: message carbons support' + 'libpurple-lurch: OMEMO encryption' + 'libpurple-xmpp-http-upload: XMPP HTTP File Upload support' + 'mmsd-tng: MMS support' + 'purple-telegram: Telegram chat protocol support' +) +_commit="28b23d3d1a376b4691e031010fbe4a4b0da64d69" # tags/v0.8.4 +source=($_pkgname::git+https://gitlab.gnome.org/World/Chatty.git#commit=${_commit}) + +pkgver() { + cd $_pkgname + git describe --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' +} + +prepare() { + cd $_pkgname + git submodule update --init +} + +build() { + arch-meson $_pkgname output + ninja -C output +} + +# FAIL: secure memory pool is not locked while in FIPS mode +#check() { +# xvfb-run ninja -C output test +#} + +package() { + DESTDIR="$pkgdir" ninja -C output install +} +md5sums=('SKIP') diff --git a/sound-theme-librem5/PKGBUILD b/sound-theme-librem5/PKGBUILD new file mode 100644 index 0000000..70d7f2a --- /dev/null +++ b/sound-theme-librem5/PKGBUILD @@ -0,0 +1,16 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=sound-theme-librem5 +pkgver=0.1.0 +pkgrel=0 +pkgdesc="Sound theme for the Librem 5" +arch=(any) +url="https://source.puri.sm/Librem5/sound-theme-librem5" +license=('GPL') +source=(https://source.puri.sm/Librem5/sound-theme-librem5/-/archive/v$pkgver/sound-theme-librem5-v$pkgver.tar.gz) + +package() { + mkdir -p "$pkgdir"/usr/share/sounds + cp -rv "$srcdir"/$pkgname-v$pkgver/librem5 "$pkgdir"/usr/share/sounds +} + +md5sums=('67df906054555e8dab065073361881db') diff --git a/squeekboard/PKGBUILD b/squeekboard/PKGBUILD new file mode 100644 index 0000000..74798bb --- /dev/null +++ b/squeekboard/PKGBUILD @@ -0,0 +1,26 @@ +# Maintainer: Danct12 <danct12@disroot.org> +pkgname=squeekboard +pkgver=1.39.0 +pkgrel=1 +pkgdesc="An on-screen-keyboard input method for Wayland" +arch=('x86_64' 'armv7h' 'aarch64') +url="https://gitlab.gnome.org/World/Phosh/squeekboard" +license=('GPL-3.0-or-later') +depends=('feedbackd' 'gtk3' 'gnome-desktop' 'libbsd' 'wayland-protocols') +makedepends=('rust' 'meson' 'ninja' 'python-packaging') +source=(https://gitlab.gnome.org/World/Phosh/squeekboard/-/archive/v$pkgver/squeekboard-v$pkgver.tar.gz) + +build() { + arch-meson ${pkgname}-v${pkgver} output + ninja -C output +} + +check() { + meson test -C output --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" ninja -C output install +} + +md5sums=('90fc61e2fc617b895162a1a422f548fc') diff --git a/wys/PKGBUILD b/wys/PKGBUILD new file mode 100644 index 0000000..17744db --- /dev/null +++ b/wys/PKGBUILD @@ -0,0 +1,28 @@ +# Maintainer: Danct12 <danct12@disroot.org> + +pkgname=wys +pkgver=0.1.11 +pkgrel=1 +pkgdesc="A daemon to bring up and take down PulseAudio loopbacks for phone call audio" +url="https://source.puri.sm/Librem5/wys" +license=('GPL') +arch=('x86_64' 'armv7h' 'aarch64') +depends=('glib2' 'libpulse' 'modemmanager') +makedepends=('meson' 'ninja') +source=("https://source.puri.sm/Librem5/wys/-/archive/v$pkgver/wys-v$pkgver.tar.gz") + +prepare() { + cd $pkgname-v$pkgver +} + +build() { + arch-meson $pkgname-v$pkgver output + ninja -C output +} + +package() { + DESTDIR="$pkgdir" ninja -C output install + install -Dm644 $pkgname-v$pkgver/debian/wys.user-service "$pkgdir"/usr/lib/systemd/user/wys.service +} + +md5sums=('4cecd05e1d35214d64402073b9234115')