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 210da85a16488d4bbcde67b2e2b3f0ee44cd12a0
Author: Swagtoy <m...@ow.swag.toys>
AuthorDate: Mon Jun 30 22:50:03 2025 -0400

    Multimonitor
---
 src/greeter.c   | 187 +++++++++++++++++++++++++++++++++++++++-----------------
 src/meson.build |   1 +
 2 files changed, 131 insertions(+), 57 deletions(-)

diff --git a/src/greeter.c b/src/greeter.c
index a242865..7280181 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -4,6 +4,7 @@
 #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"
@@ -14,12 +15,20 @@
 #include <stdbool.h>
 #include <X11/extensions/Xrandr.h>
 
+#define INSIDE(x, y, xx, yy, ww, hh) \
+   (((x) < ((xx) + (ww))) && ((y) < ((yy) + (hh))) && \
+       ((x) >= (xx)) && ((y) >= (yy)))
+
+#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 LightDMGreeter *greeter;
+static GList *users = NULL;
 static Evas_Object *root;
 static Evas_Object *win;
 static Evas_Object *sessions;
@@ -30,6 +39,9 @@ static Evas_Object *notify;
 static gchar const *curr_key = "enlightenment";
 static GMainLoop *loop;
 static LightDMPromptType type = LIGHTDM_PROMPT_TYPE_QUESTION;
+static XRRMonitorInfo *monitors = NULL;
+static int primary_idx = 0,
+           monitors_len = 0;
 
 Evas_Object*
 E_SHOW(Evas_Object *obj)
@@ -173,6 +185,7 @@ autologin_timer_expired_cb(LightDMGreeter *ldm, const gchar *text, LightDMPrompt
 static void
 sigterm_cb(int catch)
 {
+	XRRFreeMonitors(monitors);
 	gtk_main_quit();
 	//elm_shutdown();
 	elm_exit();
@@ -191,39 +204,50 @@ build_login_prompt(Evas_Object *parent)
 	elm_box_padding_set(box, 5, 5);
 	
 	o = E_SHOW(elm_label_add(this));
-	elm_object_text_set(o, "Username:");
-	elm_table_pack(this, o, 0, 0, 1, 1);
+	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));
-	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_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)
 	
 	o = E_SHOW(elm_label_add(this));
-	elm_object_text_set(o, "Password:");
-	elm_table_pack(this, o, 0, 1, 1, 1);
+	E_BEGIN(o)
+		elm_object_text_set(o, "Password:");
+		elm_table_pack(this, o, 0, 1, 1, 1);
+	E_END(o)
 	
 	password_in = E_SHOW(elm_entry_add(this));
