You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
AbsListView: add fallback layout params
If the child doesn't specify layout params, use width=MATCH_PARENT and height=WRAP_CONTENT. Same as AOSPs defaults
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "WrapperWidget.h"
|
#include "WrapperWidget.h"
|
||||||
#include "AdapterView.h"
|
#include "AdapterView.h"
|
||||||
|
#include "../views/AndroidLayout.h"
|
||||||
|
|
||||||
#include "../generated_headers/android_widget_AbsListView.h"
|
#include "../generated_headers/android_widget_AbsListView.h"
|
||||||
|
|
||||||
@@ -73,14 +74,20 @@ static void bind_listitem_cb(GtkListItemFactory *factory, GtkListItem *list_item
|
|||||||
jmethodID getView = _METHOD(_CLASS(model->adapter), "getView", "(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;");
|
jmethodID getView = _METHOD(_CLASS(model->adapter), "getView", "(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;");
|
||||||
jobject view = (*env)->CallObjectMethod(env, model->adapter, getView, index, wrapper ? wrapper->jobj : NULL, model->jobject);
|
jobject view = (*env)->CallObjectMethod(env, model->adapter, getView, index, wrapper ? wrapper->jobj : NULL, model->jobject);
|
||||||
view = _REF(view);
|
view = _REF(view);
|
||||||
GtkWidget *child = gtk_widget_get_parent(GTK_WIDGET(_PTR(_GET_LONG_FIELD(view, "widget"))));
|
GtkWidget *child = GTK_WIDGET(_PTR(_GET_LONG_FIELD(view, "widget")));
|
||||||
gtk_list_item_set_child(list_item, child);
|
GtkWidget *child_wrapper = gtk_widget_get_parent(child);
|
||||||
|
jobject layout_params = _GET_OBJ_FIELD(view, "layout_params", "Landroid/view/ViewGroup$LayoutParams;");
|
||||||
|
GtkLayoutManager *layout_manager = gtk_widget_get_layout_manager(child);
|
||||||
|
if (!layout_params && ATL_IS_ANDROID_LAYOUT(layout_manager)) { // use default layout params
|
||||||
|
android_layout_set_params(ATL_ANDROID_LAYOUT(layout_manager), MATCH_PARENT, WRAP_CONTENT);
|
||||||
|
}
|
||||||
|
gtk_list_item_set_child(list_item, child_wrapper);
|
||||||
|
|
||||||
GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
|
GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_gesture_click_new());
|
||||||
gtk_event_controller_set_propagation_phase(controller, GTK_PHASE_BUBBLE);
|
gtk_event_controller_set_propagation_phase(controller, GTK_PHASE_BUBBLE);
|
||||||
g_signal_connect(controller, "released", G_CALLBACK(on_click), list_item);
|
g_signal_connect(controller, "released", G_CALLBACK(on_click), list_item);
|
||||||
gtk_widget_add_controller(GTK_WIDGET(child), controller);
|
gtk_widget_add_controller(GTK_WIDGET(child_wrapper), controller);
|
||||||
g_object_set_data(G_OBJECT(child), "on_item_click_listener", controller);
|
g_object_set_data(G_OBJECT(child_wrapper), "on_item_click_listener", controller);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unbind_listitem_cb(GtkListItemFactory *factory, GtkListItem *list_item)
|
static void unbind_listitem_cb(GtkListItemFactory *factory, GtkListItem *list_item)
|
||||||
|
|||||||
Reference in New Issue
Block a user