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.

Reply via email to