-	elm_entry_single_line_set(password_in, EINA_TRUE);
-	elm_entry_password_set(password_in, EINA_TRUE);
-	elm_entry_scrollable_set(password_in, EINA_TRUE);
-	evas_object_size_hint_weight_set(password_in, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-	evas_object_size_hint_align_set(password_in, EVAS_HINT_FILL, EVAS_HINT_FILL);
-	elm_table_pack(this, password_in, 1, 1, 50, 1);
+	E_BEGIN(password_in)
+		elm_entry_single_line_set(password_in, EINA_TRUE);
+		elm_entry_password_set(password_in, EINA_TRUE);
+		elm_entry_scrollable_set(password_in, EINA_TRUE);
+		evas_object_size_hint_weight_set(password_in, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+		evas_object_size_hint_align_set(password_in, EVAS_HINT_FILL, EVAS_HINT_FILL);
+		elm_table_pack(this, password_in, 1, 1, 50, 1);
+	E_END()
 	
 	elm_box_pack_end(box, this);
 	
 	o = E_SHOW(elm_button_add(this));
-	elm_object_text_set(o, "Login");
-	evas_object_smart_callback_add(o, "clicked", login_cb, NULL);
-	elm_box_pack_end(box, o);
-	
-	elm_object_text_set(frame, "Login");
-	//evas_object_size_hint_weight_set(this, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-	//evas_object_size_hint_align_set(this, EVAS_HINT_FILL, EVAS_HINT_FILL);
-	elm_object_content_set(frame, box);
+	E_BEGIN(o)
+		elm_object_text_set(o, "Login");
+		evas_object_smart_callback_add(o, "clicked", login_cb, NULL);
+		elm_box_pack_end(box, o);
+
+		elm_object_text_set(frame, "Login");
+		//evas_object_size_hint_weight_set(this, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+		//evas_object_size_hint_align_set(this, EVAS_HINT_FILL, EVAS_HINT_FILL);
+		elm_object_content_set(frame, box);
+	E_END(o)
 	
 	
 	return frame;
@@ -284,6 +308,50 @@ rootless_x_randr_screen_primary_output_current_size_get(Ecore_X_Window root, int
      }
 }
 
+static void
+read_monitor_bounds()
+{
+	Ecore_X_Display *disp = ecore_x_display_get();
+	int count = ecore_x_screen_count_get();
+	Ecore_X_Window xwindow = elm_win_xwindow_get(win);
+
+	if (monitors)
+		XRRFreeMonitors(monitors);
+	monitors = XRRGetMonitors(disp, xwindow, False, &monitors_len);
+	for (int i = 0; i < monitors_len; ++i)
+	{
+		XRRMonitorInfo mon = monitors[i];
+		if (mon.primary == 1)
+			primary_idx = i;
+		printf("Monitor %s\n"
+		       "\tx: %d\n"
+			   "\ty: %d\n"
+			   "\tw: %d\n"
+			   "\th: %d\n",
+			   XGetAtomName(disp, mon.name), mon.x, mon.y, mon.width, mon.height);
+	}
+}
+
+static void
+mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *_ev)
+{
+	Evas_Event_Mouse_Move *ev = _ev;
+	Evas_Coord x = ev->cur.canvas.x,
+	           y = ev->cur.canvas.y;
+	
+	//evas_object_move(root, x, y);
+	for (int i = 0; i < monitors_len; ++i)
+	{
+		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);
+		}
+	}
+}
+
 int
 main(int argc, char **argv)
 {
@@ -308,58 +376,63 @@ main(int argc, char **argv)
 	
 	//lightdm_greeter_authenticate(greeter, NULL, NULL);
 	
-	win =
-		E_SHOW(elm_win_util_standard_add("lightdm-efl-greeter-root", "Lightdm"));
+	win = E_SHOW(elm_win_util_standard_add("lightdm-efl-greeter-root", "Lightdm"));
 	elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
 	elm_win_autodel_set(win, EINA_TRUE);
 	
+	/* snprintf(buf, sizeof(buf), "%s/objects/cursors.edj", elm_app_data_dir_get()); */
+	/* elm_theme_extension_add(NULL, buf); */
 	
-	snprintf(buf, sizeof(buf), "%s/objects/cursors.edj", elm_app_data_dir_get());
-	elm_theme_extension_add(NULL, buf);
 	elm_config_cursor_engine_only_set(EINA_TRUE);
 	elm_object_cursor_set(win, "left_ptr");
-	//elm_object_cursor_style_set(win, "hand1");
 	
 	root = E_SHOW(elm_table_add(win));
-	//elm_box_padding_set(root, 12, 12);
-	//elm_box_homogeneous_set(root, EINA_FALSE);
 	evas_object_size_hint_weight_set(root, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 	
 	ob = E_SHOW(elm_box_add(win));
-	elm_box_horizontal_set(ob, EINA_TRUE);
-	evas_object_size_hint_align_set(ob, 0.0, 0.0);
-	evas_object_size_hint_weight_set(ob, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
-	elm_box_padding_set(ob, 5, 0);
-	o = E_SHOW(elm_label_add(win));
-	// XXX: Bad
-	elm_object_text_set(o, "  Session:");
-	elm_box_pack_end(ob, o);
+	E_BEGIN(ob)
+		elm_box_horizontal_set(ob, EINA_TRUE);
+		evas_object_size_hint_align_set(ob, 0.0, 0.0);
+		evas_object_size_hint_weight_set(ob, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+		elm_box_padding_set(ob, 5, 0);
+		o = E_SHOW(elm_label_add(win));
+		// XXX: Bad
+		elm_object_text_set(o, "  Session:");
+		elm_box_pack_end(ob, o);
+	E_END()
 	
 	sessions = E_SHOW(elm_hoversel_add(win));
-	elm_hoversel_auto_update_set(sessions, EINA_TRUE);
-	elm_object_text_set(sessions, "             ");
-	GList *sessions_list = lightdm_get_sessions();
-	for (GList *elem = sessions_list; elem; elem = elem->next)
-	{
-		LightDMSession *session = elem->data;
-		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_BEGIN(sessions)
+		elm_hoversel_auto_update_set(sessions, EINA_TRUE);
+		elm_object_text_set(sessions, "             ");
+		GList *sessions_list = lightdm_get_sessions();
+		for (GList *elem = sessions_list; elem; elem = elem->next)
+		{
+			LightDMSession *session = elem->data;
+			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()
 	
 	// 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);
+	Ecore_X_Screen *xscreen = ecore_x_screen_get(0);
 	
-	if (!no_lightdm)
-		rootless_x_randr_screen_primary_output_current_size_get(xwindow, &w, &h, NULL, NULL, NULL);
+	if (!no_lightdm || true)
+		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_event_callback_add(win, EVAS_CALLBACK_MOUSE_MOVE, mouse_move_cb, win);
 	
 	// TODO maybe not this?
 	//elm_win_resize_object_add(win, root);
diff --git a/src/meson.build b/src/meson.build
index a5044f4..4ab3e83 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -9,6 +9,7 @@ executable(meson.project_name(),
 		dependency('ecore', version: '>= 1.26.0'),
 		dependency('ecore-x', version: '>= 1.26.0'),
 		dependency('xrandr'),
+		dependency('x11'),
 		meson.get_compiler('c').find_library('m')
 	],
 	install: true

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to