День добрый, у своего контрола в событии expose_event пытаюсь установить inner border(контрол унаследован от GtkEntry), но при запуске, размеру контрола начинают резко увеличиваться, т.е контрол растёт в длину, пока программу не остановишь аварийно. Мне нужно чтобы бордер пересчитывался динамически, когда я например растягиваю контрол, т.к длина контрола растёт, то и бордер нужно передвинуть дальше к краю, но почему-то не получается :(
static gint
gtk_date_picker_expose(GtkWidget * widget, GdkEventExpose *event)
{
...
//если растягиваем контрол, его длина растёт
gdk_window_get_size(window, &w, &h);
picker->w = h+1;
picker->h = h+1;
picker->x = w-h-1;
picker->y = -1;
...
// нужно сдвинуть бордер подальше к краю, иначе при растягивании он останется на прежнем месте, например по середине, но тут проблема
set_inner_border_offset(GTK_ENTRY(widget), picker->x-1);
...
}
// установка бордера(мне нужно устанавливать его только справа)
void
set_inner_border_offset(GtkWidget * widget, int offset)
{
GtkBorder * border = (GtkBorder *)gtk_entry_get_inner_border(GTK_ENTRY(widget));
if (!border) {
border = g_new(GtkBorder, 1);
border->top = 2;
border->bottom = 2;
border->left = 2;
border->right = 2;
}
border->right = offset;
border_offset = offset;
gtk_entry_set_inner_border(GTK_ENTRY(widget), border);
g_free(border);
}
Any idea? Куда покопать?