X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=mmenu.c;h=4e4283ca7bb5c555bc212303aede7819ec07ad05;hb=504a7161d0c5b7d96993125badb80bdfe4669057;hp=e5860bd47b1bb0668b61c8fe041c7b5c7a8d78f8;hpb=8918b52f56fd5275314bd73c5d94fcda696b894c;p=mmenu.git diff --git a/mmenu.c b/mmenu.c index e5860bd..4e4283c 100644 --- a/mmenu.c +++ b/mmenu.c @@ -23,7 +23,6 @@ memfail(void) exit(4); } - static size_t memback(void *contents, size_t size, size_t nmemb, void *userp) { @@ -67,7 +66,7 @@ getmenu(char *date) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); - printf("INFO: Fetching wepage\n"); + printf("INFO: Fetching webpage\n"); res = curl_easy_perform(curl); free(url); @@ -102,6 +101,8 @@ getmenu(char *date) if (c == '>') intag = false; } + free(chunk.memory); + // Strip empty newlines char *nl = (char *) calloc(1, sizeof(char)); if (!nl) memfail(); @@ -109,26 +110,33 @@ getmenu(char *date) j = 1; for (int i = 0; outp[i]; i++) { j++; - if (outp[i] == '\n' && outp[i+1] == '\n') i+=3; - nl = (char *) realloc(nl, j); - if (!nl) memfail(); - next[0] = outp[i+1]; - strncat(nl, next, 2); + if (!((outp[i] == '\n' && outp[i+1] == '\n') || + (outp[i] == ' ' && outp[i+1] == ' '))) { + nl = (char *) realloc(nl, j); + if (!nl) memfail(); + next[0] = outp[i+1]; + strncat(nl, next, 2); + } } + free(outp); return nl; } void -dayback(Widget w, XtPointer client_data, XtPointer call_data) +dayback(Widget unused, XtPointer client_data, XtPointer call_data) { - Widget text_w = (Widget) client_data; + (void)unused; + Widget disp = (Widget) client_data; XmListCallbackStruct *list_cbs = (XmListCallbackStruct *) call_data; char *nl = getmenu(days[list_cbs->item_position - 1]); - XmTextReplace((Widget) text_w, 0, strlen(XmTextGetString(text_w)), nl); + char *oldtext = XmTextGetString(disp) ; + XmTextReplace((Widget) disp, 0, strlen(oldtext), nl); + free(nl); + free(oldtext); } -/* Convert an array of string to an array of compound strings */ +// Convert an array of string to an array of compound strings XmStringTable ArgvToXmStringTable (int argc, char **argv) { XmStringTable new = @@ -146,7 +154,7 @@ int main(int argc, char *argv[]) { // Initialize motif - Widget toplevel, rowcol, w, text_w; + Widget toplevel, rowcol, daysel, disp; XmStringTable strs; XtAppContext app; Arg args[5]; @@ -158,6 +166,7 @@ main(int argc, char *argv[]) int n = 0; XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; rowcol = XmCreateRowColumn(toplevel, "rowcol", args, n); + XtManageChild(rowcol); // Create text widget to display menu n = 0; @@ -165,20 +174,19 @@ main(int argc, char *argv[]) XtSetArg(args[n], XmNvalue, nl); n++; XtSetArg(args[n], XmNeditable, False); n++; XtSetArg(args[n], XmNcolumns, 80); n++; + XtSetArg(args[n], XmNrows, 20); n++; + XtSetArg (args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; XtSetArg(args[n], XmNcursorPositionVisible, False); n++; - text_w = XmCreateScrolledText(rowcol, "text", args, n); - XtManageChild(text_w); + disp = XmCreateScrolledText(rowcol, "text", args, n); + XtManageChild(disp); + free(nl); // Create day selector - strs = ArgvToXmStringTable (XtNumber (days), days); - w = XmCreateScrolledList(rowcol, "list", NULL, 0); - XtVaSetValues(w, - XmNitems, strs, - XmNitemCount, XtNumber (days), - NULL); - XtAddCallback(w, XmNbrowseSelectionCallback, dayback, (XtPointer) text_w); - XtManageChild(w); - XtManageChild(rowcol); + strs = ArgvToXmStringTable (XtNumber(days), days); + daysel = XmCreateScrolledList(rowcol, "list", NULL, 0); + XtVaSetValues(daysel, XmNitems, strs, XmNitemCount, XtNumber(days), NULL); + XtAddCallback(daysel, XmNbrowseSelectionCallback, dayback, (XtPointer) disp); + XtManageChild(daysel); // Display everything XtRealizeWidget(toplevel);