@@ -8,6 +8,9 @@ import Helic.Effect.GtkClipboard (GtkClipboard)
88import Helic.Effect.GtkMain (GtkMain )
99import Helic.Gtk (clipboardText , setClipboardText , subscribeToClipboard )
1010import Helic.Interpreter.GtkMain (interpretWithGtk )
11+ import Helic.Data.X11Config (X11Config (.. ))
12+ import Helic.Data.Selection (Selection )
13+ import qualified Data.Set as Set
1114
1215-- | Specialization of 'scoped_' to 'GtkClipboard' for syntactic sugar.
1316withGtkClipboard ::
@@ -21,7 +24,7 @@ withGtkClipboard =
2124-- The effect then needs to be scoped using 'withGtkClipboard'.
2225-- The default implementation for this purpose is 'interpretWithGtk'.
2326handleGtkClipboard ::
24- Members [Log , Embed IO , Final IO ] r =>
27+ Members [Reader X11Config , Log , Embed IO , Final IO ] r =>
2528 Display ->
2629 GtkClipboard (Sem r0 ) a ->
2730 Tactical effect (Sem r0 ) (Stop Text : r ) a
@@ -33,12 +36,16 @@ handleGtkClipboard display = \case
3336 GtkClipboard. Events f -> do
3437 let f' s t = void (raise (runTSimple (f s t)))
3538 runReader display do
36- for_ @ [] [minBound .. maxBound ] (subscribeToClipboard f')
39+ x11Config <- ask @ X11Config
40+ let
41+ targetSelections :: Set Selection
42+ targetSelections = fromMaybe (Set. fromList [minBound .. maxBound ]) x11Config. subscribedSelections
43+ for_ @ Set targetSelections (subscribeToClipboard f')
3744 pureT ()
3845
3946-- | Native interpreter for 'GtkClipboard' that requires the effect to be used within a 'withGtkClipboard' region.
4047interpretGtkClipboard ::
41- Members [GtkMain Display , Log , Embed IO , Final IO ] r =>
48+ Members [Reader X11Config , GtkMain Display , Log , Embed IO , Final IO ] r =>
4249 InterpreterFor (Scoped_ GtkClipboard !! Text ) r
4350interpretGtkClipboard =
4451 interpretWithGtk handleGtkClipboard
0 commit comments