This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository lightdm-efl-greeter.
View the commit online.
commit 6e0a8426692cc2091945c0d04bb48d6dc995994b
Author: Swagtoy <m...@ow.swag.toys>
AuthorDate: Tue Jul 1 00:16:40 2025 -0400
Usernames list, backgrounds
---
src/greeter.c | 130 ++++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 103 insertions(+), 27 deletions(-)
diff --git a/src/greeter.c b/src/greeter.c
index 7280181..dc4a36c 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -2,12 +2,10 @@
#include <Elementary.h>
#include <Ecore_X.h>
#include <signal.h>
-#include "Ecore_Common.h"
-#include "Evas.h"
-#include "elm_list_eo.legacy.h"
#include "gdk/gdk.h"
#include "gio/gio.h"
#include "glib.h"
+#include "lightdm/user.h"
#include <glib-unix.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
@@ -22,17 +20,20 @@
#define E_BEGIN(noop) ;
#define E_END(noop) ;
-static void
-show_message_cb(LightDMGreeter *ldm, const gchar *text, LightDMPromptType type);
-static void
-create_notification(const gchar *text);
+static void show_message_cb(LightDMGreeter *ldm, const gchar *text, LightDMPromptType type);
+static void create_notification(const gchar *text);
+static Evas_Object* build_login_prompt(Evas_Object *parent);
static LightDMGreeter *greeter;
+static LightDMUser *curr_user;
static GList *users = NULL;
static Evas_Object *root;
static Evas_Object *win;
static Evas_Object *sessions;
static Evas_Object *username_in;
+static Evas_Object *user_icon;
+static Evas_Object *background;
+static bool show_username_entry = false;
static Evas_Object *password_in;
static bool no_lightdm = false;
static Evas_Object *notify;
@@ -95,6 +96,14 @@ check:
goto check;
}
+static void
+user_set_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ LightDMUser *user = data;
+ printf("User %s (%s) selected\n", lightdm_user_get_display_name(user), lightdm_user_get_name(user));
+ curr_user = user;
+}
+
static void
session_set_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
@@ -176,6 +185,55 @@ authentication_complete_cb(LightDMGreeter *ldm, const gchar *text, LightDMPrompt
lightdm_greeter_authenticate(ldm, NULL, NULL);
}
+void
+build_username_entry(Evas_Object *this)
+{
+ if (users && !show_username_entry)
+ {
+ username_in = E_SHOW(elm_hoversel_add(this));
+ elm_hoversel_auto_update_set(username_in, EINA_TRUE);
+ if (users->data != NULL)
+ {
+ LightDMUser *luser = curr_user = users->data;
+ elm_object_text_set(username_in, lightdm_user_get_display_name(luser));
+ }
+ for (GList *elem = users; elem; elem = elem->next)
+ {
+ LightDMUser *luser = elem->data;
+ elm_hoversel_item_add(username_in,
+ lightdm_user_get_name(luser),
+ NULL,
+ ELM_ICON_NONE,
+ user_set_cb,
+ luser);
+ }
+ }
+ else {
+ username_in = E_SHOW(elm_entry_add(this));
+ elm_entry_single_line_set(username_in, EINA_TRUE);
+ elm_entry_scrollable_set(username_in, EINA_TRUE);
+ }
+}
+
+void
+username_in_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *_ev)
+{
+ Evas_Event_Mouse_Down *ev = _ev;
+ switch (ev->button)
+ {
+ case 1:
+ break;
+ default:
+ show_username_entry = !show_username_entry;
+
+ Evas_Object *o = E_SHOW(build_login_prompt(root));
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_del(elm_table_child_get(root, 0, 1));
+ elm_table_pack(root, o, 0, 1, 1, 1);
+ break;
+ }
+}
+
static void
autologin_timer_expired_cb(LightDMGreeter *ldm, const gchar *text, LightDMPromptType type)
{
@@ -203,21 +261,32 @@ build_login_prompt(Evas_Object *parent)
elm_table_padding_set(this, 5, 1);
elm_box_padding_set(box, 5, 5);
+
+ if (!users)
+ users = lightdm_user_list_get_users(lightdm_user_list_get_instance());
+
+ build_username_entry(this);
+
+ // TODO Don't do this here...
+ if (curr_user)
+ {
+ char const *bg = lightdm_user_get_background(curr_user);
+ //if (!bg)
+ // bg = "/usr/local/share/enlightenment/data/backgrounds/Bamboo.edj";
+ if (bg)
+ elm_bg_file_set(background, bg, "e/desktop/background");
+ }
+
o = E_SHOW(elm_label_add(this));
E_BEGIN(o)
elm_object_text_set(o, "Username:");
elm_table_pack(this, o, 0, 0, 1, 1);
E_END()
-
- //users = lightdm_user_list_get_users(lightdm_user_list_get_instance());
- username_in = E_SHOW(elm_entry_add(this));
- E_BEGIN(username_in)
- elm_entry_single_line_set(username_in, EINA_TRUE);
- elm_entry_scrollable_set(username_in, EINA_TRUE);
- evas_object_size_hint_weight_set(username_in, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(username_in, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_table_pack(this, username_in, 1, 0, 50, 1);
- E_END(username_in)
+
+ evas_object_event_callback_add(username_in, EVAS_CALLBACK_MOUSE_DOWN, username_in_down_cb, username_in);
+ evas_object_size_hint_weight_set(username_in, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(username_in, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_table_pack(this, username_in, 1, 0, 50, 1);
o = E_SHOW(elm_label_add(this));
E_BEGIN(o)
@@ -345,7 +414,6 @@ mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *o EINA_U
XRRMonitorInfo *mon = monitors + i;
if (INSIDE(x, y, mon->x, mon->y, mon->width, mon->height))
{
- printf("Inside %s\n", XGetAtomName(ecore_x_display_get(), mon->name));
evas_object_move(root, mon->x, mon->y);
evas_object_resize(root, mon->width, mon->height);
}
@@ -356,7 +424,7 @@ int
main(int argc, char **argv)
{
Evas_Object *o, *ob;
- char buf[PATH_MAX];
+ char buf[2048];
// HACK: No way to set this without setenv
setenv("ELM_AUTO_NORENDER_WITHDRAWN", "0", 1);
_elm_startup_time = ecore_time_unix_get();
@@ -380,6 +448,9 @@ main(int argc, char **argv)
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_win_autodel_set(win, EINA_TRUE);
+ background = ""
+ elm_bg_option_set(background, ELM_BG_OPTION_SCALE);
+
/* snprintf(buf, sizeof(buf), "%s/objects/cursors.edj", elm_app_data_dir_get()); */
/* elm_theme_extension_add(NULL, buf); */
@@ -409,19 +480,23 @@ main(int argc, char **argv)
for (GList *elem = sessions_list; elem; elem = elem->next)
{
LightDMSession *session = elem->data;
+ //snprintf(buf, 2048, "%s (%s)", lightdm_session_get_name(session), lightdm_session_get_session_type(session));
elm_hoversel_item_add(sessions, lightdm_session_get_name(session), NULL, ELM_ICON_NONE, session_set_cb, session);
}
elm_box_pack_end(ob, sessions);
elm_table_pack(root, ob, 0, 0, 1, 1);
-
- ob = E_SHOW(elm_box_add(win));
- evas_object_size_hint_weight_set(ob, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(ob, EVAS_HINT_FILL, EVAS_HINT_FILL);
- o = E_SHOW(build_login_prompt(root));
- evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_table_pack(root, o, 0, 1, 1, 1);
E_END()
+ ob = E_SHOW(elm_box_add(win));
+ evas_object_size_hint_weight_set(ob, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(ob, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ o = E_SHOW(build_login_prompt(root));
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_table_pack(root, o, 0, 1, 1, 1);
+
+ //evas_object_layer_set(background, 1);
+ //evas_object_layer_set(root, 2);
+
// XXX: Should get monitor size, look at x_randr functions later, but this is easier for me
int w = ELM_SCALE_SIZE(800), h = ELM_SCALE_SIZE(600);
Ecore_X_Window xwindow = elm_win_xwindow_get(win);
@@ -431,7 +506,8 @@ main(int argc, char **argv)
ecore_x_screen_size_get(xscreen, &w, &h);
//rootless_x_randr_screen_primary_output_current_size_get(xwindow, &w, &h, NULL, NULL, NULL);
read_monitor_bounds();
-
+
+ evas_object_resize(background, w, h);
evas_object_event_callback_add(win, EVAS_CALLBACK_MOUSE_MOVE, mouse_move_cb, win);
// TODO maybe not this?
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.