Files
qtile/plugins/__pycache__/notifications.cpython-313.pyc

145 lines
23 KiB
Plaintext
Raw Normal View History

2026-02-23 17:56:46 +01:00
<EFBFBD>
c<><63>h<EFBFBD>B<00><01><00>SrSSKJr SSKrSSKJr SSKJrJrJ r J
r
J r SSK J r SSKJr SSKJrJr SS KJr \(a#SS
KJrJrJrJrJrJr SS KJr SS KJr SS KJr "SS\RB5r"g!\ a \rN f=f)a<>
Qtile plugin that acts as a notification server and draws notification windows.
Clicking on a notification will trigger the default action, e.g. telling Firefox to open
the tab that sent the notification. If you want access to a notification's non-default
actions then you need to disable the "actions" capability of the `Notifier` by passing
`actions=False`.
Usage:
from graphical_notifications import Notifier
notifier = Notifier()
keys.extend([
Key([mod], 'grave', lazy.function(notifier.prev)),
Key([mod, 'shift'], 'grave', lazy.function(notifier.next)),
Key(['control'], 'space', lazy.function(notifier.close)),
])
Qtile versions known to work: 0.17 - 0.18
<EFBFBD>)<01> annotationsN)<01> TYPE_CHECKING)<05> configurable<6C>hook<6F>images<65> pangocffi<66>qtile)<01>lazy)<01>logger)<02>notifier<65> ClosedReason)<01>Popup)<06>Any<6E>Callable<6C>Dict<63>List<73>Optional<61>Tuple)<01> ImageSurface)<01>Qtile)<01> Notificationc<01><00>\rSrSrSr/SQr1SkrSSjrSSjrSSjr SSjr
SS jr SS
jr SS jr SS jrS S!SjjrS"SjrS#SjrS$S%SjjrS&SjrSSjrS'SjrS SSjjrS SSjjrS SSjjrS SSjjrS SSjjrSrg )(<28>Notifier<65>0a<>
This class provides a full graphical notification manager for the
org.freedesktop.Notifications service implemented in libqtile.notify.
The format option determines what text is shown on the popup windows, and supports
markup and new line characters e.g. '<b>{summary}</b>
{body}'. Available
placeholders are summary, body and app_name.
Foreground and background colours can be specified either as tuples/lists of 3
strings, corresponding to low, normal and critical urgencies, or just a single
string which will then be used for all urgencies. The timeout and border options can
be set in the same way.
The max_windows option limits how many popup windows can be drawn at a time. When
more notifications are recieved while the maximum number are already drawn,
notifications are queued and displayed when existing notifications are closed.
TODO:
- text overflow
- select screen / follow mouse/keyboard focus
- critical notifications to replace any visible non-critical notifs immediately?
- hints: image-path, desktop-entry (for icon)
- hints: Notifier parameters set for single notification?
- hints: progress value e.g. int:value:42 with drawing
))<03>x<> z4x position on screen to start drawing notifications.)<03>y<>@z4y position on screen to start drawing notifications.)<03>width<74><68>zWidth of notifications.)<03>heightrzHeight of notifications.)<03>formatz{summary}
{body}z Text format.)<03>
foreground)<03>#ffffffr$r$zBForeground colour of notifications, in ascending order of urgency.)<03>
background<EFBFBD><03>#111111r'r'zBBackground colour of notifications, in ascending order of urgency.)<03>borderr&z?Border colours in ascending order of urgency. Or None for none.)<03>timeout)<03><>r*rz<Millisecond timeout duration, in ascending order of urgency.)<03>opacityg<00>?zOpacity of notifications.)<03> border_width<74>zLine width of drawn borders.)<03> corner_radiusNz)Corner radius for round corners, or None.)<03>font<6E>sanszFont used in notifications.)<03>fontsize<7A>z Size of font.)<03>
fontshadowNz/Color for text shadows, or None for no shadows.)<03>text_alignment<6E>leftz&Text alignment: left, center or right.)<03>horizontal_paddingNzPadding at sides of text.)<03>vertical_paddingNz"Padding at top and bottom of text.)<03> line_spacingr-zSpace between lines.)<03>overflow<6F>truncatezEHow to deal with too much text: more_width, more_height, or truncate.)<03> max_windows<77>z*Maximum number of windows to show at once.)<03>gap<61> z#Vertical gap between popup windows.)<03>sticky_historyTz&Disable timeout when browsing history.)<03> icon_size<7A>$zPixel size of any icons.)<03>
fullscreen<EFBFBD>showz4What to do when in fullscreen: show, hide, or queue.)<03>screen<65>focusz0How to select a screen: focus, mouse, or an int.)<03>actionsTz)Whether to enable the actions capability.><00>bodyrF<00> body-markupc <01>0^<00>[RR"T40UD6 TR[R
5 /Tl/Tl/Tl/Tl STl
STl STl STl 0TlTRS5 TRS5 TRS5 TRS5 [ R"R%U4Sj5 TR&SLa [R(R+S5 gg) NrFr#r%r)r(c<01>L><01>[R"TR55$<00>N)<03>asyncio<69> create_task<73>
_configure<EFBFBD><01>selfs<00><>5/home/cerberus/.config/qtile/plugins/notifications.py<70><lambda><3E>#Notifier.__init__.<locals>.<lambda><3E>s<00><><00>w<EFBFBD>':<3A>':<3A>4<EFBFBD>?<3F>?<3F>;L<>'M<>rF)r<00> Configurable<6C>__init__<5F> add_defaultsr<00>defaults<74>_hidden<65>_shown<77>_queue<75>
_positions<EFBFBD> _scroll_popup<75> _current_id<69> _notif_id<69>_paused<65>_icons<6E>_make_attr_listr<00> subscribe<62>startuprF<00> capabilities<65>remove)rP<00>configs` rQrV<00>Notifier.__init__<5F>s<><00><><00><14>!<21>!<21>*<2A>*<2A>4<EFBFBD>:<3A>6<EFBFBD>:<3A> <0C><19><19>(<28>+<2B>+<2B>,<2C>$&<26><04> <0C>#%<25><04> <0B>*,<2C><04> <0B>13<31><04><0F>.2<EFBFBD><04><1A> !<21><04><18>(,<2C><04><0E>"<22><04> <0C>;=<3D><04> <0B> <0C><1C><1C>\<5C>*<2A> <0C><1C><1C>\<5C>*<2A> <0C><1C><1C>Y<EFBFBD>'<27> <0C><1C><1C>X<EFBFBD>&<26> <0C><0E><0E><1E><1E>M<>N<> <0F><<3C><<3C>5<EFBFBD> <20> <14> !<21> !<21> (<28> (<28><19> 3<> !rTc<01>r<00>[X5n[U[[45(d[ XU4S-5 gg)z8
Turns '#000000' into ('#000000', '#000000', '#000000')
<EFBFBD>N)<05>getattr<74>
isinstance<EFBFBD>tuple<6C>list<73>setattr)rP<00>attr<74>values rQrb<00>Notifier._make_attr_list<73>s4<00><00><18><04>#<23><05><19>%<25>%<25><14><1D>/<2F>/<2F> <13>D<EFBFBD><15><08>1<EFBFBD> <0C> -<2D>0rTc <00><01>n# <00>URcURS-UlURcURS-UlURURUR
UR S.n[RHMnUSn[X5(dM[X5n[U[[45(a USX'MIXAU'MO [UR5H<>n[[ 40UD6nUR#U5UR$lSUlUR*R-U5 UR.R-URURXPR SUR0--UR2---45 M<> [4R6R95 [4R:R95 [4R<"UR>[@RBURDS9IShv<01>N [FRH"S5 gN7f)zu
This method needs to be called to set up the Notifier with the Qtile manager and
create the required popup windows.
Nr<)rrrr!r<00>)<01>on_closez+Notification server started up successfully)%r6r1r7rrrr!rrX<00>hasattrrkrlrmrn<00>ranger;r <00>_process_button_click<63>win<69>process_button_click<63>notifrY<00>appendr\r,r=r <00> callbacks<6B>clear<61>close_callbacks<6B>register<65>_notifyrre<00> _on_closer <00>info)rP<00> popup_config<69>opt<70>keyrqry<00>popups rQrN<00>Notifier._configure<72>s<><00><00><00>
<10> "<22> "<22> *<2A>&*<2A>m<EFBFBD>m<EFBFBD>q<EFBFBD>&8<>D<EFBFBD> #<23> <0F> <20> <20> (<28>$(<28>M<EFBFBD>M<EFBFBD>Q<EFBFBD>$6<>D<EFBFBD> !<21><16><16><16><15><16><16><19>Z<EFBFBD>Z<EFBFBD><1A>k<EFBFBD>k<EFBFBD> 
<EFBFBD> <0C><19>><3E>><3E>C<EFBFBD><15>a<EFBFBD>&<26>C<EFBFBD><16>t<EFBFBD>!<21>!<21><1F><04>*<2A><05><1D>e<EFBFBD>e<EFBFBD>T<EFBFBD>]<5D>3<>3<>(-<2D>a<EFBFBD><08>L<EFBFBD>%<25>(-<2D><13>%<25>"<22><19><14>)<29>)<29>*<2A>C<EFBFBD><19>%<25>0<><<3C>0<>E<EFBFBD>-1<>-G<>-G<><05>-N<>E<EFBFBD>I<EFBFBD>I<EFBFBD> *<2A><1E>E<EFBFBD>K<EFBFBD> <10>L<EFBFBD>L<EFBFBD> <1F> <1F><05> &<26> <10>O<EFBFBD>O<EFBFBD> "<22> "<22><18>F<EFBFBD>F<EFBFBD><18>F<EFBFBD>F<EFBFBD>S<EFBFBD>K<EFBFBD>K<EFBFBD>!<21>d<EFBFBD>6G<36>6G<36>2G<32>$G<>$<24>(<28>(<28>$R<>S<>S<><12> <0E> +<2B> <11><1A><1A> <20> <20>"<22><10> <20> <20>&<26>&<26>(<28><16><1F><1F> <10>L<EFBFBD>L<EFBFBD>(<28>/<2F>/<2F>$<24>.<2E>.<2E>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0F> <0B> <0B>A<>B<>
<EFBFBD>s<00>BH5<01>E9H5<01>H3<04>H5c<01>^^<01>SUU4SjjnU$)Nc<01><>><02>US:Xa/TRT5 TRT[RS9 US:XaTRT[RS9 gg)Nrt)<01>reasonrj)<04>_act<63>_closer <00> dismissed)rr<00>buttonr<6E>rPs <20><>rQ<00>_<>)Notifier._process_button_click.<locals>._<>sN<00><><00><15><11>{<7B><14> <09> <09>%<25> <20><14> <0B> <0B>E<EFBFBD>,<2C>*@<40>*@<40> <0B>A<><15><11>{<7B><14> <0B> <0B>E<EFBFBD>,<2C>*@<40>*@<40> <0B>A<>rT)r<00>intrr<>r<>r<><00>return<72>None<6E>)rPr<>r<>s`` rQrx<00>Notifier._process_button_click<63>s<00><><00> B<01> B<01><11>rTc<01><><00>UR(aURRU5 g[R(a<>[RR
(a<>UR
S:wasUR
S:XabUR [R;a)[RRUR 5 URRU5 gUR(auURHenURURR:XdM)URRU5 URX5 UR!5 g UR"(a*URXR"R%55 gURRU5 g)z<>
This method is registered with the NotificationManager to handle notifications
received via dbus. They will either be drawn now or queued to be drawn soon.
NrC<00>queue)r`r[r|r <00>current_windowrB<00> _unfullscreenr<00> subscriptionsrc<00> float_change<67> replaces_idrZr{rf<00>_send<6E> _repositionrY<00>pop)rPr{r<>s rQr<><00>Notifier._notify<66>s <00><00>
<10><<3C><<3C> <10>K<EFBFBD>K<EFBFBD> <1E> <1E>u<EFBFBD> %<25> <12> <10> <1F> <1F>E<EFBFBD>$8<>$8<>$C<>$C<><13><EFBFBD><EFBFBD>&<26>(<28><17>?<3F>?<3F>g<EFBFBD>-<2D><1B>)<29>)<29><14>1C<31>1C<31>C<><1C><0E><0E>3<>3<>D<EFBFBD>4F<34>4F<34>G<><18>K<EFBFBD>K<EFBFBD>&<26>&<26>u<EFBFBD>-<2D><16> <10> <1C> <1C><1D><1B><1B><05><18>$<24>$<24><05> <0B> <0B>(?<3F>(?<3F>?<3F><18>K<EFBFBD>K<EFBFBD>&<26>&<26>u<EFBFBD>-<2D><18>J<EFBFBD>J<EFBFBD>u<EFBFBD>,<2C><18>$<24>$<24>&<26><1A> %<25> <10><<3C><<3C> <10>J<EFBFBD>J<EFBFBD>u<EFBFBD>l<EFBFBD>l<EFBFBD>.<2E>.<2E>0<> 1<> <10>K<EFBFBD>K<EFBFBD> <1E> <1E>u<EFBFBD> %rTc<01>f<00>URH!nURX![RS9 M# g)N)<02>nidr<64>)rZr<>r <00>method)rPr<>r<>s rQr<><00>Notifier._on_close<73>s&<00><00><19>[<5B>[<5B>E<EFBFBD> <10>K<EFBFBD>K<EFBFBD><05>|<7C>/B<>/B<>K<EFBFBD> C<>!rTc<01><><00>[RR(d:[RR UR 5 UR5 gg)zC
Begin displaying of queue notifications after leaving fullscreen.
N)r r<>rBr<00> unsubscriber<65>r<><00> _renotifyrOs rQr<><00>Notifier._unfullscreen<65>s<<00><00><15>#<23>#<23>.<2E>.<2E> <10> <1C> <1C> )<29> )<29>$<24>*<<3C>*<<3C> =<3D> <10>N<EFBFBD>N<EFBFBD> <1C>/rTc<01><><00>URR5nURR5 U(a*URUR S55 U(aM)gg)z<>
If we hold off temporarily on sending notifications and accumulate a queue, we
should use this to send the queue through self._notify again.
rN)r[<00>copyr~r<>r<>)rPr<>s rQr<><00>Notifier._renotifysD<00><00>
<15> <0B> <0B> <20> <20>"<22><05> <0C> <0B> <0B><19><19><1B><13> <10>L<EFBFBD>L<EFBFBD><15><19><19>1<EFBFBD><1C> &<26><14>erTNc<01><><00>URU5nSUR;aURSRnOSnU=RS- slURUlXlX R ;aUR RU5 UR5uUl Ul
UR5 URU5nUR5 URUUlURUUR lUR%5 U(aeUR'USUR(SUR*US-
S- -5 U=R(UR,UR(S- -- sl[/UR1S55HVupxX<78>R lUR4XrR R*UR6---n UR9U S9 MX UR:(aUR=UR>U5 URA5 U(aUR(UlUc:URBbURBS:aURBUnO"URBnOUS:aURBUnUS:<3A>a0[DRF"US- URHX R5 gg) zC
Draw the desired notification using the specified Popup instance.
<EFBFBD>urgencyrtrr<<00>
)rNi<4E>)%<25> _get_text<78>hintsrqr^<00>idr{rZr|<00>_get_coordinatesrr<00>place<63>
_load_icon<EFBFBD>unhider%r#<00>layout<75>colourr~<00>
draw_imager6r!r@<00> enumerate<74>split<69>textr7r8<00> draw_textr,<00>
set_borderr(<00>drawr)r <00>
call_laterr<EFBFBD>)
rPr{r<>r)r<>r<><00>icon<6F>num<75>liners
rQr<><00>Notifier._send sG<00><00> <14>~<7E>~<7E>e<EFBFBD>$<24><04> <14><05> <0B> <0B> #<23><1B>k<EFBFBD>k<EFBFBD>)<29>,<2C>2<>2<>G<EFBFBD><17>G<EFBFBD> <0C><18><18>A<EFBFBD><1D><18><17>#<23>#<23><05><08><1B> <0B> <10> <0B> <0B> #<23> <10>K<EFBFBD>K<EFBFBD> <1E> <1E>u<EFBFBD> %<25><1F>0<>0<>2<><18><05><07><15><17> <0A> <0B> <0B> <0A><13><EFBFBD><EFBFBD>u<EFBFBD>%<25><04> <0A> <0C> <0C><0E><1F>?<3F>?<3F>7<EFBFBD>3<><05><18>"<22>o<EFBFBD>o<EFBFBD>g<EFBFBD>6<><05> <0C> <0C><1B> <0A> <0B> <0B> <0A> <0F> <11> <1C> <1C><14>Q<EFBFBD><07><14>'<27>'<27><11>T<EFBFBD>[<5B>[<5B>4<EFBFBD><01>7<EFBFBD>*<2A>a<EFBFBD>/<2F>/<2F> <0E>
<12> $<24> $<24><04><0E><0E><14>9P<39>9P<39>ST<53>9T<39>(T<> T<> $<24>"<22>4<EFBFBD>:<3A>:<3A>d<EFBFBD>#3<>4<>I<EFBFBD>C<EFBFBD> $<24>L<EFBFBD>L<EFBFBD> <1D><14>%<25>%<25><03>|<7C>|<7C>/B<>/B<>T<EFBFBD>EV<45>EV<45>/V<>(W<>W<>A<EFBFBD> <11>O<EFBFBD>O<EFBFBD>a<EFBFBD>O<EFBFBD> <20>5<> <10> <1C> <1C> <11> <1C> <1C>T<EFBFBD>[<5B>[<5B><17>1<> 2<> <0A>
<EFBFBD>
<EFBFBD> <0C> <0F>'+<2B>'><3E>'><3E>E<EFBFBD> $<24> <12>?<3F><14>}<7D>}<7D>$<24><05> <0A> <0A><01>(9<><1E>,<2C>,<2C>w<EFBFBD>/<2F><07><1F>-<2D>-<2D><07> <14>q<EFBFBD>[<5B><1A>l<EFBFBD>l<EFBFBD>7<EFBFBD>+<2B>G<EFBFBD> <12>Q<EFBFBD>;<3B> <11> <1C> <1C>W<EFBFBD>t<EFBFBD>^<5E>T<EFBFBD>[<5B>[<5B>%<25>AQ<41>AQ<41> R<> rTc<01>h<00>SnSnSnUR(a [R"UR5nUR(a [R"UR5nUR(a [R"UR5nUR
R X#US9$)N<>)<03>summaryrG<00>app_name)r<>r<00>markup_escape_textrGr<>r")rPr{r<>rGr<>s rQr<><00>Notifier._get_textCs|<00><00><14><07><11><04><15><08> <10>=<3D>=<3D><1F>2<>2<>5<EFBFBD>=<3D>=<3D>A<>G<EFBFBD> <10>:<3A>:<3A><1C>/<2F>/<2F><05>
<EFBFBD>
<EFBFBD>;<3B>D<EFBFBD> <10>><3E>><3E> <20>3<>3<>E<EFBFBD>N<EFBFBD>N<EFBFBD>C<>H<EFBFBD><13>{<7B>{<7B>!<21>!<21>'<27>x<EFBFBD>!<21>P<>PrTc<01><><00>UR[UR5S-
up[UR[
5(a[ RURnORURS:Xa[ RnO1URS:Xa![ R"[ R6nUWR-X#R-4$)NrtrE<00>mouse) r\<00>lenrZrlrDr<>r <00>screens<6E>current_screen<65> find_screen<65>mouse_positionrr)rPrrrDs rQr<><00>Notifier._get_coordinatesOs<><00><00><13><EFBFBD><EFBFBD>s<EFBFBD>4<EFBFBD>;<3B>;<3B>/<2F>!<21>3<>4<><04><01> <15>d<EFBFBD>k<EFBFBD>k<EFBFBD>3<EFBFBD> '<27> '<27><1A>]<5D>]<5D>4<EFBFBD>;<3B>;<3B>/<2F>F<EFBFBD> <11>[<5B>[<5B>G<EFBFBD> #<23><1A>)<29>)<29>F<EFBFBD> <11>[<5B>[<5B>G<EFBFBD> #<23><1A>&<26>&<26><05>(<<3C>(<<3C>=<3D>F<EFBFBD><10>6<EFBFBD>8<EFBFBD>8<EFBFBD>|<7C>Q<EFBFBD><18><18>\<5C>)<29>)rTc<01>4<00>XR;a<>UbURU:wagURRU5 URULaSUlSUlUR 5 UR (a=UR(d,URUR RS5U5 OURRU5 [RRURRU5 UR!5 g)z%
Close the specified Popup instance.
Nr)rZr<>rfr]r_<00>hider[r`r<>r<>rYr|r <00>_service<63>NotificationClosedr{r<>)rPr<>r<>r<>s rQr<><00>Notifier._closeYs<><00><00> <11>K<EFBFBD>K<EFBFBD> <1F><12><EFBFBD>5<EFBFBD>8<EFBFBD>8<EFBFBD>s<EFBFBD>?<3F><16> <10>K<EFBFBD>K<EFBFBD> <1E> <1E>u<EFBFBD> %<25><13>!<21>!<21>U<EFBFBD>*<2A>%)<29><04>"<22>!%<25><04><0E> <11>J<EFBFBD>J<EFBFBD>L<EFBFBD><13>{<7B>{<7B>4<EFBFBD><<3C><<3C><14>
<EFBFBD>
<EFBFBD>4<EFBFBD>;<3B>;<3B>?<3F>?<3F>1<EFBFBD>-<2D>u<EFBFBD>5<><14> <0C> <0C>#<23>#<23>E<EFBFBD>*<2A> <14> <1D> <1D> 0<> 0<><15><1B><1B><1E><1E><16> H<> <0C><18><18>rTc<01><><00>URR(aL[RR URR
URRS5 gg)zO
Execute the actions specified by the notification visible on a clicked popup.
rN)r{rFr r<><00> ActionInvokedr<64>)rPr<>s rQr<><00> Notifier._actlsD<00><00> <11>;<3B>;<3B> <1E> <1E> <14> <1D> <1D> +<2B> +<2B>E<EFBFBD>K<EFBFBD>K<EFBFBD>N<EFBFBD>N<EFBFBD>E<EFBFBD>K<EFBFBD>K<EFBFBD><O<><O<>PQ<50><R<> S<> rTc<01><><00>[UR5H1upURUuUlUlUR 5 M3 grK)r<>rZr\rrr<>)rP<00>index<65>showns rQr<><00>Notifier._repositionus7<00><00>%<25>d<EFBFBD>k<EFBFBD>k<EFBFBD>2<>L<EFBFBD>E<EFBFBD>#<23><EFBFBD><EFBFBD>u<EFBFBD>5<> <1C>E<EFBFBD>G<EFBFBD>U<EFBFBD>W<EFBFBD> <11>K<EFBFBD>K<EFBFBD>M<EFBFBD>3rTc<01>:<00>UR(dgURUR;a%URRUR5$[RR UR5nUR UR:<3A>aURURS9 OURURS9 [R"URUR UR5up4X3R54URUR'URUR$![[R[4a9n[ R""U5 SURUR'SnANlSnAff=f)N)r)r!)<12>app_iconra<00>getr<00>Img<6D> from_pathrr!<00>resizer@<00>_decode_to_image_surface<63> bytes_img<6D>
get_height<EFBFBD>FileNotFoundError<6F> LoadingError<6F>IsADirectoryErrorr <00> exception)rPr{<00>img<6D>surfacer<65><00>es rQr<><00>Notifier._load_iconzs<00><00><14>~<7E>~<7E><17> <10>><3E>><3E>T<EFBFBD>[<5B>[<5B> (<28><17>;<3B>;<3B>?<3F>?<3F>5<EFBFBD>><3E>><3E>2<> 2<> /<2F><18>*<2A>*<2A>&<26>&<26>u<EFBFBD>~<7E>~<7E>6<>C<EFBFBD><12>y<EFBFBD>y<EFBFBD>3<EFBFBD>:<3A>:<3A>%<25><13>
<EFBFBD>
<EFBFBD><14><1E><1E>
<EFBFBD>0<><13>
<EFBFBD>
<EFBFBD>$<24>.<2E>.<2E>
<EFBFBD>1<><1F>8<>8<><13> <0A> <0A>s<EFBFBD>y<EFBFBD>y<EFBFBD>#<23>*<2A>*<2A><0E>J<EFBFBD>G<EFBFBD>+2<>3E<33>3E<33>3G<33>*G<>D<EFBFBD>K<EFBFBD>K<EFBFBD><05><0E><0E> '<27><14>{<7B>{<7B>5<EFBFBD>><3E>><3E>*<2A>*<2A><>"<22>6<EFBFBD>#6<>#6<>8I<38>J<> /<2F> <12> <1C> <1C>Q<EFBFBD> <1F>*.<2E>D<EFBFBD>K<EFBFBD>K<EFBFBD><05><0E><0E> '<27><> /<2F>s<00>CE<00>F<03>!/F<03>Fc<01>d<00>UR(aURURS5 gg)z0
Close the oldest of all visible popup windows.
rN)rZr<><00>rP<00>_qtiles rQ<00>close<73>Notifier.close<73>s$<00><00> <10>;<3B>;<3B> <10>K<EFBFBD>K<EFBFBD><04> <0B> <0B>A<EFBFBD><0E> '<27> rTc<01><><00>URR5 UR(a2URURS5 UR(aM1gg)z
Close all popup windows.
rN)r[r~rZr<>r<>s rQ<00> close_all<6C>Notifier.close_all<6C>s:<00><00> <0A> <0B> <0B><19><19><1B><12>k<EFBFBD>k<EFBFBD> <10>K<EFBFBD>K<EFBFBD><04> <0B> <0B>A<EFBFBD><0E> '<27><13>k<EFBFBD>k<EFBFBD>krTc<01><><00>[R(a<>URcdUR(a!URR S5UlOUR
SUl[ [R5UlURS:<3A>aU=RS-slUR[RURURUR(aSOS5 gg)z3
Display the previous notification in the history.
Nrrt)
r <00> notificationsr]rYr<>rZr<>r_r<>r?r<>s rQ<00>prev<65> Notifier.prev<65>s<><00><00> <14> !<21> !<21><13>!<21>!<21>)<29><17><<3C><<3C>)-<2D><1C><1C>)9<>)9<>!<21>)<<3C>D<EFBFBD>&<26>)-<2D><1B><1B>Q<EFBFBD><1E>D<EFBFBD>&<26>!$<24>X<EFBFBD>%;<3B>%;<3B>!<<3C><04><0E><13>~<7E>~<7E><01>!<21><14><0E><0E>!<21>#<23><0E> <10>J<EFBFBD>J<EFBFBD><18>&<26>&<26>t<EFBFBD>~<7E>~<7E>6<><14>"<22>"<22><19>(<28>(<28><01>d<EFBFBD> <0E> "rTc<01><><00>UR(a<>UR[[R5S-
:aU=RS- slURUR
;a%UR
R UR5 UR[RURURUR(aSOS5 gg)z/
Display the next notification in the history.
rtrN) r]r_r<>r r<>rZrfr<>r?r<>s rQ<00>next<78> Notifier.next<78>s<><00><00> <10> <1D> <1D><13>~<7E>~<7E><03>H<EFBFBD>$:<3A>$:<3A> ;<3B>a<EFBFBD> ?<3F>?<3F><14><0E><0E>!<21>#<23><0E><13>!<21>!<21>T<EFBFBD>[<5B>[<5B>0<><14> <0B> <0B>"<22>"<22>4<EFBFBD>#5<>#5<>6<> <10>J<EFBFBD>J<EFBFBD><18>&<26>&<26>t<EFBFBD>~<7E>~<7E>6<><14>"<22>"<22><19>(<28>(<28><01>d<EFBFBD> <0E> rTc<01><><00>UR(aSUlUR5 gSUlUR(a2URURS5 UR(aM1gg)zz
Pause display of notifications on screen. Notifications will be queued and
presented as usual when this is called again.
FTrN)r`r<>rZr<>r<>s rQ<00>pause<73>Notifier.pause<73>sI<00><00>
<10><<3C><<3C> <20>D<EFBFBD>L<EFBFBD> <10>N<EFBFBD>N<EFBFBD> <1C><1F>D<EFBFBD>L<EFBFBD><16>+<2B>+<2B><14> <0B> <0B>D<EFBFBD>K<EFBFBD>K<EFBFBD><01>N<EFBFBD>+<2B><17>+<2B>+<2B>+rT) r^rYrar_r`r\r[r]rZr6r7)r<>r<>)rp<00>strr<72>r<>)r<>rr<>r)r{rr<>r<>)r<>r<>r<>r<>rK)r{rr<>rr)<00> Optional[int]r<>r<>)r{rr<>r)r<>zTuple[int, int])Nrt)r<>rr<>rr<>r<>)r<>rr<>r<>)r{rr<>z"Optional[Tuple[ImageSurface, int]])<1C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__rXrerVrbrNrxr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<00>__static_attributes__r<5F>rTrQrr0s<><00><00><08>60<06>H<EFBFBD>b6<>L<EFBFBD>4<>..<2E>-C<01>^<11>&<26><D<01><1D>'<27>KO<01>5S<01>!<21>5S<01>*/<2F>5S<01>:G<>5S<01> <0A>5S<01>n
Q<01>*<2A><1B>&T<01><1A>
+<2B>((<28>(<28><0E>& <0E> ,<2C> ,rTr)#r<00>
__future__rrL<00>typingr<00>libqtilerrrrr <00> libqtile.lazyr
<00>libqtile.log_utilsr <00>libqtile.notifyr r <00>libqtile.popuprrrrrrr<00> cairocffir<00>libqtile.core.managerrr<00> ImportErrorrUrr<>rTrQ<00><module>rsh<00><01><04>.#<23><0E> <20>A<>A<><1E>%<25>2<> <20><10>A<>A<>&<26>+<2B><1B>0<>
Z,<2C>|<7C>(<28>(<28>Z,<2C><> <17><1B><1A> <0C><1B>s<00>A;<00>;B<03>B