add listview/dropdown selection functions (Motif)

Sat, 13 Dec 2025 13:19:29 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 13 Dec 2025 13:19:29 +0100
changeset 1001
7e72b45f0d41
parent 1000
56faeb1772da
child 1002
2cfd243dc8b0

add listview/dropdown selection functions (Motif)

ui/motif/list.c file | annotate | diff | comparison | revisions
ui/motif/list.h file | annotate | diff | comparison | revisions
--- a/ui/motif/list.c	Sat Dec 13 12:52:38 2025 +0100
+++ b/ui/motif/list.c	Sat Dec 13 13:19:29 2025 +0100
@@ -137,17 +137,29 @@
     XtAddCallback(
                 widget,
                 XmNextendedSelectionCallback,
-                (XtCallbackProc)ui_listview_selection,
+                (XtCallbackProc)ui_listview_selection_changed,
                 listview);
     XtAddCallback(
                 widget,
                 XmNsingleSelectionCallback,
-                (XtCallbackProc)ui_listview_selection,
+                (XtCallbackProc)ui_listview_selection_changed,
                 listview);
     
     return widget;
 }
 
+void ui_listview_select(UIWIDGET listview, int index) {
+    XmListDeselectAllItems(listview);
+    XmListSelectPos(listview, index+1, False);
+}
+
+int ui_listview_selection(UIWIDGET listview) {
+    int *selpositions = NULL;
+    int numpos = 0;
+    XtVaGetValues(listview, XmNselectedPositions, &selpositions, XmNselectedPositionCount, &numpos, NULL);
+    return numpos > 0 ? selpositions[0] : -1;
+}
+
 void ui_listview_destroy(Widget w, UiListView *listview, XtPointer d) {
     ui_listselection_free(listview->current_selection);
     if(listview->model) {
@@ -191,7 +203,7 @@
     }
 }
 
-void ui_listview_selection(Widget w, UiListView *listview, XmListCallbackStruct *cb) {
+void ui_listview_selection_changed(Widget w, UiListView *listview, XmListCallbackStruct *cb) {
     listview_save_selection(listview, cb);
     if(listview->onselection) {
         list_callback(listview->obj, listview->current_selection, listview->onselection, listview->onselectiondata);
@@ -273,7 +285,7 @@
 
 /* ------------------------------- Drop Down ------------------------------- */
 
-static void ui_dropdown_selection(
+static void ui_dropdown_selection_changed(
         Widget w,
         UiListView *listview,
         XmComboBoxCallbackStruct *cb)
@@ -371,7 +383,7 @@
     XtAddCallback(
                 widget,
                 XmNselectionCallback,
-                (XtCallbackProc)ui_dropdown_selection,
+                (XtCallbackProc)ui_dropdown_selection_changed,
                 listview);
     
     return widget;
@@ -398,3 +410,12 @@
     }
     return sel;
 }
+
+void ui_dropdown_select(UIWIDGET dropdown, int index) {
+    XtVaSetValues(dropdown, XmNselectedPosition, index, NULL);
+}
+
+int ui_dropdown_selection(UIWIDGET dropdown) {
+    int pos = -1;
+    XtVaGetValues(dropdown, XmNselectedPosition, &pos, NULL);
+}
--- a/ui/motif/list.h	Sat Dec 13 12:52:38 2025 +0100
+++ b/ui/motif/list.h	Sat Dec 13 13:19:29 2025 +0100
@@ -63,7 +63,7 @@
 void ui_listview_destroy(Widget w, UiListView *listview, XtPointer d);
 
 void ui_listview_activate(Widget w, UiListView *listview, XmListCallbackStruct *cb);
-void ui_listview_selection(Widget w, UiListView *listview, XmListCallbackStruct *cb);
+void ui_listview_selection_changed(Widget w, UiListView *listview, XmListCallbackStruct *cb);
 
 void ui_listview_update(UiList *list, int i);
 UiListSelection ui_listview_getselection(UiList *list);

mercurial