mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	xdg/wayland-shell: handle set_app_id and set_class events
This commit is contained in:
		
							parent
							
								
									e140682528
								
							
						
					
					
						commit
						e2ae63a7cf
					
				
					 5 changed files with 38 additions and 6 deletions
				
			
		| 
						 | 
					@ -259,6 +259,7 @@ struct view {
 | 
				
			||||||
	struct wl_listener request_maximize;
 | 
						struct wl_listener request_maximize;
 | 
				
			||||||
	struct wl_listener request_fullscreen;
 | 
						struct wl_listener request_fullscreen;
 | 
				
			||||||
	struct wl_listener set_title;
 | 
						struct wl_listener set_title;
 | 
				
			||||||
 | 
						struct wl_listener set_app_id;		/* class on xwayland */
 | 
				
			||||||
	struct wl_listener new_popup;		/* xdg-shell only */
 | 
						struct wl_listener new_popup;		/* xdg-shell only */
 | 
				
			||||||
	struct wl_listener new_subsurface;	/* xdg-shell only */
 | 
						struct wl_listener new_subsurface;	/* xdg-shell only */
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -337,6 +338,7 @@ void view_for_each_popup_surface(struct view *view,
 | 
				
			||||||
	wlr_surface_iterator_func_t iterator, void *data);
 | 
						wlr_surface_iterator_func_t iterator, void *data);
 | 
				
			||||||
void view_move_to_edge(struct view *view, const char *direction);
 | 
					void view_move_to_edge(struct view *view, const char *direction);
 | 
				
			||||||
void view_update_title(struct view *view);
 | 
					void view_update_title(struct view *view);
 | 
				
			||||||
 | 
					void view_update_app_id(struct view *view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void view_impl_map(struct view *view);
 | 
					void view_impl_map(struct view *view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,13 +10,8 @@ view_impl_map(struct view *view)
 | 
				
			||||||
	desktop_focus_and_activate_view(&view->server->seat, view);
 | 
						desktop_focus_and_activate_view(&view->server->seat, view);
 | 
				
			||||||
	desktop_raise_view(view);
 | 
						desktop_raise_view(view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const char *app_id = view->impl->get_string_prop(view, "app_id");
 | 
					 | 
				
			||||||
	if (app_id) {
 | 
					 | 
				
			||||||
		wlr_foreign_toplevel_handle_v1_set_app_id(
 | 
					 | 
				
			||||||
			view->toplevel_handle, app_id);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	view_update_title(view);
 | 
						view_update_title(view);
 | 
				
			||||||
 | 
						view_update_app_id(view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	damage_all_outputs(view->server);
 | 
						damage_all_outputs(view->server);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								src/view.c
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								src/view.c
									
										
									
									
									
								
							| 
						 | 
					@ -242,3 +242,14 @@ view_update_title(struct view *view)
 | 
				
			||||||
	ssd_update_title(view);
 | 
						ssd_update_title(view);
 | 
				
			||||||
	wlr_foreign_toplevel_handle_v1_set_title(view->toplevel_handle, title);
 | 
						wlr_foreign_toplevel_handle_v1_set_title(view->toplevel_handle, title);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					view_update_app_id(struct view *view)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						const char *app_id = view->impl->get_string_prop(view, "app_id");
 | 
				
			||||||
 | 
						if (!view->toplevel_handle || !app_id) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						wlr_foreign_toplevel_handle_v1_set_app_id(
 | 
				
			||||||
 | 
							view->toplevel_handle, app_id);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								src/xdg.c
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/xdg.c
									
										
									
									
									
								
							| 
						 | 
					@ -160,6 +160,14 @@ handle_set_title(struct wl_listener *listener, void *data)
 | 
				
			||||||
	view_update_title(view);
 | 
						view_update_title(view);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_set_app_id(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct view *view = wl_container_of(listener, view, set_app_id);
 | 
				
			||||||
 | 
						assert(view);
 | 
				
			||||||
 | 
						view_update_app_id(view);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
xdg_toplevel_view_configure(struct view *view, struct wlr_box geo)
 | 
					xdg_toplevel_view_configure(struct view *view, struct wlr_box geo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -408,8 +416,12 @@ xdg_surface_new(struct wl_listener *listener, void *data)
 | 
				
			||||||
	view->request_fullscreen.notify = handle_request_fullscreen;
 | 
						view->request_fullscreen.notify = handle_request_fullscreen;
 | 
				
			||||||
	wl_signal_add(&toplevel->events.request_fullscreen,
 | 
						wl_signal_add(&toplevel->events.request_fullscreen,
 | 
				
			||||||
		&view->request_fullscreen);
 | 
							&view->request_fullscreen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	view->set_title.notify = handle_set_title;
 | 
						view->set_title.notify = handle_set_title;
 | 
				
			||||||
	wl_signal_add(&toplevel->events.set_title, &view->set_title);
 | 
						wl_signal_add(&toplevel->events.set_title, &view->set_title);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						view->set_app_id.notify = handle_set_app_id;
 | 
				
			||||||
 | 
						wl_signal_add(&toplevel->events.set_app_id, &view->set_app_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_insert(&server->views, &view->link);
 | 
						wl_list_insert(&server->views, &view->link);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,6 +93,14 @@ handle_set_title(struct wl_listener *listener, void *data)
 | 
				
			||||||
	view_update_title(view);
 | 
						view_update_title(view);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_set_class(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct view *view = wl_container_of(listener, view, set_app_id);
 | 
				
			||||||
 | 
						assert(view);
 | 
				
			||||||
 | 
						view_update_app_id(view);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
configure(struct view *view, struct wlr_box geo)
 | 
					configure(struct view *view, struct wlr_box geo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -300,8 +308,12 @@ xwayland_surface_new(struct wl_listener *listener, void *data)
 | 
				
			||||||
	view->request_fullscreen.notify = handle_request_fullscreen;
 | 
						view->request_fullscreen.notify = handle_request_fullscreen;
 | 
				
			||||||
	wl_signal_add(&xsurface->events.request_fullscreen,
 | 
						wl_signal_add(&xsurface->events.request_fullscreen,
 | 
				
			||||||
		&view->request_fullscreen);
 | 
							&view->request_fullscreen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	view->set_title.notify = handle_set_title;
 | 
						view->set_title.notify = handle_set_title;
 | 
				
			||||||
	wl_signal_add(&xsurface->events.set_title, &view->set_title);
 | 
						wl_signal_add(&xsurface->events.set_title, &view->set_title);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						view->set_app_id.notify = handle_set_class;
 | 
				
			||||||
 | 
						wl_signal_add(&xsurface->events.set_class, &view->set_app_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_insert(&view->server->views, &view->link);
 | 
						wl_list_insert(&view->server->views, &view->link);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue