summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2019-11-08 14:59:13 +0100
committerCamil Staps2019-11-08 16:06:43 +0100
commit8ed51dca15aca92313350a18107536aeb1d2dd51 (patch)
tree7a4ebaecac2e52fb70b11116463d90af6ce976fe
parentCleanup and add documentation (diff)
Use abstract newtypes to hide pointers
-rw-r--r--src/Gtk/Signal.icl2
-rw-r--r--src/Gtk/Widgets.dcl71
-rw-r--r--src/Gtk/Widgets.icl71
-rw-r--r--src/Gtk/Widgets/Sheet.dcl2
-rw-r--r--src/Gtk/Widgets/Sheet.icl6
5 files changed, 111 insertions, 41 deletions
diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl
index 543c7a2..be019b5 100644
--- a/src/Gtk/Signal.icl
+++ b/src/Gtk/Signal.icl
@@ -49,7 +49,7 @@ installSignalHandler handler widget =
& signal_handlers = 'Data.Map'.put (st.signal_counter+1) handler_internal st.signal_handlers
, signal_counter = st.signal_counter+1
}) >>= \{signal_counter=id} ->
- let (GtkWidget w) = gtkWidget widget in
+ let w = toPtr widget in
toState (g_signal_connect w (signalName handler) (callback handler_internal) id) >>|
pure widget
where
diff --git a/src/Gtk/Widgets.dcl b/src/Gtk/Widgets.dcl
index 957838b..bc1e0af 100644
--- a/src/Gtk/Widgets.dcl
+++ b/src/Gtk/Widgets.dcl
@@ -12,12 +12,6 @@ definition module Gtk.Widgets
* example, all subclasses of `GtkWidget` implement the `gtkWidget` class, and
* common methods of the `GtkWidget` class correspond to overloaded functions
* in Clean.
- *
- * NB: The types of widgets are exported here because (1) newtypes cannot be
- * abstract and (2) they must be able to implement `TC` so that they can be
- * shared (see `Gtk.Shares`). When the compiler supports abstract newtypes and
- * `TC` instantiation of hidden types, the implementation of these types may
- * be removed from the definition module; do not rely on it!
*/
from StdMaybe import :: Maybe
@@ -41,7 +35,7 @@ from Gtk.Types import
* A `GtkAccelGroup` is needed for a `GtkAccelerator`. 'Accelerator' is Gtk's
* term for what most people call shortcuts, i.e. `Ctrl`-`S`, etc.
*/
-:: GtkAccelGroup =: GtkAccelGroup Pointer
+:: GtkAccelGroup (=: GtkAccelGroup Pointer)
newAccelGroup :: !w -> GtkM GtkAccelGroup | gtkWindow w
@@ -54,7 +48,7 @@ newAccelGroup :: !w -> GtkM GtkAccelGroup | gtkWindow w
:: GtkAccelerator = Accelerator !GtkAccelGroup !String ![GdkModifier]
//* An action bar typically holds a number of buttons.
-:: GtkActionBar =: GtkActionBar Pointer
+:: GtkActionBar (=: GtkActionBar Pointer)
instance gtkWidget GtkActionBar
newActionBar :: GtkM GtkActionBar
@@ -63,7 +57,7 @@ newActionBar :: GtkM GtkActionBar
packActionBar :: !GtkActionBar !GtkDirection !w -> GtkM w | gtkWidget w
//* A box holds a number of child widgets in some direction with spacing.
-:: GtkBox =: GtkBox Pointer
+:: GtkBox (=: GtkBox Pointer)
instance gtkWidget GtkBox
instance gtkContainer GtkBox
instance gtkOrientable GtkBox
@@ -79,7 +73,7 @@ packBox :: !GtkBox !GtkDirection !GtkExpand !w -> GtkM w | gtkWidget w
instance tune GtkBox GtkSpacing
-:: GtkButton =: GtkButton Pointer
+:: GtkButton (=: GtkButton Pointer)
instance gtkWidget GtkButton
/**
@@ -90,17 +84,19 @@ instance gtkWidget GtkButton
*/
newButtonFromIconName :: !String -> GtkM GtkButton
-:: GtkContainer =: GtkContainer Pointer
+:: GtkContainer (=: GtkContainer Pointer)
class gtkContainer a :: !a -> GtkContainer
instance gtkWidget GtkContainer
instance gtkContainer GtkContainer
+unsafeToContainer :: !Pointer -> GtkContainer
+
addToContainer :: !c !w -> GtkM w | gtkWidget w & gtkContainer c
//* A dialog is a popup window.
-:: GtkDialog =: GtkDialog Pointer
+:: GtkDialog (=: GtkDialog Pointer)
class gtkDialog a :: !a -> GtkDialog
@@ -142,13 +138,15 @@ newMessageDialog :: !GtkWindow !GtkMessageType !GtkButtonsType !String -> GtkM G
getFileWithDialog :: !GtkWindow !GtkFileChooserAction !(Maybe String) -> GtkM (Maybe FilePath)
//* An entry is a simple text field. Subclasses allow more advanced input.
-:: GtkEntry =: GtkEntry Pointer
+:: GtkEntry (=: GtkEntry Pointer)
class gtkEntry a :: !a -> GtkEntry
instance gtkWidget GtkEntry
instance gtkEntry GtkEntry
+unsafeToEntry :: !Pointer -> GtkEntry
+
newEntry :: GtkM GtkEntry
getText :: !e -> GtkM String | gtkEntry e
@@ -163,7 +161,7 @@ instance tune GtkEntry GtkEntryCompletion
* `GtkListStore` that is filtered with the default match function. It is
* possible to tune the completion method with a `GtkCompletionMode`, however.
*/
-:: GtkEntryCompletion =: GtkEntryCompletion Pointer
+:: GtkEntryCompletion (=: GtkEntryCompletion Pointer)
newEntryCompletion :: GtkM GtkEntryCompletion
@@ -174,7 +172,7 @@ instance tune GtkEntryCompletion GtkListStore
instance tune GtkEntryCompletion GtkCompletionMode
//* A frame holds a single child, with a border and an optional title.
-:: GtkFrame =: GtkFrame Pointer
+:: GtkFrame (=: GtkFrame Pointer)
instance gtkWidget GtkFrame
instance gtkContainer GtkFrame
@@ -187,7 +185,7 @@ framed :: !GtkTitle !(GtkM w) -> GtkM (w, GtkFrame) | gtkWidget w
* A grid is a generalized table, allowing outlining child widget positions to
* each other.
*/
-:: GtkGrid =: GtkGrid Pointer
+:: GtkGrid (=: GtkGrid Pointer)
instance gtkWidget GtkGrid
newGrid :: GtkM GtkGrid
@@ -200,7 +198,7 @@ newGrid :: GtkM GtkGrid
attachGrid :: !GtkGrid !(!Int,!Int) !(!Int,!Int) !w -> GtkM w | gtkWidget w
//* A label is used to display a small or medium amount of text.
-:: GtkLabel =: GtkLabel Pointer
+:: GtkLabel (=: GtkLabel Pointer)
instance gtkWidget GtkLabel
newLabel :: GtkM GtkLabel
@@ -210,7 +208,7 @@ instance tune GtkLabel GtkText
* A list store holds values in a list. It is used in several places, like for
* `GtkEntryCompletion` and `GtkTreeView`.
*/
-:: GtkListStore =: GtkListStore Pointer
+:: GtkListStore (=: GtkListStore Pointer)
//* Create a new list store where rows are lists of values of the given types.
newListStore :: ![GType] -> GtkM GtkListStore
@@ -228,7 +226,7 @@ swapItems :: !Int !Int !GtkListStore -> GtkM Bool
* A menu provides actions to the user. `GtkMenu` by itself is useful to create
* sub-menus (see `setSubMenu`). For a top-level menu, see `GtkMenuBar`.
*/
-:: GtkMenu =: GtkMenu Pointer
+:: GtkMenu (=: GtkMenu Pointer)
instance gtkWidget GtkMenu
newMenu :: GtkM GtkMenu
@@ -237,7 +235,7 @@ newMenu :: GtkM GtkMenu
* A menu bar is usually placed at the top of a window, providing actions to
* the user.
*/
-:: GtkMenuBar =: GtkMenuBar Pointer
+:: GtkMenuBar (=: GtkMenuBar Pointer)
instance gtkWidget GtkMenuBar
newMenuBar :: GtkM GtkMenuBar
@@ -246,7 +244,7 @@ newMenuBar :: GtkM GtkMenuBar
* A menu item is an item in a menu. Attach an `ActivateHandler` or set a
* sub-menu with `setSubMenu`.
*/
-:: GtkMenuItem =: GtkMenuItem Pointer
+:: GtkMenuItem (=: GtkMenuItem Pointer)
class gtkMenuItem a :: !a -> GtkMenuItem
@@ -259,7 +257,7 @@ newMenuItem :: !String -> GtkM GtkMenuItem
setSubMenu :: !mi !GtkMenu -> GtkM GtkMenu | gtkMenuItem mi
//* A check menu item is a menu item with a checkbox.
-:: GtkCheckMenuItem =: GtkCheckMenuItem Pointer
+:: GtkCheckMenuItem (=: GtkCheckMenuItem Pointer)
instance gtkWidget GtkCheckMenuItem
instance gtkMenuItem GtkCheckMenuItem
@@ -272,14 +270,14 @@ isActive :: !GtkCheckMenuItem -> GtkM Bool
setActive :: !Bool !GtkCheckMenuItem -> GtkM GtkCheckMenuItem
//* A separator menu item draws as a simple line to group other items together.
-:: GtkSeparatorMenuItem =: GtkSeparatorMenuItem Pointer
+:: GtkSeparatorMenuItem (=: GtkSeparatorMenuItem Pointer)
instance gtkWidget GtkSeparatorMenuItem
instance gtkMenuItem GtkSeparatorMenuItem
newSeparatorMenuItem :: GtkM GtkSeparatorMenuItem
//* This is an interface for widgets that hold a collection of menu items.
-:: GtkMenuShell =: GtkMenuShell Pointer
+:: GtkMenuShell (=: GtkMenuShell Pointer)
instance gtkWidget GtkMenuShell
class gtkMenuShell a :: !a -> GtkMenuShell
@@ -288,14 +286,14 @@ instance gtkMenuShell GtkMenu, GtkMenuBar, GtkMenuShell
appendToMenuShell :: !s !mi -> GtkM mi | gtkMenuShell s & gtkMenuItem mi
//* This is an interface for widgets of which the children can be oriented.
-:: GtkOrientable =: GtkOrientable Pointer
+:: GtkOrientable (=: GtkOrientable Pointer)
class gtkOrientable a :: !a -> GtkOrientable
instance tune o GtkOrientation | gtkOrientable o
//* A paned holds two children, with a (usually moveable) handle in between.
-:: GtkPaned =: GtkPaned Pointer
+:: GtkPaned (=: GtkPaned Pointer)
instance gtkWidget GtkPaned
instance gtkContainer GtkPaned
@@ -307,7 +305,7 @@ packPane2 :: !GtkPaned !GtkResize !GtkShrink !w -> GtkM w | gtkWidget w
* A scrolled window holds a single child and uses a scrollbar if it does not
* fit in the outer dimensions.
*/
-:: GtkScrolledWindow =: GtkScrolledWindow Pointer
+:: GtkScrolledWindow (=: GtkScrolledWindow Pointer)
instance gtkWidget GtkScrolledWindow
instance gtkContainer GtkScrolledWindow
@@ -317,20 +315,20 @@ instance tune GtkScrolledWindow (GtkScrollbarPolicy, GtkScrollbarPolicy)
where tune :: !(!GtkScrollbarPolicy, !GtkScrollbarPolicy) !GtkScrolledWindow -> GtkM GtkScrolledWindow
//* A search entry is a special entry with a search icon and clear button.
-:: GtkSearchEntry =: GtkSearchEntry Pointer
+:: GtkSearchEntry (=: GtkSearchEntry Pointer)
instance gtkWidget GtkSearchEntry
instance gtkEntry GtkSearchEntry
newSearchEntry :: GtkM GtkSearchEntry
//* A separator is a simple line, allowing for separation between widgets.
-:: GtkSeparator =: GtkSeparator Pointer
+:: GtkSeparator (=: GtkSeparator Pointer)
instance gtkWidget GtkSeparator
newSeparator :: !GtkOrientation -> GtkM GtkSeparator
//* A spinner is an animated widget signaling indefinite progress.
-:: GtkSpinner =: GtkSpinner Pointer
+:: GtkSpinner (=: GtkSpinner Pointer)
instance gtkWidget GtkSpinner
newSpinner :: GtkM GtkSpinner
@@ -338,14 +336,14 @@ startSpinner :: !GtkSpinner -> GtkM GtkSpinner
stopSpinner :: !GtkSpinner -> GtkM GtkSpinner
//* A text buffer is viewed by a `GtkTextView`; updates occur on this type.
-:: GtkTextBuffer =: GtkTextBuffer Pointer
+:: GtkTextBuffer (=: GtkTextBuffer Pointer)
instance tune GtkTextBuffer GtkText
instance tune GtkTextBuffer GtkMarkup
insertAtCursor :: !String !GtkTextBuffer -> GtkM GtkTextBuffer
//* A text view holds a larger amount of text than a `GtkLabel`.
-:: GtkTextView =: GtkTextView Pointer
+:: GtkTextView (=: GtkTextView Pointer)
instance gtkWidget GtkTextView
instance gtkContainer GtkTextView
@@ -355,7 +353,7 @@ getTextBuffer :: !GtkTextView -> GtkTextBuffer
instance tune GtkTextView GtkWrapMode
//* A tree view is a view on a `GtkListStore` with customizable columns.
-:: GtkTreeView =: GtkTreeView Pointer
+:: GtkTreeView (=: GtkTreeView Pointer)
instance gtkWidget GtkTreeView
newTreeView :: !GtkListStore -> GtkM GtkTreeView
@@ -381,12 +379,15 @@ getPathToSelection :: !GtkTreeView -> GtkM (Maybe [Int])
selectPath :: ![Int] !GtkTreeView -> GtkM Bool
//* This is an abstract class; every GUI element is a widget.
-:: GtkWidget =: GtkWidget Pointer
+:: GtkWidget (=: GtkWidget Pointer)
class gtkWidget a :: !a -> GtkWidget
instance gtkWidget GtkWidget
+toPtr :: !w -> Pointer | gtkWidget w
+unsafeToWidget :: !Pointer -> GtkWidget
+
show :: !w -> GtkM w | gtkWidget w
hide :: !w -> GtkM w | gtkWidget w
@@ -412,7 +413,7 @@ instance tune w GtkAccelerator | gtkWidget w
instance tune w GtkSizeRequest | gtkWidget w
//* A window is a top-level element, holding a single child widget.
-:: GtkWindow =: GtkWindow Pointer
+:: GtkWindow (=: GtkWindow Pointer)
class gtkWindow a :: !a -> GtkWindow
diff --git a/src/Gtk/Widgets.icl b/src/Gtk/Widgets.icl
index 702ea0e..41aadab 100644
--- a/src/Gtk/Widgets.icl
+++ b/src/Gtk/Widgets.icl
@@ -15,6 +15,8 @@ import Gtk
import Gdk.Internal
import Gtk.Internal
+:: GtkAccelGroup =: GtkAccelGroup Pointer
+
newAccelGroup :: !w -> GtkM GtkAccelGroup | gtkWindow w
newAccelGroup window =
let (GtkWindow w) = gtkWindow window in
@@ -22,6 +24,8 @@ newAccelGroup window =
toState (gtk_window_add_accel_group w ag) >>|
pure (GtkAccelGroup ag)
+:: GtkActionBar =: GtkActionBar Pointer
+
instance gtkWidget GtkActionBar where gtkWidget (GtkActionBar ab) = GtkWidget ab
newActionBar :: GtkM GtkActionBar
@@ -38,6 +42,8 @@ packActionBar (GtkActionBar b) dir widget =
w) >>|
pure widget
+:: GtkBox =: GtkBox Pointer
+
instance gtkWidget GtkBox where gtkWidget (GtkBox b) = GtkWidget b
instance gtkContainer GtkBox where gtkContainer (GtkBox b) = GtkContainer b
instance gtkOrientable GtkBox where gtkOrientable (GtkBox b) = GtkOrientable b
@@ -60,6 +66,8 @@ where
toState (gtk_box_set_spacing b s) >>|
pure box
+:: GtkButton =: GtkButton Pointer
+
instance gtkWidget GtkButton where gtkWidget (GtkButton b) = GtkWidget b
newButtonFromIconName :: !String -> GtkM GtkButton
@@ -67,9 +75,14 @@ newButtonFromIconName icon =
toStateR (gtk_button_new_from_icon_name icon (toInt ButtonIconSize)) >>= \b ->
show (GtkButton b)
+:: GtkContainer =: GtkContainer Pointer
+
instance gtkWidget GtkContainer where gtkWidget (GtkContainer c) = GtkWidget c
instance gtkContainer GtkContainer where gtkContainer c = c
+unsafeToContainer :: !Pointer -> GtkContainer
+unsafeToContainer c = GtkContainer c
+
addToContainer :: !c !w -> GtkM w | gtkWidget w & gtkContainer c
addToContainer container widget =
let
@@ -79,6 +92,8 @@ addToContainer container widget =
toState (gtk_container_add c w) >>|
pure widget
+:: GtkDialog =: GtkDialog Pointer
+
instance gtkWidget GtkDialog where gtkWidget (GtkDialog d) = GtkWidget d
instance gtkContainer GtkDialog where gtkContainer (GtkDialog d) = GtkContainer d
instance gtkWindow GtkDialog where gtkWindow (GtkDialog d) = GtkWindow d
@@ -146,9 +161,14 @@ where
destroy dialog >>|
pure Nothing
+:: GtkEntry =: GtkEntry Pointer
+
instance gtkWidget GtkEntry where gtkWidget (GtkEntry e) = GtkWidget e
instance gtkEntry GtkEntry where gtkEntry e = e
+unsafeToEntry :: !Pointer -> GtkEntry
+unsafeToEntry e = GtkEntry e
+
newEntry :: GtkM GtkEntry
newEntry =
toStateR gtk_entry_new >>= \e ->
@@ -166,6 +186,8 @@ where
toState (gtk_entry_set_text e text) >>|
pure entry
+:: GtkEntryCompletion =: GtkEntryCompletion Pointer
+
instance tune GtkEntry GtkEntryCompletion
where
tune (GtkEntryCompletion ec) entry=:(GtkEntry e) =
@@ -175,7 +197,6 @@ where
newEntryCompletion :: GtkM GtkEntryCompletion
newEntryCompletion =
toStateR gtk_entry_completion_new >>= \ec ->
- toState (gtk_entry_completion_set_inline_selection ec True) >>| // TODO
pure (GtkEntryCompletion ec)
setTextColumn :: !Int !GtkEntryCompletion -> GtkM GtkEntryCompletion
@@ -199,6 +220,8 @@ where
InlineSelection -> gtk_entry_completion_set_inline_selection ec True
NoInlineSelection -> gtk_entry_completion_set_inline_selection ec False
+:: GtkFrame =: GtkFrame Pointer
+
instance gtkWidget GtkFrame where gtkWidget (GtkFrame f) = GtkWidget f
instance gtkContainer GtkFrame where gtkContainer (GtkFrame f) = GtkContainer f
@@ -217,6 +240,8 @@ framed title widgetf =
widgetf >>= \widget ->
tuple widget <$> newFrame title widget
+:: GtkGrid =: GtkGrid Pointer
+
instance gtkWidget GtkGrid where gtkWidget (GtkGrid g) = GtkWidget g
newGrid :: GtkM GtkGrid
@@ -230,6 +255,8 @@ attachGrid (GtkGrid g) (left,top) (width,height) widget =
toState (gtk_grid_attach g w left top width height) >>|
pure widget
+:: GtkLabel =: GtkLabel Pointer
+
instance gtkWidget GtkLabel where gtkWidget (GtkLabel l) = GtkWidget l
newLabel :: GtkM GtkLabel
@@ -243,6 +270,8 @@ where
toState (gtk_label_set_markup l text) >>|
pure label
+:: GtkListStore =: GtkListStore Pointer
+
newListStore :: ![GType] -> GtkM GtkListStore
newListStore types =
toStateR (gtk_list_store_newv {toInt t \\ t <- types}) >>= \s ->
@@ -279,6 +308,8 @@ swapItems a b (GtkListStore s) =
(toState (gtk_list_store_swap s iter_a iter_b) >>| pure True)
(pure False)
+:: GtkMenu =: GtkMenu Pointer
+
instance gtkWidget GtkMenu where gtkWidget (GtkMenu m) = GtkWidget m
newMenu :: GtkM GtkMenu
@@ -286,6 +317,8 @@ newMenu =
toStateR gtk_menu_new >>= \m ->
show (GtkMenu m)
+:: GtkMenuBar =: GtkMenuBar Pointer
+
instance gtkWidget GtkMenuBar where gtkWidget (GtkMenuBar mb) = GtkWidget mb
newMenuBar :: GtkM GtkMenuBar
@@ -293,6 +326,8 @@ newMenuBar =
toStateR gtk_menu_bar_new >>= \mb ->
show (GtkMenuBar mb)
+:: GtkMenuItem =: GtkMenuItem Pointer
+
instance gtkWidget GtkMenuItem where gtkWidget (GtkMenuItem mi) = GtkWidget mi
instance gtkMenuItem GtkMenuItem where gtkMenuItem mi = mi
@@ -309,6 +344,8 @@ setSubMenu item menu=:(GtkMenu m) =
toState (gtk_menu_item_set_submenu mi m) >>|
pure menu
+:: GtkCheckMenuItem =: GtkCheckMenuItem Pointer
+
instance gtkWidget GtkCheckMenuItem where gtkWidget (GtkCheckMenuItem cmi) = GtkWidget cmi
instance gtkMenuItem GtkCheckMenuItem where gtkMenuItem (GtkCheckMenuItem cmi) = GtkMenuItem cmi
@@ -327,6 +364,8 @@ setActive active item=:(GtkCheckMenuItem cmi) =
toState (gtk_check_menu_item_set_active cmi active) >>|
pure item
+:: GtkSeparatorMenuItem =: GtkSeparatorMenuItem Pointer
+
instance gtkWidget GtkSeparatorMenuItem where gtkWidget (GtkSeparatorMenuItem smi) = GtkWidget smi
instance gtkMenuItem GtkSeparatorMenuItem where gtkMenuItem (GtkSeparatorMenuItem smi) = GtkMenuItem smi
@@ -335,6 +374,8 @@ newSeparatorMenuItem =
toStateR gtk_separator_menu_item_new >>= \smi ->
show (GtkSeparatorMenuItem smi)
+:: GtkMenuShell =: GtkMenuShell Pointer
+
instance gtkWidget GtkMenuShell where gtkWidget (GtkMenuShell ms) = GtkWidget ms
instance gtkMenuShell GtkMenu where gtkMenuShell (GtkMenu m) = GtkMenuShell m
@@ -350,6 +391,8 @@ appendToMenuShell shell item =
toState (gtk_menu_shell_append ms mi) >>|
pure item
+:: GtkOrientable =: GtkOrientable Pointer
+
instance tune o GtkOrientation | gtkOrientable o
where
tune orientation orientable =
@@ -357,6 +400,8 @@ where
toState (gtk_orientable_set_orientation o orientation=:Vertical) >>|
pure orientable
+:: GtkPaned =: GtkPaned Pointer
+
instance gtkWidget GtkPaned where gtkWidget (GtkPaned p) = GtkWidget p
instance gtkContainer GtkPaned where gtkContainer (GtkPaned p) = GtkContainer p
@@ -378,6 +423,8 @@ packPane2 (GtkPaned p) resize shrink widget =
toState (gtk_paned_pack2 p w resize=:Resize shrink=:Shrink) >>|
pure widget
+:: GtkScrolledWindow =: GtkScrolledWindow Pointer
+
instance gtkWidget GtkScrolledWindow where gtkWidget (GtkScrolledWindow sw) = GtkWidget sw
instance gtkContainer GtkScrolledWindow where gtkContainer (GtkScrolledWindow sw) = GtkContainer sw
@@ -393,6 +440,8 @@ where
toState (gtk_scrolled_window_set_policy sw (toInt hp) (toInt vp)) >>|
pure window
+:: GtkSearchEntry =: GtkSearchEntry Pointer
+
instance gtkWidget GtkSearchEntry where gtkWidget (GtkSearchEntry se) = GtkWidget se
instance gtkEntry GtkSearchEntry where gtkEntry (GtkSearchEntry se) = GtkEntry se
@@ -401,6 +450,8 @@ newSearchEntry =
toStateR gtk_search_entry_new >>= \se ->
show (GtkSearchEntry se)
+:: GtkSeparator =: GtkSeparator Pointer
+
instance gtkWidget GtkSeparator where gtkWidget (GtkSeparator s) = GtkWidget s
newSeparator :: !GtkOrientation -> GtkM GtkSeparator
@@ -408,6 +459,8 @@ newSeparator orientation =
toStateR (gtk_separator_new orientation=:Vertical) >>= \s ->
show (GtkSeparator s)
+:: GtkSpinner =: GtkSpinner Pointer
+
instance gtkWidget GtkSpinner where gtkWidget (GtkSpinner s) = GtkWidget s
newSpinner :: GtkM GtkSpinner
@@ -425,6 +478,8 @@ stopSpinner spinner=:(GtkSpinner s) =
toState (gtk_spinner_stop s) >>|
pure spinner
+:: GtkTextBuffer =: GtkTextBuffer Pointer
+
instance tune GtkTextBuffer GtkText
where
tune (Text s) buffer=:(GtkTextBuffer b) =
@@ -446,6 +501,8 @@ insertAtCursor s buffer=:(GtkTextBuffer b) =
toState (gtk_text_buffer_insert_at_cursor b s (size s)) >>|
pure buffer
+:: GtkTextView =: GtkTextView Pointer
+
instance gtkWidget GtkTextView where gtkWidget (GtkTextView tv) = GtkWidget tv
instance gtkContainer GtkTextView where gtkContainer (GtkTextView tv) = GtkContainer tv
@@ -464,6 +521,8 @@ where
toState (gtk_text_view_set_wrap_mode tv (toInt mode)) >>|
pure view
+:: GtkTreeView =: GtkTreeView Pointer
+
instance gtkWidget GtkTreeView where gtkWidget (GtkTreeView tv) = GtkWidget tv
newTreeView :: !GtkListStore -> GtkM GtkTreeView
@@ -512,8 +571,16 @@ selectPath path (GtkTreeView tv) =
(toState (gtk_tree_selection_select_iter selection iter) >>| pure True)
(pure False)
+:: GtkWidget =: GtkWidget Pointer
+
instance gtkWidget GtkWidget where gtkWidget w = w
+toPtr :: !w -> Pointer | gtkWidget w
+toPtr widget = let (GtkWidget w) = gtkWidget widget in w
+
+unsafeToWidget :: !Pointer -> GtkWidget
+unsafeToWidget w = GtkWidget w
+
show :: !w -> GtkM w | gtkWidget w
show widget =
let (GtkWidget w) = gtkWidget widget in
@@ -605,6 +672,8 @@ where
toState (gtk_widget_set_size_request w width height) >>|
pure widget
+:: GtkWindow =: GtkWindow Pointer
+
instance gtkWidget GtkWindow where gtkWidget (GtkWindow w) = GtkWidget w
instance gtkContainer GtkWindow where gtkContainer (GtkWindow w) = GtkContainer w
instance gtkWindow GtkWindow where gtkWindow w = w
diff --git a/src/Gtk/Widgets/Sheet.dcl b/src/Gtk/Widgets/Sheet.dcl
index 0f365d2..5a4191d 100644
--- a/src/Gtk/Widgets/Sheet.dcl
+++ b/src/Gtk/Widgets/Sheet.dcl
@@ -22,7 +22,7 @@ from Gtk.Widgets import
import Gtk.Widgets.Sheet.Signal
-:: GtkSheet =: GtkSheet Pointer
+:: GtkSheet (=: GtkSheet Pointer)
instance gtkWidget GtkSheet
instance gtkContainer GtkSheet
diff --git a/src/Gtk/Widgets/Sheet.icl b/src/Gtk/Widgets/Sheet.icl
index 36d0b4d..c28816f 100644
--- a/src/Gtk/Widgets/Sheet.icl
+++ b/src/Gtk/Widgets/Sheet.icl
@@ -11,8 +11,8 @@ import Gtk.Widgets.Sheet.Internal
:: GtkSheet =: GtkSheet Pointer
-instance gtkWidget GtkSheet where gtkWidget (GtkSheet s) = GtkWidget s
-instance gtkContainer GtkSheet where gtkContainer (GtkSheet s) = GtkContainer s
+instance gtkWidget GtkSheet where gtkWidget (GtkSheet s) = unsafeToWidget s
+instance gtkContainer GtkSheet where gtkContainer (GtkSheet s) = unsafeToContainer s
newSheet :: !Int !Int !String -> GtkM GtkSheet
newSheet nrows ncols title =
@@ -105,7 +105,7 @@ setActiveCell row col sheet=:(GtkSheet s) =
getEntry :: !GtkSheet -> GtkM GtkEntry
getEntry (GtkSheet s) =
toStateR (gtk_sheet_get_entry s) >>= \e ->
- pure (GtkEntry e)
+ pure (unsafeToEntry e)
instance tune GtkSheet GtkSheetColumnResizability
where