Compare commits
No commits in common. "b4222365c329f8daec0a41eaf18c0db48dee3651" and "dad95ef444cd8599707d20ed436aaf8e38fab25a" have entirely different histories.
b4222365c3
...
dad95ef444
@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required (VERSION 3.0)
|
cmake_minimum_required (VERSION 3.0)
|
||||||
project (nncmpp VERSION 2.0.0 LANGUAGES C)
|
project (nncmpp VERSION 1.2.0 LANGUAGES C)
|
||||||
|
|
||||||
# Moar warnings
|
# Moar warnings
|
||||||
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
|
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
4
NEWS
4
NEWS
@ -1,4 +1,4 @@
|
|||||||
2.0.0 (2022-09-03)
|
Unreleased
|
||||||
|
|
||||||
* Added an optional X11 user interface
|
* Added an optional X11 user interface
|
||||||
|
|
||||||
@ -12,8 +12,6 @@
|
|||||||
|
|
||||||
* Made it possible to adjust the spectrum analyzer's FPS limit
|
* Made it possible to adjust the spectrum analyzer's FPS limit
|
||||||
|
|
||||||
* Moved "Disconnected" and "Connecting..." messages to the status bar
|
|
||||||
|
|
||||||
* Fixed possibility of connection timeouts with PulseAudio integration
|
* Fixed possibility of connection timeouts with PulseAudio integration
|
||||||
|
|
||||||
|
|
||||||
|
69
nncmpp.c
69
nncmpp.c
@ -1836,7 +1836,7 @@ app_layout_song_info (void)
|
|||||||
}
|
}
|
||||||
if (album)
|
if (album)
|
||||||
{
|
{
|
||||||
app_push (&l, g.ui->label (attrs[0], &" from "[!artist]));
|
app_push (&l, g.ui->label (attrs[0], " from " + !artist));
|
||||||
app_push (&l, g.ui->label (attrs[1], album));
|
app_push (&l, g.ui->label (attrs[1], album));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1982,17 +1982,28 @@ app_layout_tabs (void)
|
|||||||
static void
|
static void
|
||||||
app_layout_header (void)
|
app_layout_header (void)
|
||||||
{
|
{
|
||||||
if (g.client.state == MPD_CONNECTED)
|
|
||||||
{
|
{
|
||||||
struct layout lt = {};
|
struct layout l = {};
|
||||||
app_push_fill (<, g.ui->padding (APP_ATTR (NORMAL), 0, 0.125));
|
app_push_fill (&l, g.ui->padding (APP_ATTR (NORMAL), 0, 0.125));
|
||||||
app_flush_layout (<);
|
app_flush_layout (&l);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (g.client.state)
|
||||||
|
{
|
||||||
|
case MPD_CONNECTED:
|
||||||
app_layout_status ();
|
app_layout_status ();
|
||||||
|
break;
|
||||||
|
case MPD_CONNECTING:
|
||||||
|
app_layout_text ("Connecting to MPD...", APP_ATTR (NORMAL));
|
||||||
|
break;
|
||||||
|
case MPD_DISCONNECTED:
|
||||||
|
app_layout_text ("Disconnected", APP_ATTR (NORMAL));
|
||||||
|
}
|
||||||
|
|
||||||
struct layout lb = {};
|
{
|
||||||
app_push_fill (&lb, g.ui->padding (APP_ATTR (NORMAL), 0, 0.125));
|
struct layout l = {};
|
||||||
app_flush_layout (&lb);
|
app_push_fill (&l, g.ui->padding (APP_ATTR (NORMAL), 0, 0.125));
|
||||||
|
app_flush_layout (&l);
|
||||||
}
|
}
|
||||||
|
|
||||||
app_layout_tabs ();
|
app_layout_tabs ();
|
||||||
@ -2262,10 +2273,6 @@ app_layout_statusbar (void)
|
|||||||
}
|
}
|
||||||
else if (g.client.state == MPD_CONNECTED)
|
else if (g.client.state == MPD_CONNECTED)
|
||||||
app_layout_mpd_status ();
|
app_layout_mpd_status ();
|
||||||
else if (g.client.state == MPD_CONNECTING)
|
|
||||||
app_layout_text ("Connecting to MPD...", attrs[0]);
|
|
||||||
else if (g.client.state == MPD_DISCONNECTED)
|
|
||||||
app_layout_text ("Disconnected", attrs[0]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@ -5003,7 +5010,6 @@ app_on_reconnect (void *user_data)
|
|||||||
mpd_queue_reconnect ();
|
mpd_queue_reconnect ();
|
||||||
}
|
}
|
||||||
free (address);
|
free (address);
|
||||||
app_invalidate ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- TUI ---------------------------------------------------------------------
|
// --- TUI ---------------------------------------------------------------------
|
||||||
@ -5566,56 +5572,55 @@ x11_make_label (chtype attrs, const char *label)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// On a 20x20 raster to make it feasible to design on paper.
|
// On a 20x20 raster to make it feasible to design on paper.
|
||||||
#define X11_STOP {INFINITY, INFINITY}
|
static const XPointDouble x11_stop = {INFINITY, INFINITY},
|
||||||
static const XPointDouble
|
|
||||||
x11_icon_previous[] =
|
x11_icon_previous[] =
|
||||||
{
|
{
|
||||||
{10, 0}, {0, 10}, {10, 20}, X11_STOP,
|
{10, 0}, {0, 10}, {10, 20}, x11_stop,
|
||||||
{20, 0}, {10, 10}, {20, 20}, X11_STOP, X11_STOP,
|
{20, 0}, {10, 10}, {20, 20}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_pause[] =
|
x11_icon_pause[] =
|
||||||
{
|
{
|
||||||
{1, 0}, {7, 0}, {7, 20}, {1, 20}, X11_STOP,
|
{1, 0}, {7, 0}, {7, 20}, {1, 20}, x11_stop,
|
||||||
{13, 0}, {19, 0}, {19, 20}, {13, 20}, X11_STOP, X11_STOP,
|
{13, 0}, {19, 0}, {19, 20}, {13, 20}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_play[] =
|
x11_icon_play[] =
|
||||||
{
|
{
|
||||||
{0, 0}, {20, 10}, {0, 20}, X11_STOP, X11_STOP,
|
{0, 0}, {20, 10}, {0, 20}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_stop[] =
|
x11_icon_stop[] =
|
||||||
{
|
{
|
||||||
{0, 0}, {20, 0}, {20, 20}, {0, 20}, X11_STOP, X11_STOP,
|
{0, 0}, {20, 0}, {20, 20}, {0, 20}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_next[] =
|
x11_icon_next[] =
|
||||||
{
|
{
|
||||||
{0, 0}, {10, 10}, {0, 20}, X11_STOP,
|
{0, 0}, {10, 10}, {0, 20}, x11_stop,
|
||||||
{10, 0}, {20, 10}, {10, 20}, X11_STOP, X11_STOP,
|
{10, 0}, {20, 10}, {10, 20}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_repeat[] =
|
x11_icon_repeat[] =
|
||||||
{
|
{
|
||||||
{0, 12}, {0, 6}, {3, 3}, {13, 3}, {13, 0}, {20, 4.5},
|
{0, 12}, {0, 6}, {3, 3}, {13, 3}, {13, 0}, {20, 4.5},
|
||||||
{13, 9}, {13, 6}, {3, 6}, {3, 10}, X11_STOP,
|
{13, 9}, {13, 6}, {3, 6}, {3, 10}, x11_stop,
|
||||||
{0, 15.5}, {7, 11}, {7, 14}, {17, 14}, {17, 10}, {20, 8},
|
{0, 15.5}, {7, 11}, {7, 14}, {17, 14}, {17, 10}, {20, 8},
|
||||||
{20, 14}, {17, 17}, {7, 17}, {7, 20}, X11_STOP, X11_STOP,
|
{20, 14}, {17, 17}, {7, 17}, {7, 20}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_random[] =
|
x11_icon_random[] =
|
||||||
{
|
{
|
||||||
{0, 6}, {0, 3}, {5, 3}, {6, 4.5}, {4, 7.5}, {3, 6}, X11_STOP,
|
{0, 6}, {0, 3}, {5, 3}, {6, 4.5}, {4, 7.5}, {3, 6}, x11_stop,
|
||||||
{9, 15.5}, {11, 12.5}, {12, 14}, {13, 14}, {13, 11}, {20, 15.5},
|
{9, 15.5}, {11, 12.5}, {12, 14}, {13, 14}, {13, 11}, {20, 15.5},
|
||||||
{13, 20}, {13, 17}, {10, 17}, X11_STOP,
|
{13, 20}, {13, 17}, {10, 17}, x11_stop,
|
||||||
{0, 17}, {0, 14}, {3, 14}, {10, 3}, {13, 3}, {13, 0}, {20, 4.5},
|
{0, 17}, {0, 14}, {3, 14}, {10, 3}, {13, 3}, {13, 0}, {20, 4.5},
|
||||||
{13, 9}, {13, 6}, {12, 6}, {5, 17}, X11_STOP, X11_STOP,
|
{13, 9}, {13, 6}, {12, 6}, {5, 17}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_single[] =
|
x11_icon_single[] =
|
||||||
{
|
{
|
||||||
{7, 6}, {7, 4}, {9, 2}, {12, 2}, {12, 15}, {14, 15}, {14, 18},
|
{7, 6}, {7, 4}, {9, 2}, {12, 2}, {12, 15}, {14, 15}, {14, 18},
|
||||||
{7, 18}, {7, 15}, {9, 15}, {9, 6}, X11_STOP, X11_STOP,
|
{7, 18}, {7, 15}, {9, 15}, {9, 6}, x11_stop, x11_stop,
|
||||||
},
|
},
|
||||||
x11_icon_consume[] =
|
x11_icon_consume[] =
|
||||||
{
|
{
|
||||||
{0, 13}, {0, 7}, {4, 3}, {10, 3}, {14, 7}, {5, 10}, {14, 13},
|
{0, 13}, {0, 7}, {4, 3}, {10, 3}, {14, 7}, {5, 10}, {14, 13},
|
||||||
{10, 17}, {4, 17}, X11_STOP,
|
{10, 17}, {4, 17}, x11_stop,
|
||||||
{16, 12}, {16, 8}, {20, 8}, {20, 12}, X11_STOP, X11_STOP,
|
{16, 12}, {16, 8}, {20, 8}, {20, 12}, x11_stop, x11_stop,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const XPointDouble *
|
static const XPointDouble *
|
||||||
@ -6207,7 +6212,6 @@ on_x11_selection_request (XSelectionRequestEvent *ev)
|
|||||||
Atom xa_utf8 = XInternAtom (g.dpy, "UTF8_STRING", False);
|
Atom xa_utf8 = XInternAtom (g.dpy, "UTF8_STRING", False);
|
||||||
Atom targets[] = { xa_targets, XA_STRING, xa_compound_text, xa_utf8 };
|
Atom targets[] = { xa_targets, XA_STRING, xa_compound_text, xa_utf8 };
|
||||||
|
|
||||||
XEvent response = {};
|
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
Atom property = ev->property ? ev->property : ev->target;
|
Atom property = ev->property ? ev->property : ev->target;
|
||||||
if (!g.x11_selection)
|
if (!g.x11_selection)
|
||||||
@ -6242,6 +6246,7 @@ on_x11_selection_request (XSelectionRequestEvent *ev)
|
|||||||
XFree (text.value);
|
XFree (text.value);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
XEvent response = {};
|
||||||
response.xselection.type = SelectionNotify;
|
response.xselection.type = SelectionNotify;
|
||||||
// XXX: We should check it against the event causing XSetSelectionOwner().
|
// XXX: We should check it against the event causing XSetSelectionOwner().
|
||||||
response.xselection.time = ev->time;
|
response.xselection.time = ev->time;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user